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