0%

nginx之HTTPS配置

https现在是标配了,HTTPS 可以给用户带来更安全、比如减少了被劫持的概率,更好隐私保护的网络体验,这些好处大家都耳熟能详,本文不再赘述。现在很多浏览器都在推行HTTPS的普及。尽快升级吧。

其实大体就是分为ssl证书申请配置HTTPS两个步骤

证书申请

这次介绍并没有从申请证书开始,因为之前已经申请过了,申请步骤请参考
SSL 证书主要有两个功能:加密和身份证明,通常需要购买,也有免费的,通过第三方 SSL 证书机构颁发。分为企业级别和个人级别。
SSL 具体加密实现参考
查看证书相关配置,包括哪个机构颁发的,过期时间等等信息可以到https://www.chinassl.net 自助查看

nginx HTTPS配置

首先我们把得到的domain.key domain.crt 放到 nginx的conf下,
可以在nginx.conf 的server中配置

基础配置

1
2
3
4
5
6
7
8
9
10
11
12
 server {
listen 443 ssl http2;
#证书文件(注意路径及权限)
ssl on;
ssl_certificate example.com.crt;
#私钥文件
ssl_certificate_key example.com.key;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers HIGH:!aNULL:!MD5;

#....
}

必须使用监听命令 listen 的 ssl 参数和定义服务器证书文件和私钥文件

ssl_protocols 可以用来限制连接只包含 SSL/TLS 的加強版本,默认值如上。
ssl_ciphers 选择加密套件,不同的浏览器所支持的套件(和顺序)可能会不同。这里指定的是OpenSSL库能够识别的写法,你可以通过 openssl -v cipher ‘RC4:HIGH:!aNULL:!MD5’(后面是你所指定的套件加密算法) 来看所支持算法。

加强 HTTPS 安全性

1
2
3
4
ssl_prefer_server_ciphers ON;
add_header X-Frame-Options DENY;
add_header X-Content-Type-Options nosniff;
add_header X-Xss-Protection 1;

ssl_prefer_server_ciphers ON设置协商加密算法时,优先使用我们服务端的加密套件,而不是客户端浏览器的加密套件。
add_header X-Frame-Options DENY减少点击劫持

HTTPS优化参数

1
2
3
4
ssl_session_cache shared:SSL:10m;

ssl_session_timeout 10m;
ssl_buffer_size 1400;

ssl_session_cache shared:SSL:10m; 设置ssl/tls会话缓存的类型和大小。如果设置了这个参数一般是shared,buildin可能会参数内存碎片,默认是none,和off差不多,停用缓存。如shared:SSL:10m表示我所有的nginx工作进程共享ssl会话缓存,官网介绍说1M可以存放约4000个sessions。
ssl_session_timeout 10m; 客户端可以重用会话缓存中ssl参数的过期时间。
ssl_buffer_size 1400; 缓冲区调优,从1.5.9版本开始,Nginx允许使用ssl_buffer_size指令自定义TLS缓冲区的大小,默认值是 16 KB,但是这个值不一定是最优化的,尤其是你希望首字节数据被尽早发送时,有报告显示使 用1400字节的配置可以显著减少延迟。参考

配置参考

1
2
3
4
5
6
7
8
9
10
11
12
ssl                  on;
ssl_session_timeout 30m;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;

ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA:!CAMELLIA;

ssl_prefer_server_ciphers on;
ssl_buffer_size 1400;

ssl_session_cache shared:SSL:10m;
ssl_certificate domain.crt;
ssl_certificate_key domain.key;