本博客开始支持 TLS 1.3

TLS 1.3 目前只是 draft 版本,而支持 TLS 1.3 的 OpenSSL 1.1.1 的 draft-18 分支也只是开发者版本,所以,暂时最好不要用在生产环境。

其实前几天就折腾过 lnmp 1.4 升级 nginx 1.13.7,想顺手加上 TLS 1.3 支持,无奈折腾一圈以失败告终。

lnmp 1.4 更新至 nginx 1.12.2

lnmp 更新 nginx 还是挺方便的,执行 ./upgrade.sh nginx 然后输入 nginx 版本号就可以自动升级。nginx 升级为平滑升级,升级过程不影响 nginx 运行。 (更多...

sys 博友提醒会不会是配置没写对,细想也对,按道理是能成功的。

2017-12-14 23:50:31
@老杨 我想了下,既然去掉 enable-weak-ssl-ciphers 的编译选项可以成功,那不妨换个思路也试一试去掉 enable-tls1_3 只留下一个 enable-weak-ssl-ciphers 是否可行,这样排除一下是 enable-weak-ssl-ciphers 自身问题导致的。 另外,建议编译失败后在 /root/openssl 目录中执行一下 make clean 把之前编译过可能有问题的配置清除干净再重编译。

修改 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 一定程度上就是自嗨而已。

 614-tls1-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/

声明:除非注明,常阳时光文章均为原创
本文地址:https://cyhour.com/614/
转载时必须以链接形式注明原始出处。
Views: 4K Tags:  ,  ,  ,  , 

Comments:39

  1. 你这是折腾无止境啊

    2017.12.15 23:50 # 回复
    1楼
  2. 是不是我们喜欢博客的都爱折腾

    2017.12.16 17:04 # 回复
    2楼
  3. 这个有什么好处呢?

    2017.12.17 18:32 # 回复
    3楼
  4. 技术帝,真的跟不上。。

    2017.12.18 09:01 # 回复
    4楼
  5. 如果要知道最近有什麽新技术,来这里没错了!

    2017.12.18 16:09 # 回复
    5楼
    • @皮皮 哪里哪里,我这是照别人的教程依葫芦画瓢啊……

      2017.12.18 17:31 # 回复
  6. 生生不息,折腾不止啊!

    2017.12.18 17:22 # 回复
    6楼
  7. 我还是等lnmp升级吧,把系统搞坏了划不来 :)

    2017.12.20 15:42 # 回复
    7楼
    • @Mr.He 按照这个操作应该搞不烂,搞之前弄个快照,就不怕了,哈哈哈……

      2017.12.20 15:48 # 回复
  8. 目前我连SSL都木有

    2017.12.22 11:01 # 回复
    8楼
  9. 1.3有什么好处?我也只是免费使用Let’s Encrypt,测试显示SSL为A+。

    2017.12.24 08:07 # 回复
    9楼
    • @佐仔 看介绍好像是更安全,速度更快……但是目前只是拟稿,浏览器默认不支持,所以很大程度上只是自嗨。

      2017.12.24 12:52 # 回复
  10. 厉害,看起来就贼安全

    2017.12.24 20:35 # 回复
    10楼
  11. Klose

    我这里为什么看到还是1.2。。。。

    2017.12.25 16:07 # 回复
    11楼
  12. 厉害,终于看到 一个有效的解决方案了!抽空我也试试去!

    2018.01.11 11:19 # 回复
    12楼
    • @明月登楼 打开你的博客提示:{“msg”:”handshake failed”,”code”:”50302006″,”id”:”cf7f0128f4593cbdb747cc527608c506″}。折腾坏了?

      2018.01.11 11:50 # 回复
  13. 才发现,在CDN后面这个TLS1.3就无效了!又拍云又是几个节点测试支持TLS1.3。╯□╰
    不过,还是要感谢博主分享的办法!

    2018.01.12 19:37 # 回复
    13楼

发表留言

炒蛋:Vultr 送$25 | 搬瓦工年付$19补货,优惠码 BWH26FXH3HIQ | 推荐VPS信息