
传输层安全并不是只要有了证书就可以保证安全的,如果协议版本和加密套件中包含了历史兼容性选项的话,那么HTTPS连接仍然可以被降级、解密以及拦截。
SSLv2、SSLv3、TLS 1.0 和 TLS 1.1 已经被 RFC 8996 正式废弃了,其中 SSLv3 存在 POODLE 漏洞可以读取加密数据块,而 TLS 1.0 存在 BEAST 类攻击可以逐块解密出明文。关闭这些协议就是防止降级中间人攻击的第一步。
生产环境中只允许使用TLS 1.2和TLS 1.3两种协议,其中TLS 1.3为主要选项:
- Nginx:
ssl_protocols TLSv1.2 TLSv1.3; - Apache:
SSLProtocol all -SSLv2 -SSLv3 -TLSv1 -TLSv1.1
加密套件要一起收拢起来,在TLS 1.2中只留了ECDHE密钥交换和AEAD认证加密:
- 保留:ECDHE + AES-GCM、ECDHE + ChaCha20-Poly1305
- 禁止使用:静态RSA密钥交换、CBC模式、RC4、DES、3DES、MD5、SHA-1、EXPORT和匿名套件
TLS 1.3 自动排除了静态 RSA 和 CBC 模式,并且强制使用前向保密(PFS),即便长时间后私钥被泄露,过去的通信数据也不能被还原出来。
配套加固项:
- 启用HSTS来防止协议降级为HTTP或者使用旧的TLS版本
- 完整的证书链和自动更新的机制
- 负载均衡和CDN的边缘节点使用相同的协议、工具集以及策略
- 遗留设备独立设置一个域名,不与主站共享弱协议。
总结:
安全加固就是缩小谈判的空间:用新的协议做基础,用强大的套件来保护,用前向保密防止被破解。只要有一个弱算法存在,整个加密链路就会出现问题。