我在我的服务器上使用 Nginx + Let's Encrypt 和 OpenSSL。我想使用 TLSv1.2 和 TLSv1.3。但我想使用非常具体的 SSL 密码。具体来说:
TLS_AES_256_GCM_SHA384
(TLSv1.3),TLS_CHACHA20_POLY1305_SHA256
(TLSv1.3),ECDHE-RSA-AES256-GCM-SHA384
(TLSv1.2),ECDHE-RSA-CHACHA20-POLY1305
(TLSv1.2),DHE-RSA-AES256-GCM-SHA384
(TLSv1.2),DHE-RSA-CHACHA20-POLY1305
(TLSv1.2),
但不是TLS_AES_128_GCM_SHA256
(TLSv1.3)。我在 Nginx 配置文件中进行了多次配置以禁用此密码,但没有奏效。其中一些是:
ssl_ciphers "TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES256-GCM-SHA384:DHE-RSA-CHACHA20-POLY1305";
- 添加双引号ssl_ciphers "!TLS_AES_128_GCM_SHA256:TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES256-GCM-SHA384:DHE-RSA-CHACHA20-POLY1305";
- 添加!
到该密码ssl_ciphers TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES256-GCM-SHA384:DHE-RSA-CHACHA20-POLY1305
- 不带双引号
那么我该如何实现这一点呢?谢谢,祝您有美好的一天。
答案1
Nginx 不支持像这样配置 TLS 1.3 密码套件,你也不应该这样做,因为RFC 8446, 9.1有强制实施的密码套件。
符合 TLS 要求的应用程序必须实现
TLS_AES_128_GCM_SHA256
[大气环流模型] 密码套件,并应实现TLS_AES_256_GCM_SHA384
[大气环流模型] 和TLS_CHACHA20_POLY1305_SHA256
[RFC8439] 密码套件(见 附录 B.4)。
如果你真的想搞乱这个,你必须禁用强制密码套件OpenSSL CONF 库配置文件 openssl.cnf
就像在例如重温 SSL-Labs 100 分完美成绩:
[system_default_sect] MinProtocol = TLSv1.2 CipherString = DEFAULT@SECLEVEL=2 Ciphersuites = TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256 Options = ServerPreference,PrioritizeChaCha ...
这将向您的操作系统声明使用的最低 TLS 版本是 TLS1.2,并且要使用的密码套件是指定的。请注意,我只指定了 TLS1.3 套件。如果您需要 TLS1.2 支持,请添加其中的“一些”。
答案2
从 nginx 1.19 开始,这是可能的:
ssl_conf_command Ciphersuites TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256;
现在您将能够获得 100% 的分数,但您将违反标准。因此,在查看了这一轮 100% 指标后,我建议禁用该功能。