昨天尝鲜 Google 公共证书后照例打开 F12 欣赏下证书,结果在安全页发现使用的是 TLS1.2 连接:
using TLS1.2, ECDHE_RAS with X25519, and AES_256_GCM.
也在 ssllabs 上反复确认了不支持 TLS1.3 ,但我记得很久以前专门研究配置过是 TLS1.3 的,而且同样配置的另一台 VPS 上的网站也能开始 TLS1.3 ,就很迷惑...
环境如下:
编译配置:
./configure \
--prefix=/etc/nginx \
--with-openssl=../openssl-1.1.1n \
--with-openssl-opt='enable-tls1_3' \
--with-http_v2_module \
--with-http_ssl_module \
--with-http_gzip_static_module \
--with-http_stub_status_module \
--with-http_sub_module \
--with-http_realip_module \
--with-stream \
--with-stream_ssl_module \
--with-stream_ssl_preread_module \
SSL 配置:
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers ECDH+CHACHA20:ECDH+AESGCM+AES256;
ssl_prefer_server_ciphers off;
昨天折腾了一晚也没发现问题所在,直到今天打开了 nginx.conf 文件仔细比对,发现去年加上了一行奇怪的东西:
server {
listen 443 ssl default_server;
# return 444;
ssl_reject_handshake on;
}
ssl_reject_handshake
是 Nginx 1.19.4 引入的新特性,用来 block 未指定的 SSL 握手,以前不知道在哪里看到一个安全问题后加上的,可以避免在 IP 访问时通过证书暴露域名,试着删除之后,TLS1.3 终于回来了。
顺着关键词搜了下发现我不是一个人: https://stackoverflow.com/questions/71023951/ssl-alert-number-70-with-tlsv1-3
但应该是在 OpenSSL 1.1.1h 修复了,但...不过问题解决了就好,不然逼死强迫症...
1
ab 2022-04-19 15:39:20 +08:00
OpenSSL 1.1.1n 15 Mar 2022
配置和你一样,TLS1.3 无问题,而且我很暴力的同时加了 80 server { listen 80 default_server; listen 443 ssl http2 default_server; server_name _; ssl_protocols TLSv1.2 TLSv1.3; ssl_reject_handshake on; access_log off; return 444; } |
2
ab 2022-04-19 15:40:52 +08:00 1
ssl_protocols TLSv1.2 TLSv1.3;
这行加在 ssl_reject_handshake on; 下面,再试试? |
4
1265578519 2022-04-19 17:14:13 +08:00 1
nginx 无法启用 tls1.3 的握手失败解决办法,openssl 1.1.1h bug
https://bbs.itzmx.com/forum.php?mod=viewthread&tid=97997&fromuid=1 网上一搜不是有解决办法 |
5
Showfom 2022-04-19 20:23:09 +08:00 2
Nginx 默认的 TLS 协议会先遵守 default_server;
所以你得同时加上 ssl_protocols TLSv1.2 TLSv1.3; 就可以解决了 |