以下一些是密码套件可以使用的算法的示例。
功能 | 算法 |
---|---|
密钥交换 | RSA,Diffie-Hellman,ECDH,SRP,PSK |
认证 | RSA,DSA,ECDSA |
批量密码 | RC4,3DES,AES |
消息验证 | HMAC-SHA256,HMAC-SHA1,HMAC-MD5 |
许多常见的TLS配置错误在于密码套件选择不当。旧的或过时的密码套件,尤其是那些遭受各种攻击的密码套件,可能允许攻击者在传输过程中成功拦截或篡改秘密数据。以下是要对TLS / SSL实施进行的推荐配置列表。
禁用SSL 2.0和SSL 3.0
SSL 2.0是1995年第一个公开发布的SSL版本。此版本的SSL包含许多导致SSL 3.0引入的安全问题。SSL 3.0于1996年发布,完全重新设计了协议。
由于SSL2.0中出现的问题,协议使用起来不安全,应该完全禁用。
由于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规定自2018年6月30日起不再使用TLS 1.0,并强烈建议禁用TLS 1.1; 因为这些协议可能会受到FREAK,POODLE,BEAST和CRIME等漏洞的影响。
除非需要支持旧版浏览器,否则还应禁用TLS 1.0和1.1。PCI DSS规定自2018年6月30日起不再使用TLS 1.0,并强烈建议禁用TLS。如果仍然支持TLS 1.0是业务需求,强烈建议禁用TLS 1.0压缩以避免CRIME攻击。
此外,禁用弱密码也很重要。应禁用DES和RC4等弱密码。DES可以在几个小时内被破坏,而RC4被发现比以前想象的要弱。虽然可能已经建议过去使用RC4来缓解BEAST攻击,但鉴于对RC4密码的最新攻击,微软再次发布了一个建议。还值得注意的是,PCI DSS也禁止使用RC4批量密码。
禁用TLS 1.0和1.1可能会影响以下用户代理(及其旧版本)(不同操作系统上的特定用户代理版本可能会有所不同)。
- 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
下表将上面的密码套件字符串分解为优先顺序(最佳密钥交换算法/最强加密优先)。
|
密钥交换算法 | 认证算法 | 批量加密算法 | Mac算法 |
---|---|---|---|---|
#1 | 椭圆曲线Diffie-Hellman(ECDH) | 椭圆曲线数字签名算法(ECDSA) | Galois计数器模式下的AES 256(AES256-GCM) | SHA384 |
#2 | 椭圆曲线Diffie-Hellman(ECDH) | RSA | Galois计数器模式下的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计数器模式下的AES 128(AES128-GCM) | SHA256 |
#6 | 椭圆曲线Diffie-Hellman(ECDH) | RSA | Galois计数器模式下的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客户端中提供最强的加密(Galois计数器模式中的AES仅在TLS 1.2中受支持)。此外,如果服务器和TLS / SSL客户端都支持它,则字符串还提供Perfect Forward Secrecy(SSLSessionTicket
必须设置s才能off
在Apache HTTP Server中使用)。