当前 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 套件)。