使用 TLSv1.3 的 SSL 警报编号 70
SSL alert number 70 with TLSv1.3
# nginx -V
nginx version: nginx/1.21.4
built with OpenSSL 1.1.1f 31 Mar 2020
我已将 nginx 配置为支持 TLSv1.3。
ssl_protocols TLSv1.2 TLSv1.3;
但我无法使用 TLSv1.3 访问我的主机:
# openssl s_client -connect hostname.com:443 -tls1_3
CONNECTED(00000003)
140544753464640:error:1409442E:SSL routines:ssl3_read_bytes:tlsv1 alert protocol version:../ssl/record/rec_layer_s3.c:1543:SSL alert number 70
---
no peer certificate available
...
仅 TLSv1.2 有效:
# openssl s_client -connect hostname.com:443 -tls1_2
CONNECTED(00000003)
...
任何主机,如 google.com 或 cloudflare.com 都可以使用相同的 openssl 命令正常连接。
当然,SSL Labs 测试也确认未启用 TLSv1.3 支持。
我也阅读了 this thread 并仔细检查,我只有一个 ssl_protocols
行 cd /etc/nginx; grep -rl "ssl_protocols"
,它只输出一个文件。
我发现了我的问题,我配置了一个默认的“捕获所有”服务器:
server {
listen 443 ssl default_server;
ssl_reject_handshake on;
}
如此处文档中所述:https://nginx.org/en/docs/http/ngx_http_ssl_module.html#ssl_reject_handshake
问题已通过删除 ssl_reject_handshake on;
而不是该服务器上的 return 444 来解决,例如:
server {
listen 443 ssl default_server;
ssl_certificate ssl/cert.pem;
return 444;
}
这是一个known bug and should be fixed with OpenSSL 1.1.1h
# nginx -V
nginx version: nginx/1.21.4
built with OpenSSL 1.1.1f 31 Mar 2020
我已将 nginx 配置为支持 TLSv1.3。
ssl_protocols TLSv1.2 TLSv1.3;
但我无法使用 TLSv1.3 访问我的主机:
# openssl s_client -connect hostname.com:443 -tls1_3
CONNECTED(00000003)
140544753464640:error:1409442E:SSL routines:ssl3_read_bytes:tlsv1 alert protocol version:../ssl/record/rec_layer_s3.c:1543:SSL alert number 70
---
no peer certificate available
...
仅 TLSv1.2 有效:
# openssl s_client -connect hostname.com:443 -tls1_2
CONNECTED(00000003)
...
任何主机,如 google.com 或 cloudflare.com 都可以使用相同的 openssl 命令正常连接。
当然,SSL Labs 测试也确认未启用 TLSv1.3 支持。
我也阅读了 this thread 并仔细检查,我只有一个 ssl_protocols
行 cd /etc/nginx; grep -rl "ssl_protocols"
,它只输出一个文件。
我发现了我的问题,我配置了一个默认的“捕获所有”服务器:
server {
listen 443 ssl default_server;
ssl_reject_handshake on;
}
如此处文档中所述:https://nginx.org/en/docs/http/ngx_http_ssl_module.html#ssl_reject_handshake
问题已通过删除 ssl_reject_handshake on;
而不是该服务器上的 return 444 来解决,例如:
server {
listen 443 ssl default_server;
ssl_certificate ssl/cert.pem;
return 444;
}
这是一个known bug and should be fixed with OpenSSL 1.1.1h