设置 MinProtocol 和 CipherString 后,我是否应该在 openssl 上配置 Ciphersuites?

设置 MinProtocol 和 CipherString 后,我是否应该在 openssl 上配置 Ciphersuites?

当前 OpenSSL 版本

OpenSSL 1.1.1d  10 Sep 2019 (Library: OpenSSL 1.1.1g  21 Apr 2020)

当前openssl.cnf配置

在文件顶部

openssl_conf = default_conf

在文件底部

[default_conf]
ssl_conf = ssl_sect

[ssl_sect]
system_default = system_default_sect

[system_default_sect]
MinProtocol = TLSv1.2
CipherString = DEFAULT@SECLEVEL=1

Ciphersuites设定指令。

支持的密码列表与配置不同

但是,当我使用 请求启用的密码时openssl ciphers -s -v,我得到了如下密码:

DHE-RSA-AES256-SHA      SSLv3 Kx=DH       Au=RSA  Enc=AES(256)  Mac=SHA1
ECDHE-ECDSA-AES128-SHA  TLSv1 Kx=ECDH     Au=ECDSA Enc=AES(128)  Mac=SHA1
ECDHE-RSA-AES128-SHA    TLSv1 Kx=ECDH     Au=RSA  Enc=AES(128)  Mac=SHA1
DHE-RSA-AES128-SHA      SSLv3 Kx=DH       Au=RSA  Enc=AES(128)  Mac=SHA1

我应该定义一个Ciphersuites设置,还是 openssl ciphers -s -v某种程度上不可靠?

文档

-s仅列出支持的密码:与安全级别以及最低和最高协议版本一致的密码。

虽然 SecLevel 1 允许 SSLv3 和 TLSv1,但 MinProtocol 不允许。

资料来源:

答案1

大多数密码套件与多种协议兼容。

除了完全独立的 TLS 1.3 和已失效数十年且在 OpenSSL 1.1.0(2016 年)及以上版本中不再实现的 SSL 2 之外,大多数 SSL/TLS 密码套件都可以在多个协议版本中使用。按时间顺序排列,SSL 3 中定义的所有密码套件(奇怪的政府密码套件(Fortezza)除外)仍在 TLS 1.0 中使用,这些密码套件加上在 1.0 中定义的新密码套件(主要是 EC),但减去故意削弱的“出口”套件(2006 年已弃用)仍在 1.1 中使用,1.1 未定义任何新套件。1.2 保留了 1.1 中的大多数套件,减去在 2008 年之前就被认为失效的单 DES,加上许多新套件(使用 AEAD 和/或 SHA2)。

正如SSL_CIPHER_description 的手册页与密码相关的内容如下:

<协议版本>
密码套件支持的最低协议版本,例如 TLSv1.2。请注意,这并不总是与密码套件首次定义的协议版本相同,因为某些密码套件向后兼容早期的协议版本。

注意“最低”。DHE-RSA-AES256-SHA可在 SSL3 TLS1.0 TLS1.1 和 TLS1.2 中使用,因此其最低版本是 SSL3。

使用 1.2 版的旧套件不是首选或最佳实践,特别是因为使用 AEAD 的新套件(首先是 GCM 和 CCM,然后是 ChaCha/Poly)至少在没有 encrypt-then-mac(RFC7366)的情况下具有更好的安全属性,该套件直到 2014 年才发布并且由于 AEAD 已经存在而没有被广泛实施,但它是允许的并且受到 OpenSSL 的支持,并且命令的输出ciphers反映了这一点。

所以是的,如果你需要 1.2,你也可以将密码套件限制为 AEAD,而兼容性几乎不会降低(尽管有一些实现,例如 Java 7,支持 1.2 但仅适用于旧套件而不支持新 AEAD 套件)。

相关内容