迟到的支持:Nginx支持TLS1.3

虽然一直以来源站还没有支持tls1.3但是透过CDN提供了支持。通过CDN表明上是支持了tls1.3可是我自建CDN的网站却无法等到支持。本来几年前就折腾编译了但是没有成功,刚刚发现了新的套件就试了试没想到就能tls1.3了。写着写着突然想到是不是现在源站的Nginx改改加密套件就可以支持了?!

本次同样在之前搭建VeryNginx当基础的前提下再次编译支持。

在一台Centos一台Debian但是操作又不完全一样。

Centos:

[root@Centos ~]# openssl ciphers -V tls1_3 | column -t
0x13,0x02  -  TLS_AES_256_GCM_SHA384        TLSv1.3  Kx=any  Au=any  Enc=AESGCM(256)             Mac=AEAD
0x13,0x03  -  TLS_CHACHA20_POLY1305_SHA256  TLSv1.3  Kx=any  Au=any  Enc=CHACHA20/POLY1305(256)  Mac=AEAD
0x13,0x01  -  TLS_AES_128_GCM_SHA256        TLSv1.3  Kx=any  Au=any  Enc=AESGCM(128)             Mac=AEAD
0x13,0x04  -  TLS_AES_128_CCM_SHA256        TLSv1.3  Kx=any  Au=any  Enc=AESCCM(128)             Mac=AEAD
[root@Centos ~]#  openssl version
OpenSSL 1.1.1 FIPS  11 Sep 2018

Debian:

root@Debian:~# openssl ciphers -V tls1_3 | column -t
Error in cipher list
140023812597392:error:1410D0B9:SSL routines:SSL_CTX_set_cipher_list:no cipher match:ssl_lib.c:1294:
root@Debian:~# openssl version
OpenSSL 1.0.1t  3 May 2016

期间遇到apt-get install apt-transport-https解决:

root@Denbian:~# apt-get update
E: The method driver /usr/lib/apt/methods/https could not be found.
N: Is the package apt-transport-https installed?

还有就是其中Debian的OpenSSL版本不知道为什么无法更新编译都没有成功可能是打开方式不对。

安装

1.这次我不跟上次一样使用dev版本的OpenSSL了而是到官网上面下载1.1.1d版本的。

wget https://www.openssl.org/source/openssl-1.1.1d.tar.gz

tar xvf openssl-1.1.1d.tar.gz

cd openssl-1.1.1d

grep TLS1_3_VERSION_DRAFT_TXT ./* -R

bash ./include/openssl/tls1.h

./config --prefix=/usr/local/openssl1.1.1 --openssldir=/usr/local/openssl1.1.1 --libdir=lib shared -Wl,-R,'$(LIBRPATH)' -Wl,--enable-new-dtags enable-ec_nistp_64_gcc_128 enable-tls1_3
 
make

make install

不过说实话上面的操作不知有没有效果因为我无法通过其升级Debian的版本。而且最后Centos也没明显变化(可能有误,有待下次测试)

[root@kCentos ~]# openssl ciphers -V tls1_3 | column -t
0x13,0x02  -  TLS_AES_256_GCM_SHA384        TLSv1.3  Kx=any  Au=any  Enc=AESGCM(256)             Mac=AEAD
0x13,0x03  -  TLS_CHACHA20_POLY1305_SHA256  TLSv1.3  Kx=any  Au=any  Enc=CHACHA20/POLY1305(256)  Mac=AEAD
0x13,0x01  -  TLS_AES_128_GCM_SHA256        TLSv1.3  Kx=any  Au=any  Enc=AESGCM(128)             Mac=AEAD
0x13,0x04  -  TLS_AES_128_CCM_SHA256        TLSv1.3  Kx=any  Au=any  Enc=AESCCM(128)             Mac=AEAD
root@Denbian:~/openssl-1.1.1d# openssl ciphers -V tls1_3 | column -t
Error in cipher list
140481075844752:error:1410D0B9:SSL routines:SSL_CTX_set_cipher_list:no cipher match:ssl_lib.c:1294:

最后我干脆直接把OpenSSL的路径改成1.1.1d版本的这个算了。

./configure --prefix=/opt/verynginx/openresty --user=nginx --group=nginx --with-openssl=/root/openssl-1.1.1d --with-http_v2_module --with-http_sub_module --with-http_stub_status_module --with-luajit --add-module=/root/nginx-rtmp-module --with-openssl-opt="enable-tls1_3 enable-ec_nistp_64_gcc_128" --with-pcre

其实两条是一样的就是上面的命令带了rtmp的编译下面这个没有

./configure --prefix=/opt/verynginx/openresty --user=nginx --group=nginx --with-openssl=/root/openssl-1.1.1d --with-http_v2_module --with-http_sub_module --with-http_stub_status_module --with-luajit  --with-openssl-opt="enable-tls1_3 enable-ec_nistp_64_gcc_128" --with-pcre

抛弃一些原来就有的我认为开启tls1.3只需要--with-openssl-opt="enable-tls1_3 enable-ec_nistp_64_gcc_128" --with-pcre就行了(有待指正)

最后照例将Nginx -V水上来:

root@Denbian:~# /opt/verynginx/openresty/nginx/sbin/nginx -v
nginx version: openresty/1.15.8.2
root@Denbian:~# /opt/verynginx/openresty/nginx/sbin/nginx -V
nginx version: openresty/1.15.8.2
built by gcc 4.9.2 (Debian 4.9.2-10+deb8u2)
built with OpenSSL 1.1.1d  10 Sep 2019
TLS SNI support enabled
configure arguments: --prefix=/opt/verynginx/openresty/nginx --with-cc-opt=-O2 --add-module=../ngx_devel_kit-0.3.1rc1 --add-module=../echo-nginx-module-0.61 --add-module=../xss-nginx-module-0.06 --add-module=../ngx_coolkit-0.2 --add-module=../set-misc-nginx-module-0.32 --add-module=../form-input-nginx-module-0.12 --add-module=../encrypted-session-nginx-module-0.08 --add-module=../srcache-nginx-module-0.31 --add-module=../ngx_lua-0.10.15 --add-module=../ngx_lua_upstream-0.07 --add-module=../headers-more-nginx-module-0.33 --add-module=../array-var-nginx-module-0.05 --add-module=../memc-nginx-module-0.19 --add-module=../redis2-nginx-module-0.15 --add-module=../redis-nginx-module-0.3.7 --add-module=../rds-json-nginx-module-0.15 --add-module=../rds-csv-nginx-module-0.09 --add-module=../ngx_stream_lua-0.0.7 --with-ld-opt=-Wl,-rpath,/opt/verynginx/openresty/luajit/lib --user=nginx --group=nginx --with-openssl=/root/openssl-1.1.1d --with-http_v2_module --with-http_sub_module --with-http_stub_status_module --add-module=/root/nginx-rtmp-module --with-openssl-opt='enable-tls1_3 enable-ec_nistp_64_gcc_128' --with-pcre --with-stream --with-stream_ssl_module --with-stream_ssl_preread_module --with-http_ssl_module
[root@Centos ~]# /opt/verynginx/openresty/nginx/sbin/nginx -v
nginx version: openresty/1.15.8.2
[root@Centos ~]# /opt/verynginx/openresty/nginx/sbin/nginx -V
nginx version: openresty/1.15.8.2
built by gcc 8.2.1 20180905 (Red Hat 8.2.1-3) (GCC)
built with OpenSSL 1.1.1d  10 Sep 2019
TLS SNI support enabled
configure arguments: --prefix=/opt/verynginx/openresty/nginx --with-cc-opt=-O2 --add-module=../ngx_devel_kit-0.3.1rc1 --add-module=../echo-nginx-module-0.61 --add-module=../xss-nginx-module-0.06 --add-module=../ngx_coolkit-0.2 --add-module=../set-misc-nginx-module-0.32 --add-module=../form-input-nginx-module-0.12 --add-module=../encrypted-session-nginx-module-0.08 --add-module=../srcache-nginx-module-0.31 --add-module=../ngx_lua-0.10.15 --add-module=../ngx_lua_upstream-0.07 --add-module=../headers-more-nginx-module-0.33 --add-module=../array-var-nginx-module-0.05 --add-module=../memc-nginx-module-0.19 --add-module=../redis2-nginx-module-0.15 --add-module=../redis-nginx-module-0.3.7 --add-module=../rds-json-nginx-module-0.15 --add-module=../rds-csv-nginx-module-0.09 --add-module=../ngx_stream_lua-0.0.7 --with-ld-opt=-Wl,-rpath,/opt/verynginx/openresty/luajit/lib --user=nginx --group=nginx --with-openssl=/root/openssl-1.1.1d --with-http_v2_module --with-http_sub_module --with-http_stub_status_module --with-openssl-opt='enable-tls1_3 enable-ec_nistp_64_gcc_128' --with-pcre --with-stream --with-stream_ssl_module --with-stream_ssl_preread_module --with-http_ssl_module

差点忘记了编译后修改才成功的套件了

TLS13-AES-128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;

参考

如何让Nginx快速支持TLS1.3协议详解:https://www.jb51.net/article/138665.htm
纯自嗨,LNMP下启用TLSv1.3支持过程全记录:https://www.imydl.tech/lnmp/245.html
让Nginx快速支持TLS1.3协议:https://www.jianshu.com/p/aa3f7c4d3a10
Nginx开启TLSv1.3和HTTP/2:https://www.acgist.com/article/541.html
使用 OpenSSL 命令行管理证书:https://www.jianshu.com/p/1daae319d5fc
解决apt-get update更新问题:/usr/lib/apt/methods/https could not be found. 和 NO_PUBKEY 7EA0A9C3F273FCD8:https://blog.csdn.net/baiyoucheng_007/article/details/83095848
开始试用VeryNginx:https://www.cyzwb.com/2019/11/197.html
Debian8重新编译Nginx以支持HTTP/2:https://www.cyzwb.com/2018/01/168.html

ChiuYut

2019年11月27日

发布者

ChiuYut

咦?我是谁?这是什么地方? Ya ha!我是ChiuYut!这里是我的小破站!