本站早先启用了HTTPS+HTTP2,现在也支持TLSv1.3,更多了解TLSv1.3,可以查看WIKI。
这篇文章仅记录过程。
环境:
CentOS7.4
存在yum安装的nginx,版本是1.14;系统的openssl版本是1.0.2k(这俩是之前启用H2时升级的)
启用TLSv.13思路:
核心就是让nginx和openssl支持。目前 Nginx 1.13 以上的版本支持 TLS 1.3 版本,而 OpenSSL 1.1.1 版本支持 TLS 1.3 版本。
所以版本要大于上面两个即可。
虽然nginx版本到了,但是由于yum安装的,又不升级系统本身的openssl,所以只能卸载再编译安装nginx。
步骤:
升级时间是2019-02-27,当天nginx最新版本是nginx-1.15.9,openssl最新版本是1.1.1b
- 下载、编译、安装
cd /usr/local/src/
yum install -y wget jemalloc jemalloc-devel
wget https://www.openssl.org/source/openssl-1.1.1b.tar.gz
wget http://nginx.org/download/nginx-1.15.9.tar.gz
tar zxf openssl-1.1.1b.tar.gz
tar zxf nginx-1.15.9.tar.gz
cd nginx-1.15.9
./configure --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module --with-http_v2_module --with-http_gzip_static_module --with-http_sub_module --with-stream --with-stream_ssl_module --with-openssl=../openssl-1.1.1b --with-openssl-opt='enable-tls1_3 enable-weak-ssl-ciphers' --with-ld-opt=-ljemalloc
make
make install
- 卸载原有nginx并更新新的nginx配置
不需要yum安装的nginx了,卸载就行,省的回头不小心乱了,同时将配置文件迁移到新的中,要修改使其支持TLSv1.3。
修改的地方:
ssl on,去掉,改为listen 443 ssl http2,为什么?
nginx1.15.0更改的。不然会触发如下警告:
nginx: [warn] the “ssl” directive is deprecated, use the “listen … ssl” directive instead in /usr/local/nginx/conf/xx.conf:7
协议和加密套件的配置(个人示例):
ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3;
ssl_ciphers TLS13-AES-256-GCM-SHA384:TLS13-CHACHA20-POLY1305-SHA256:TLS13-AES-128-GCM-SHA256:TLS13-AES-128-CCM-8-SHA256:TLS13-AES-128-CCM-SHA256:EECDH+CHACHA20:EECDH+CHACHA20-draft:EECDH+ECDSA+AES128:EECDH+aRSA+AES128:RSA+AES128:EECDH+ECDSA+AES256:EECDH+aRSA+AES256:RSA+AES256:EECDH+ECDSA+3DES:EECDH+aRSA+3DES:RSA+3DES:!MD5;
注意!所有支持HTTPS的配置文件都要更新协议和加密套件使其支持TLSv1.3,否则单个不生效!
我碰到了这个问题,后来查到这篇文章,修改了所有的解决问题。
- 验证
可以到https://myssl.com/验证HTTPS的网站
Chrome、Firefox等现代浏览器支持了TLSv1.3,我用的chrome72.0.3626.119,F12打开开发者工具-Security,如图:
附录:
server {
listen 80;
listen 443 ssl http2;
server_name xxx;
charset utf-8;
access_log /var/log/nginx/access.log main;
ssl_certificate certs/full_chain.pem;
ssl_certificate_key certs/private.key;
#OCSP Stapling开启,OCSP是用于在线查询证书吊销情况的服务,使用OCSP Stapling能将证书有效状态的信息缓存到服务器,提高TLS握手速度
ssl_stapling on;
#OCSP Stapling验证开启
ssl_stapling_verify on;
#用于查询OCSP服务器的DNS
resolver 8.8.8.8 114.114.114.114 valid=300s;
#查询域名超时时间
resolver_timeout 5s;
#SSL优化配置
#Session Cache,将Session缓存到服务器,这可能会占用更多的服务器资源
ssl_session_cache builtin:1000 shared:SSL:10m;
#开启浏览器的Session Ticket缓存
ssl_session_tickets on;
#SSL session过期时间
ssl_session_timeout 10m;
#只启用 TLS 系列协议
ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3;
#加密套件,这里用了CloudFlare's Internet facing SSL cipher configuration
ssl_ciphers TLS13-AES-256-GCM-SHA384:TLS13-CHACHA20-POLY1305-SHA256:TLS13-AES-128-GCM-SHA256:TLS13-AES-128-CCM-8-SHA256:TLS13-AES-128-CCM-SHA256:EECDH+CHACHA20:EECDH+CHACHA20-draft:EECDH+ECDSA+AES128:EECDH+aRSA+AES128:RSA+AES128:EECDH+ECDSA+AES256:EECDH+aRSA+AES256:RSA+AES256:EECDH+ECDSA+3DES:EECDH+aRSA+3DES:RSA+3DES:!MD5;
#由服务器协商最佳的加密算法
ssl_prefer_server_ciphers on;
#开启HSTS,并设置有效期为9460800秒(9个月),包括子域名(根据情况可删掉):includeSubdomains,预加载到浏览器缓存(根据情况可删掉)
add_header Strict-Transport-Security "max-age=15768001; preload";
#禁止被嵌入框架
#add_header X-Frame-Options DENY;
#防止在IE9、Chrome和Safari中的MIME类型混淆攻击
add_header X-Content-Type-Options nosniff;
#处理静态资源:
location ~ ^\/static\/.*$ {
root /xxx;
access_log off;
}
location / {
proxy_pass http://127.0.0.1:110;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}