以下(xià)一(yī)些是密碼套件可以使用的算法的示例。
功能 | 算法 |
---|---|
密鑰交換 | RSA,Diffie-Hellman,ECDH,SRP,PSK |
認證 | RSA,DSA,ECDSA |
批量密碼 | RC4,3DES,AES |
消息驗證 | HMAC-SHA256,HMAC-SHA1,HMAC-MD5 |
許多常見的TLS配置錯誤在于密碼套件選擇不當。舊(jiù)的或過時的密碼套件,尤其是那些遭受各種攻擊的密碼套件,可能允許攻擊者在傳輸過程中(zhōng)成功攔截或篡改秘密數據。以下(xià)是要對TLS / SSL實施進行的推薦配置列表。
禁用SSL 2.0和SSL 3.0
SSL 2.0是1995年第一(yī)個公開(kāi)發布的SSL版本。此版本的SSL包含許多導緻SSL 3.0引入的安全問題。SSL 3.0于1996年發布,完全重新設計了協議。
由于SSL2.0中(zhōng)出現的問題,協議使用起來不安全,應該完全禁用。
由于POODLE(Padding Oracle On Downgraded Legacy.Encryption)漏洞,SSL 3.0使用起來也不安全,應該被禁用以避免攻擊者檢索到安全連接的明文。此外(wài),Elliptic Curve Cryptography不能與SSL3.0一(yī)起使用。
Internet Explorer 6是唯一(yī)仍然使用SSL3.0的浏覽器。因此,除非仍然需要支持舊(jiù)版Internet Explorer 6浏覽器,否則應禁用SSL 3.0,如稍後所述。
禁用TLS 1.0和1.1
除非需要支持舊(jiù)版浏覽器,否則還應禁用TLS 1.0和1.1。PCI DSS規定自2018年6月30日起不再使用TLS 1.0,并強烈建議禁用TLS 1.1; 因爲這些協議可能會受到FREAK,POODLE,BEAST和CRIME等漏洞的影響。
除非需要支持舊(jiù)版浏覽器,否則還應禁用TLS 1.0和1.1。PCI DSS規定自2018年6月30日起不再使用TLS 1.0,并強烈建議禁用TLS。如果仍然支持TLS 1.0是業務需求,強烈建議禁用TLS 1.0壓縮以避免CRIME攻擊。
此外(wài),禁用弱密碼也很重要。應禁用DES和RC4等弱密碼。DES可以在幾個小(xiǎo)時内被破壞,而RC4被發現比以前想象的要弱。雖然可能已經建議過去(qù)使用RC4來緩解BEAST攻擊,但鑒于對RC4密碼的最新攻擊,微軟再次發布了一(yī)個建議。還值得注意的是,PCI DSS也禁止使用RC4批量密碼。
禁用TLS 1.0和1.1可能會影響以下(xià)用戶代理(及其舊(jiù)版本)(不同操作系統上的特定用戶代理版本可能會有所不同)。
- Android 4.3
- Chrome 29
- Firefox 26
- Internet Explorer 10
- Java 6u45,7u25
- OpenSSL 0.9.8y
- Safari 6.0
根據所讨論的Web服務器(例如Apache HTTP Server,Nginx ...),啓用/禁用TLS協議和支持的TLS密碼套件的語法會略有不同。
Nginx 配置
# Enable TLSv1.2, disable SSLv3.0, TLSv1.0 and TLSv1.1 ssl_protocols TLSv1.2; # Enable modern TLS cipher suites ssl_ciphers 'ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256'; # The order of cipher suites matters ssl_prefer_server_ciphers on;
Apache HTTP Server 配置
# Enable TLSv1.2, disable SSLv3.0, TLSv1.0 and TLSv1.1 SSLProtocol all -SSLv3 -TLSv1 -TLSv1.1 # Enable modern TLS cipher suites SSLCipherSuite ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256 # The order of cipher suites matters SSLHonorCipherOrder on # Disable TLS compression SSLCompression off # Necessary for Perfect Forward Secrecy (PFS) SSLSessionTickets off
下(xià)表将上面的密碼套件字符串分(fēn)解爲優先順序(最佳密鑰交換算法/最強加密優先)。
|
密鑰交換算法 | 認證算法 | 批量加密算法 | Mac算法 |
---|---|---|---|---|
#1 | 橢圓曲線Diffie-Hellman(ECDH) | 橢圓曲線數字簽名算法(ECDSA) | Galois計數器模式下(xià)的AES 256(AES256-GCM) | SHA384 |
#2 | 橢圓曲線Diffie-Hellman(ECDH) | RSA | Galois計數器模式下(xià)的AES 256(AES256-GCM) | SHA384 |
#3 | 橢圓曲線Diffie-Hellman(ECDH) | 橢圓曲線數字簽名算法(ECDSA) | ChaCha20(CHACHA20) | POLY1305 |
#4 | 橢圓曲線Diffie-Hellman(ECDH) | RSA | ChaCha20(CHACHA20) | POLY1305 |
#5 | 橢圓曲線Diffie-Hellman(ECDH) | 橢圓曲線數字簽名算法(ECDSA) | Galois計數器模式下(xià)的AES 128(AES128-GCM) | SHA256 |
#6 | 橢圓曲線Diffie-Hellman(ECDH) | RSA | Galois計數器模式下(xià)的AES 128(AES128-GCM) | SHA256 |
#7 | 橢圓曲線Diffie-Hellman(ECDH) | 橢圓曲線數字簽名算法(ECDSA) | AES 256(AES256) | SHA384 |
#8 | 橢圓曲線Diffie-Hellman(ECDH) | RSA | AES 256(AES256) | SHA384 |
#9 | 橢圓曲線Diffie-Hellman(ECDH) | 橢圓曲線數字簽名算法(ECDSA) | AES 128(AES128) | SHA256 |
#10 | 橢圓曲線Diffie-Hellman(ECDH) | RSA | AES 128(AES128) | SHA256 |
該字符串在現代浏覽器和TLS / SSL客戶端中(zhōng)提供最強的加密(Galois計數器模式中(zhōng)的AES僅在TLS 1.2中(zhōng)受支持)。此外(wài),如果服務器和TLS / SSL客戶端都支持它,則字符串還提供Perfect Forward Secrecy(SSLSessionTicket
必須設置s才能off
在Apache HTTP Server中(zhōng)使用)。