設定 MinProtocol 和 CipherString 後是否應該在 openssl 上配置 Ciphersuite?

設定 MinProtocol 和 CipherString 後是否應該在 openssl 上配置 Ciphersuite?

目前 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 ),但減去故意削弱的 ' 1.1 中仍然使用“export”套件(該套件在 2006 年已被棄用),該套件沒有定義任何新套件。 1.2 保留了 1.1 的大部分套件,減去 2008 年之前就被認為已損壞的單 DES,以及許多新套件(使用 AEAD 和/或 SHA2)。

如中所述SSL_CIPHER_description 的手冊頁這是與密碼相關的:

<protocol version>
密碼套件支援的最低協定版本,例如 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 套件)。

相關內容