以正确的方式将密码套件添加到 nginx 配置

Has*_*aig 5 ssl nginx

我需要添加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
Run Code Online (Sandbox Code Playgroud)

我的问题很简单:如何在 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';
Run Code Online (Sandbox Code Playgroud)

Lud*_*uty 9

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;
Run Code Online (Sandbox Code Playgroud)

这是 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:让客户端在服务器提供的密码中为其硬件配置选择性能最高的密码套件。比照。为什么“ssl_prefer_server_ciphers 关闭”?
  • 如果您只想要 TLS 1.3,请阅读Nginx with only TLS1.3 cipher suites,因为有一个陷阱。您还可以使用答案中的工具来检查提供了哪些密码,以及最新版本的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
Run Code Online (Sandbox Code Playgroud)


小智 6

请注意,TLSv1.1 和 TLSv1.2 参数(1.1.13、1.0.12)仅在使用 OpenSSL 1.0.1 或更高版本时才有效。仅当使用使用 TLSv1.3 支持构建的 OpenSSL 1.1.1 时,TLSv1.3 参数 (1.13.0) 才有效

ssl_protocols               TLSv1.2 TLSv1.3;
ssl_ciphers                 ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256;
ssl_prefer_server_ciphers   on;
Run Code Online (Sandbox Code Playgroud)

如果您的配置测试失败,则说明您的 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
Run Code Online (Sandbox Code Playgroud)

选择兼容的nginx版本,如果没有报错就说明一切正常。