为Nginx加上SSL支持

在加入SSL支持之前需要准备点东西:

1.去到正规渠道申请SSL证书

Q:为什么要去正规的渠道申请? A:因为自己签发的证书浏览器是不会认可的,仍然会显示不安全

我这里是去腾讯云申请一个,免费的DV SSL, 好处是免费,但是只能够签发一个域名,且子域名也是有且仅此一个(例如:www.acg00.com)

2.申请到证书之后是两个文件

xxxx.crt     xxxx.key

3.编辑nginx相应的vhost的config文件

例如打个比方xxx.com.conf文件

// OUTPUT CODE
server
{
listen 80;
server_name xxxx.com;
index index.html index.htm index.php default.html default.htm default.php;
root /home/wwwroot/xxx;
}

修改成如下

// OUTPUT CODE
//上面这一个是用于http到https的转发
server
{
listen 80;
server_name www.acg00.com acg00.com;
return 301 https://$server_name$request_uri;
}
server
{
listen 443;
server_name xxxx.com;
index index.html index.htm index.php default.html default.htm default.php;
root /home/wwwroot/xxx;
ssl on;
ssl_certificate ./ssl/xxxx.crt;
ssl_certificate_key ./ssl/xxxx.key;
ssl_session_timeout 5m;
ssl_protocols SSLv2 SSLv3 TLSv1;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;
}

ssl_certificate
证书其实是个公钥,它会被发送到连接服务器的每个客户端。

ssl_certificate_key
私钥是用来解密的,所以它的权限要得到保护但nginx的主进程能够读取。当然私钥和证书可以放在一个证书文件中,这种方式也只有公钥证书才发送到client。

ssl_protocols
指令用于启动特定的加密协议,nginx在1.1.13和1.0.12版本后默认是ssl_protocols SSLv3 TLSv1 TLSv1.1 TLSv1.2,TLSv1.1与TLSv1.2要确保OpenSSL >= 1.0.1 ,SSLv3 现在还有很多地方在用但有不少被攻击的漏洞。

ssl_ciphers
选择加密套件,不同的浏览器所支持的套件(和顺序)可能会不同。这里指定的是OpenSSL库能够识别的写法,你可以通过 openssl -v cipher ‘RC4:HIGH:!aNULL:!MD5’(后面是你所指定的套件加密算法) 来看所支持算法。

ssl_prefer_server_ciphers
on设置协商加密算法时,优先使用我们服务端的加密套件,而不是客户端浏览器的加密套件。

ssl_session_cache shared
设置ssl/tls会话缓存的类型和大小。如果设置了这个参数一般是shared,buildin可能会参数内存碎片,默认是none,和off差不多,停用缓存。如shared:SSL:10m表示我所有的nginx工作进程共享ssl会话缓存,官网介绍说1M可以存放约4000个sessions。 详细参考serverfault上的问答ssl_session_cache。

ssl_session_timeout
客户端可以重用会话缓存中ssl参数的过期时间,内网系统默认5分钟太短了,可以设成30m即30分钟甚至4h。

4.修改完成后重启nginx即可

5.验证是否生效,如不生效可能是防火墙将相应的https端口挡住了,放行即可

加入讨论

电子邮件地址不会被公开。