TLS 1.3 无法在装有 openssl 1.1.1n 的 nginx 1.21 上运行

TLS 1.3 无法在装有 openssl 1.1.1n 的 nginx 1.21 上运行

我在 Debian 11 服务器上运行了 nginx (1.21.6) 和 openssl 1.1.1n。尽管我遵循了许多教程并查看了此论坛中有关此主题的多个问题,但我无法使 TLS 1.3 正常工作。输出nginx -V

nginx version: nginx/1.21.6
built by gcc 10.2.1 20210110 (Debian 10.2.1-6)
built with OpenSSL 1.1.1k  25 Mar 2021 (running with OpenSSL 1.1.1n  15 Mar 2022)
TLS SNI support enable

我将 nginx 升级到主线版本,因为我无法在以前的版本中运行 TLS 1.3。这很奇怪……Openssl 肯定支持 TLS 1.3。我通过openssl s_client -tls1_3 -connect www.cloudflare.com:443它测试了它,效果很好。这是ssl.conf我在每个 nginx 服务器中包含的 nginx 文件(证书单独包含在服务器部分中):

ssl_session_timeout 1d;
ssl_session_cache shared:SSL:10m;  # about 40000 sessions
ssl_session_tickets off;

ssl_stapling on;
#ssl_trusted_certificate /pfad/bundle.ca.pem;
ssl_stapling_verify on;

ssl_dhparam /etc/nginx/dhparams.pem;

ssl_ecdh_curve X448:secp521r1:secp384r1;


ssl_protocols TLSv1.3 TLSv1.2;
ssl_ciphers TLS13-CHACHA20-POLY1305-SHA256:TLS13-AES-256-GCM-SHA384:TLS13-AES-128-GCM-SHA256:TLS-CHACHA20-POLY1305-SHA256:TLS-AES-256-GCM-SHA384:TLS-AES-128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384;
ssl_prefer_server_ciphers on;

# HSTS (ngx_http_headers_module is required) (63072000 seconds)
add_header Strict-Transport-Security "max-age=31536000;preload;includeSubDomains" always;

我的网站的 Qualys ssltest但是,并没有显示我在服务器上使用 TLS 1.3。此外,Chrome 浏览器显示它通过 TLS 1.2 连接。即使我TLSv1.2从我的中删除指令ssl.conf并仅保留TLSv1.3,它仍然通过 TLS 1.2 连接。

ssl_protocolsnginx 的任何其他配置文件中都没有其他指令。我通过检查了这一点nginx -T

我真的没有主意了.....有人能帮帮我吗?

编辑: 不知何故,nginx 似乎无法正确响应ssl_protocolsssl_ecdh_curve指令。例如,当我从配置中删除时ssl_ciphers(如 @drookie 在其评论中所建议的那样),尽管我设置了,但我的服务器似乎支持 TLS 1.0 和 TLS 1.1 ssl_protocols TLSv1.3 TLSv1.2;。同样,根据Qualys ssl测试secp256r1受支持,尽管我的配置中没有这条曲线ssl_ecdh_curve(也没有prime256v1)。在我看来,好像有什么东西覆盖了ssl.conf文件中的设置。我正在使用 acme.sh 获取证书。 只给出了grep -R 'ssl_protocol' /etc/*一行。我不知道是什么导致了干扰/覆盖......ssl.confssl_protocols TLSv1.3 TLSv1.2;

答案1

经过多次测试和大量阅读,我终于找到了解决方案。我必须在块中编写 SSL 配置http,而不是在 nginx 配置的块中编写。但是,只有当我将文件中的指令明确复制到我的块中server时,这才有效(否则输出ssl.confhttpnginx.confnginx -t

nginx: [emerg] invalid number of arguments in "include" directive in /etc/nginx/nginx.conf:33
nginx: configuration file /etc/nginx/nginx.conf test failed

因为某些原因)。

因此,我现在http的外观nginx.conf如下:

http {

  ...
 
    ssl_dhparam /etc/nginx/dhparams.pem;
    
    ssl_ecdh_curve X448:secp521r1:secp384r1;
    
    ssl_protocols TLSv1.3 TLSv1.2;
   ssl_ciphers 'TLS-CHACHA20-POLY1305-SHA256:TLS-AES-256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-RSA-AES256-GCM-SHA512:DHE-RSA-AES256-GCM-SHA512:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256';

   ...

    # Virtual Host Configs
    ##

    include /etc/nginx/conf.d/*.conf;
    include /etc/nginx/sites-enabled/*;
}

我不知道为什么这些 ssl 设置必须包含/粘贴在http块中而不是在每个server块中.....但它有效并且 TLS 1.3 已启用!

相关内容