Ssl

設置 MinProtocol 和 CipherString 後,是否應該在 openssl 上配置 Ciphersuites?

  • April 16, 2021

目前的 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 不允許。

資料來源:

大多數密碼套件與多個協議兼容。

除了完全獨立的 TLS 1.3 和已被破解數十年且由 OpenSSL 1.1.0 (2016) 起不再實現的 SSL 2 之外,大多數 SSL/TLS 密碼套件可以在多個協議版本中使用。按照時間順序,SSL 3 中定義的所有密碼套件,除了奇怪的政府密碼套件 (Fortezza) 仍在 TLS 1.0 中使用,以及那些加上在/for 1.0 中定義的新密碼套件(主要是 EC),但減去故意削弱的 ’ export’ 套件(在 2006 年已被棄用)仍在 1.1 中使用,它沒有定義任何新套件。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 套件)。

引用自:https://serverfault.com/questions/1060506