TLS 1.3 目前只是 draft 版本,而支持 TLS 1.3 的 OpenSSL 1.1.1 的 draft-18 分支也只是开发者版本,所以,暂时最好不要用在生产环境。
其实前几天就折腾过 lnmp 1.4 升级 nginx 1.13.7,想顺手加上 TLS 1.3 支持,无奈折腾一圈以失败告终。
sys 博友提醒会不会是配置没写对,细想也对,按道理是能成功的。
修改 lnmp1.4 配置文件升级 nginx
按道理,编辑 lnmp1.4 目录下 lnmp.conf 配置文件,在 Nginx_Modules_Options 处加入 OpenSSL 支持 TLS 1.3 关键选项 enable-tls1_3,以及 enable-weak-ssl-ciphers(作用是让 OpenSSL 继续支持 3DES 等不安全的 Cipher Suite,如果不加这个选项,XP 下 IE8 会无法访问),然后升级就可以。
Nginx_Modules_Options='--with-openssl=/root/openssl --with-openssl-opt="enable-tls1_3 enable-weak-ssl-ciphers"'
又或者
Nginx_Modules_Options='--with-openssl=/root/openssl --with-openssl-opt=enable-tls1_3 enable-weak-ssl-ciphers'
但是实际上两者都是无法成功的。今天试着直接修改 upgrade_nginx.sh,./configure 处加上 OpenSSL 相关的这个配置项。把文件中两处
${Nginx_With_Openssl} ${NginxMAOpt} ${Nginx_Modules_Options}
替换成下面的代码:
--with-openssl=/root/lnmp1.4/src/openssl-1.1.1-dev ${NginxMAOpt} --with-openssl-opt="enable-tls1_3 enable-weak-ssl-ciphers"
注意 "enable-tls1_3 enable-weak-ssl-ciphers" 的 "" 不要漏掉。
upgrade_nginx.sh 文件中的 Install_Nginx_Openssl 删除。
接着把 OpenSSL 1.1.1 的 draft-18 分支代码克隆到 /root/lnmp1.4/src/openssl-1.1.1-dev 目录下备用:
git clone -b tls1.3-draft-18 --single-branch https://github.com/openssl/openssl.git /root/lnmp1.4/src/openssl-1.1.1-dev
然后执行 ./upgrade.sh nginx,输入想要升级的 nginx 版本,如 1.13.7,回车确认。如无意外,就能编译成功。
...
Checking ...
Program will display Nginx Version......
nginx version: nginx/1.13.7
======== upgrade nginx completed ======
执行 nginx -V 可以看到详细配置信息:
nginx version: nginx/1.13.7
built by gcc 4.8.5 20150623 (Red Hat 4.8.5-16) (GCC)
built with OpenSSL 1.1.1-dev xx XXX xxxx
TLS SNI support enabled
configure arguments: --user=www --group=www --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module --with-http_v2_module --with-http_gzip_static_module --with-ipv6 --with-http_sub_module --with-openssl=/root/lnmp1.4/src/openssl-1.1.1-dev --with-openssl-opt='enable-tls1_3 enable-weak-ssl-ciphers'
WEB 站点配置
在 Nginx 的站点配置中,增加 TLSv1.3 相关参数:
ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3; # 增加 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;
重启 lnmp restart,使用 Qualys SSL Labs's SSL Server Test 可以测试到服务器支持 TLSv1.3,XP 下 IE8 也能访问。
浏览器设置
Chrome 62+ 中需要将 chrome://flags/ 中 TLS 1.3 改为 Enabled (Draft);Firefox,将 about:config 中的 security.tls.version.max 改为 4;
所以,目前开启 TLS 1.3 一定程度上就是自嗨而已。
更新记录
2018-03-25:Chrome 65.0.3325.181 已不支持 TLS 1.3 (Draft 18),最低支持 TLS 1.3 (Draft 22)。如需体验,需要安装 openssl-1.1.1-pre 版本,比如:openssl-1.1.1-pre3 - via:https://www.openssl.org/source/
2018-11-30:最新文章