我需要ssl_ciphers
在我的 nginx 配置中添加。根据https://wiki.mozilla.org/Security/Server_Side_TLS以下是推荐的密码套件(具有中等兼容性):
Cipher suites (TLS 1.3): TLS_AES_128_GCM_SHA256:TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256
Cipher suites (TLS 1.2): 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
我的问题很简单:如何在我的 nginx 配置中添加 TLS 1.3 和 TLS 1.2 套件?
像这样?
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
ssl_ciphers 'TLS_AES_128_GCM_SHA256:TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256';
ssl_ciphers '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';
答案1
请注意,TLSv1.1 和 TLSv1.2 参数(1.1.13、1.0.12)仅在使用 OpenSSL 1.0.1 或更高版本时才有效。TLSv1.3 参数(1.13.0)仅在使用支持 TLSv1.3 的 OpenSSL 1.1.1 时才有效
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256;
ssl_prefer_server_ciphers on;
如果你的配置测试失败,则说明你的 nginx 版本不支持 tlsv1.3
$ nginx -t
nginx: [emerg] invalid value "TLSv1.3" in /etc/nginx/conf.d/<file>:34
nginx: configuration file /etc/nginx/nginx.conf test failed
选择兼容的nginx版本,如果没有错误则一切正常。
答案2
这Mozilla 工具是获得所需内容的好方法。问题(以及相关答案)和提供的链接也很有趣,可以了解配置指令的工作原理。
配置如下:
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers 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 off;
这是 Mozilla 中级配置:
ssl_protocols TLSv1.2 TLSv1.3
启用版本 1.2 和 1.3。请注意,版本 1.3 的所有密码都会自动启用,我们无需执行任何操作,而且该指令ssl_ciphers
仅提供版本 1.2 的密码。ssl_ciphers
:TLS 1.2 的所有密码。ssl_prefer_server_ciphers off
:让客户端在服务器提供的密码中为其硬件配置选择性能最佳的密码套件。Cfr。为什么要“ssl_prefer_server_ciphers off”?- 如果你只需要 TLS 1.3,请阅读仅使用 TLS1.3 密码套件的 Nginx,因为有一个陷阱。您还可以使用答案中的工具来检查提供了哪些密码,并使用最新版本
openssl
(例如OpenSSL 1.1.1l 24 Aug 2021
)。
$ ./test_ciphers.sh <put IP here>:443
Using OpenSSL 1.1.1l 24 Aug 2021.
Using tls1_1
Testing ECDHE-ECDSA-AES256-SHA ... NO (tlsv1 alert protocol version)
...
Using tls1_2
Testing ECDHE-ECDSA-AES256-GCM-SHA384 ... NO (sslv3 alert handshake failure)
...
Testing ECDHE-RSA-AES256-GCM-SHA384 ... YES
Testing ECDHE-RSA-CHACHA20-POLY1305 ... YES
Testing ECDHE-RSA-AES128-GCM-SHA256 ... YES
Using tls1_3
Testing TLS_AES_256_GCM_SHA384 ... YES
Testing TLS_CHACHA20_POLY1305_SHA256 ... YES
Testing TLS_AES_128_GCM_SHA256 ... YES