以前使用 OpenSSL 1.1.1 dev draft-18 开启过 TLSv1.3,那时候浏览器都得手工开启才支持 TLSv1.3,所以基本上纯属自娱自乐。八月份 TLS 1.3 正式发布,九月份 OpenSSL 1.1.1 正式版……
Chrome 70+ 版本默认开启 TLS 1.3 Final 支持;Firefox 63+ 也默认支持……
博友 kn007 大佬折腾 TLS 1.3;可乐没气的猫也有个教程:使用 NGINX 与 OPENSSL- 1.1.1开启 TLSV1.3;比较相近的还有 24点半 的教程——用自定义 OpenSSL 版本编译 Nginx 以支持 TLS 1.3&Nginx 安装 Lua 扩展教程
当然了,我还是通过 lnmp1.5 nginx 升级脚本升级 nginx 来把 OpenSSL 1.1.1 编译进去。技术菜,只会这么干。
修改 lnmp1.5 脚本文件
首先是 \lnmp1.5\include\version.sh 文件,将 Openssl_Ver='openssl-1.0.2o' 修改为:Openssl_Ver='openssl-1.1.1a'
然后修改 \lnmp1.5\lnmp.conf 文件,将 Nginx_Modules_Options='' 改为:Nginx_Modules_Options='--with-openssl-opt=enable-weak-ssl-ciphers'(注:enable-weak-ssl-ciphers 作用是让 OpenSSL 继续支持 3DES 等不安全 Cipher Suite,如果你打算继续支持 IE8,才需要加上这个选项;若不需要支持 XP IE8 访问可忽略此处修改)
使用 lnmp1.5 脚本升级 nginx
注意,升级有风险,最好先快照备份。
进入 lnmp1.5 目录,执行命令:
./upgrade.sh nginx
然后输入需要升级的 nginx 版本号,如目前最新的 1.15.7。nginx 最新版本号可从官网获取:http://nginx.org
静待编译完成。
Checking ...
Program will display Nginx Version......
nginx version: nginx/1.15.7
======== upgrade nginx completed ======
执行 nginx -V
可查询详细配置信息:
nginx version: nginx/1.15.7
built by gcc 4.8.5 20150623 (Red Hat 4.8.5-28) (GCC)
built with OpenSSL 1.1.1a 20 Nov 2018
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-http_sub_module --with-stream --with-stream_ssl_module --with-openssl=/root/lnmp1.5/src/openssl-1.1.1a --with-openssl-opt=enable-weak-ssl-ciphers
修改主机配置文件
ssl_protocols 加入 TLSv1.3 支持,如:ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3;
ssl_ciphers 参考配置(via:JerryQu):
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:!MD;
用 Cloudflare 推荐配置会报错,应该是因为我没有给 OpenSSL 打上 hakasenyang 大神 Patch 补丁所致,没有继续折腾,直接用以前用过的配置。
Cloudflare 目前推荐配置如下:
ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3;
ssl_ecdh_curve X25519:P-256:P-384:P-224:P-521;
ssl_ciphers '[ECDHE-ECDSA-AES128-GCM-SHA256|ECDHE-ECDSA-CHACHA20-POLY1305|ECDHE-RSA-AES128-GCM-SHA256|ECDHE-RSA-CHACHA20-POLY1305]:ECDHE+AES128:RSA+AES128:ECDHE+AES256:RSA+AES256:ECDHE+3DES:RSA+3DES';
ssl_prefer_server_ciphers on;
文件修改完,重启一下 nginx,然后就可以去浏览器访问验证一下。
TLSv1.3 是否开启成功验证
1、Chrome 70+ 版本打开网站,F12 打开开发者工具,「Security」可以看到 Connection - secure (strong TLS 1.3) 字样信息。
2、Firefox 63+ 版本打开网站,F12 打开开发者工具,「网络」,刷新页面,在「网络」资源列表下随便选中一个本站链接或者打开页面的链接,然后在右侧详细信息查看「安全性」即可看到连接协议版本。
3、在线检测:https://www.ssllabs.com,还能检测兼容性。
浏览器支持情况:https://caniuse.com/#feat=tls1-3
Comments:8
这方面我是能用就行了,自己搞还是不太懂,话说LNMP一键安装包内存使用率高吗?
@山小炮 折腾多了多少懂点皮毛。内存的话以前 512的机子就够用,现在2G,也是要占用1G+不过好像这个占用是 Linux 的机制?
@老头 宝塔路过,哈哈
@山小炮 反正你 VPS 不少,有空可以换着折腾试试。
宝塔面板折腾TLS1.3貌似不太容易,只会用现成的。
@灰常记忆 那就等支持呗,反正又不是必需品。
明天试一下?
@木瓜园 对你来说应该不难。