Nginx+SSL配置Https服务器
1.何为SSL:
SSL证书是数字证书的一种,类似于驾驶证、护照和营业执照的电子副本。SSL证书通 过在客户端浏览器和Web服务器之间建立一条SSL安全通
道(Secure socket layer(SSL)安全协 议是由Netscape Communication公司设计开发。该安全协议主要用来提供对用户和服务器的认 证;对
传送的数据进行加密和隐藏;确保数据在传送中不被改变,即数据的完整性,现已成为 该领域中全球化的标准。由于SSL技术已建立到所有主要
的浏览器和WEB服务器程序中,因此 ,仅需安装服务器证书就可以激活该功能了)。即通过它可以激活SSL协议,实现数据信息在 客户端和服务
器之间的加密传输,可以防止数据信息的泄露。保证了双方传递信息的安全性, 而且用户可以通过服务器证书验证他所访问的网站是否是真实
可靠。
2.生成SSL证书:
使用openssl工具来生成一个SSL证书, 由于是测试, 所以证书就不设密码了, 如果需要线 上使用的话, 需要向相关机构进行申请购买, 申请
证书的具体要求也因颁发商不同而不同, 看操
作吧.
首先生成个key文件:
# openssl genrsa -des3 -out ssl.key 1024
<- 1024并不是固定的, 会由于要求不同而不同
<- ssl.key 是生成的key文件, 之后会用到, 一定保存好
<- 如果需要加密的话, 加参数就可以了, 具体加密方式不列举, 请找man
<- 如果使用加密的话, 会要求输入密码( 这个密码一定要保存好, 日后重启nginx都需要 )
使用key文件, 生成一个csr文件:
# openssl req -new -key ssl.key -out ssl.csr
<- 测试可以一路回车, 如果是正式环境的话, 需要填写之中信息 <- 正式环境的话, 根据需求来填写详细信息
使用csr文件, key文件来颁发证书:
# openssl x509 -req -days 365 -in ssl.csr -signkey ssl.key -out ssl.crt 此时会在当前目录下生成一个ssl.crt的文件, 这个文件日
后要加到nginx配置文件里
配置Nginx: Nginx开启SSL模块:
Nginx配置Https主机, 必须要开启SSL模块, 如果没有开启的话, 需要重新编译Nginx 使用如下命令, 检查Nginx编译时是否加入了SSL模块的
支持
# ./sbin/nginx -V "查看Nginx版本及编译参数等信息"
nginx version: Apache/2.2.21
built by gcc 4.4.7 20120313 (Red Hat 4.4.7-4) (GCC)
TLS SNI support enabled
configure arguments: --prefix=/usr/local/nginx-1.4.3 --with-http_stub_status_module
--with-http_ssl_module --add-module=nginx-devel-kit --add-module=lua-nginx-module --add-module=echo-nginx-module --add-
module=memc-nginx-module-master --add-module=redis2-nginx-module --add-module=set-misc-nginx-module-master --add-
module=nginx_upstream_check_module
可以看到--with-http_ssl_module, Nginx是开启了Nginx模块支持的, 如果查看Nginx编译参数时候, 没 有找到 ”--with-http_ssl_module
“ 参数, 那么就要重新编译Nginx了, 加上此参数即可
编辑Nginx配置文件:
使用你习惯的编辑器来编辑nginx的配置文件, 在server块添加以下几行:
1 listen 443;
2 ssl on;
3 ssl_protocols SSLv2 SSLv3 TLSv1;
4 ssl_ciphers HIGH:!aNULL:!MD5;
5 ssl_prefer_server_ciphers on;
6 ssl_session_timeout 10m;
7 ssl_certificate /usr/local/nginx-1.4.3/conf/new_ssl/pay.xywy.com.crt;
8 ssl_certificate_key /usr/local/nginx-1.4.3/conf/new_ssl/SSL.KEY;
说明:
第1行: 使Nginx监听443端口
第2行: 开启SSL模块
第3行: 配置SSL支持的协议
第4行: 配置SSL加密方式
第5行: 配置依赖SSLv3和TLSv1协议的服务器密码将优先于客户端密码
第6行: 配置SSL会话超时时间
第7行: 配置SSL证书, 使用key文件, csr文件签发的证书
第8行: 配置SSL秘钥, 我们上一步生成的key文件
如果需要将所有http请求跳转到https的话,还需要在80端口的配置文件中添加以下一行
rewrite ^ https://pay.xywy.com$request_uri? permanent;
编辑好配置文件后, 重启Nginx.
ps: 重启Nginx最好stop再start, 否则可能会导致证书不生效, 重启时如果之前建立key文 件时, 使用了加密认证, 那么此时输入创建key文
件时, 输入的密码就可以了
配置时可能会出现的问题及解决方法:
E: 证书不生效
A1: 可能由于Nginx重启的时候使用的是reload, 而不是stop再start
A2: 可能由于配置里面, 一个server同时监听80和443两个端口, 如果说要同时支持http和
https的话, 将两个listen端口写在两个server里面.
本文出自 “Study-Everyday” 博客,请务必保留此出处http://studys.blog.51cto.com/9736817/1672522
原文地址:http://studys.blog.51cto.com/9736817/1672522