如何从 OpenSSL TLSv1.3 列表中禁用一个密码?

如何从 OpenSSL TLSv1.3 列表中禁用一个密码?

我在我的服务器上使用 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% 指标后,我建议禁用该功能。

相关内容