其实,OpenSSL 早几个月已经在测试开发版里加入了 TLSv1.3 的支持,在LNMP下只需要重新编译一下Nginx时,将OpenSSL替换为1.1.1 dev版即可支持TLSv1.3了,Nginx正式版1.12本身已经是加入了对TLSv1.3的支持的。 说起来很简单,但是明月尝试了N次后都放弃了,都是编译失败。o(╯□╰)o

bf366f98aa1148a49539ec66747aa3f3.jpeg

在看到【常阳时光】博客【本博客开始支持 TLS 1.3】一文后才算是知道问题出在哪里了,于是趁着中午下班前夕撸起袖子折腾了一番,终于给搞定了!自嗨完美收工。

以前明月都是按照常规在 lnmp.conf 里添加如下的配置来编译Nginx的:

Nginx_Modules_Options='--with-openssl=/root/openssl --with-openssl-opt="enable-tls1_3 enable-weak-ssl-ciphers"'

事实证明,这是绝对的“想当然”,失败是必然的。感觉是因为军哥LNMP 1.4包就没有考虑到兼容 TLSv1.3 的问题才造成这个“失败”的。

TLS-1.3.jpg

好在Linux脚本的无敌强大,参照【本博客开始支持 TLS 1.3】一文所述的方法,直接修改 include/upgrade_nginx.sh 文件就可以完美解决了。

一、LNMP 1.4下启用TLSv1.3支持

直接修改 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 删除,最后upgrade_nginx.sh文件如下图所示:

20180111130937.jpg

接着把 OpenSSL 1.1.1draft-19 分支代码克隆到 /root/lnmp1.4/src/openssl-1.1.1-dev 目录下备用:

git clone -b tls1.3-draft-19 --single-branch https://github.com/openssl/openssl.git root/lnmp1.4/src/openssl-1.1.1-dev

然后执行 ./upgrade.sh nginx,输入想要升级的 nginx 版本,如 1.13.8,回车确认。如无意外,就能编译成功。

编译成功后,记得要在站点的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;

保存后,重启一下Nginx即可。

二、LNMP1.5正式版环境启用TLSv1.3支持

在LNMP1.5正式版中对OpenSSL的更新已经很方便了,只需要在LNMP根目录下的lnmp.conf文件里关闭默认开启OpenSSL的开关手动添加OpenSSL的编译选项即可,如下:

Enable_Nginx_Openssl='n'
Enable_PHP_Fileinfo='n'
Enable_Nginx_Lua='n'

其中经明月测试Enable_Nginx_Openssl和Enable_Nginx_Lua这两项赋值必须都是'n'才可以正常编译的,所以,一定要记得这里修改哦。

然后在添加手动编译参数的地方添加OpenSSL新版的绝对目录地址和开启支持 TLSv1.3 协议的参数,如下:

Nginx_Modules_Options='--with-threads --with-openssl=**/root/lnmp1.5/src/openssl-master** --with-openssl-opt    ='enable-tls1_3'' 

OpenSSL版本的选择目前有tls1.3-draft-18tls1.3-draft-19两个分支,tls1.3-draft-18最早,所以受到的支持也是最多的,至少国内很多HTTPS检测工具都支持的是这个分支,现在的分支已经到Draft 26了好像,目前明月使用的是Draft 23,这个大家根据自己情况自行选择吧,所有的分支都是仅供测试的。

剩下的大家就去自行体验吧,如果你启用了 CDN 的话,可能受制于 CDN 节点不支持 TLSv1.3 协议,在浏览前端应该是感觉不到啥的,至于说浏览器,目前Firefox和谷歌Chrome对 TLSv1.3 都是支持的,但正式稳定版都需要自己手动开启,具体开启方法,大家可以参考【又拍云 CDN 的HTTPS已率先支持TLS 1.3】一文中的方法开启即可。

总之,因为 TLSv1.3 目前还只是在测试阶段,并没有完全的普及开来,所以现在启用 TLSv1.3 的话基本上就是纯自嗨了。好在,目前国内 CDN 服务商又拍云已经开始了 TLSv1.3 的 CDN 测试节点,大家可以考虑尝试一下。

  • 本文部分内容摘自【常阳时光】博客文章,特此声明!
最后修改:2018 年 06 月 15 日
如果觉得我的文章对你有用,请随意赞赏