其实,OpenSSL 早几个月已经在测试开发版里加入了 TLSv1.3 的支持,在LNMP下只需要重新编译一下Nginx时,将OpenSSL替换为1.1.1 dev版即可支持TLSv1.3了,Nginx正式版1.12本身已经是加入了对TLSv1.3的支持的。 说起来很简单,但是明月尝试了N次后都放弃了,都是编译失败。o(╯□╰)o
在看到【常阳时光】博客【本博客开始支持 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 的问题才造成这个“失败”的。
好在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
文件如下图所示:
接着把 OpenSSL 1.1.1
的 draft-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-18
和tls1.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 测试节点,大家可以考虑尝试一下。
- 本文部分内容摘自【常阳时光】博客文章,特此声明!
7 条评论
的文章太赞了,领教了!
============================check files==================================
nginx-1.14.0.tar.gz [found]
============================check files==================================
Uncompress nginx-1.14.0.tar.gz...
cd nginx-1.14.0...
./configure: error: invalid option "--with-openssl-opt"
make: * No targets specified and no makefile found. Stop.
make: * No targets specified and no makefile found. Stop.
mv: cannot stat ‘/usr/local/nginx/sbin/nginx’: No such file or directory
cp: cannot stat ‘objs/nginx’: No such file or directory
Test nginx configure file...
include/upgrade_nginx.sh: line 70: /usr/local/nginx/sbin/nginx: No such file or directory
upgrade...
make: * No rule to make target `upgrade'. Stop.
Checking ...
Error: Nginx upgrade failed.
出现这个情况我也是很头疼啊
看这个提示应该是参数不对,invalid option "--with-openssl-opt"就是这个问题!你看看去掉这个参数后能不能编译通过了!
曹哥。你这么厉害。你媳妇知道吗,哇哈哈
说实话,她真的不知道!
赶紧回去嘚瑟一下,哈哈哈……
没有用,基本上是“对牛弹琴”!完全不懂!