防范降级攻击的关键是强制启用tls 1.2+、禁用旧协议(tls 1.0/1.1)及弱算法(rc4、3des等),配置服务器优先的aead套件(如ecdhe-rsa-aes128-gcm-sha256),启用ssl_prefer_server_ciphers与hsts,并通过ssl labs等工具验证协商结果。

防范降级攻击的关键不是“加更多套件”,而是通过精准控制协议版本与加密套件组合,切断攻击者诱使客户端回退到弱协议(如 TLS 1.0/1.1)或弱算法(如 RC4、3DES)的路径。核心在于:强制启用 TLS 1.2+,禁用所有已知不安全组件,并确保服务器优先权生效。
明确禁用旧协议与风险算法
降级攻击常依赖客户端与服务端协商时的兼容性妥协。必须从根源清除协商空间:
- 在 Nginx 或 Apache 中,ssl_protocols(Nginx)或 SSLProtocol(Apache)只保留
TLSv1.2 TLSv1.3,彻底移除TLSv1和TLSv1.1 - 同步禁用所有不支持前向保密(PFS)和已证实脆弱的算法:RC4、EXPORT、MD5、NULL、ANONYMOUS、DES、3DES、SHA1 套件
- Windows 系统需通过注册表禁用 SChannel 中的 TLS 1.0/1.1(路径:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols),并重启生效
配置强优先级的现代加密套件
套件顺序决定协商结果——服务器按列表从前到后匹配,第一个双方都支持的即被采用。应把最安全、最主流的放在最前:
- 首选支持 AEAD 加密(AES-GCM、ChaCha20-Poly1305)且基于 ECDHE 密钥交换的套件,例如:
ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-GCM-SHA256 - TLS 1.3 套件无需显式写入
ssl_ciphers(Nginx 1.13+ 自动启用),但需确保 OpenSSL 版本 ≥ 1.1.1 且启用ssl_protocols TLSv1.2 TLSv1.3 - 避免混用 CBC 模式套件(如 AES-CBC-SHA),除非确需兼容 Windows 7 + IE11 等极旧环境;若必须启用,仅限 TLS 1.2 且禁用静态 RSA
启用服务器优先权与 HSTS 强化防护
仅配置强套件不够,还需确保其真正生效:
- 设置 ssl_prefer_server_ciphers on(Nginx)或 SSLHonorCipherOrder on(Apache),防止客户端主导协商结果
- 添加 HTTP 响应头 Strict-Transport-Security: max-age=31536000; includeSubDomains; preload,让浏览器强制走 HTTPS 并拒绝任何降级尝试
- 配合 WAF 设置最低 TLS 版本为 TLS 1.2,自动拦截 TLS 1.0/1.1 请求,形成网络层兜底
验证与持续监控
配置完成后必须验证是否真实生效,而非仅语法正确:
- 使用
openssl s_client -connect yourdomain.com:443 -tls1_2和-tls1_3分别测试连接能力 - 访问 SSL Labs Test,重点查看 “Handshake Simulation” 是否对主流客户端(Chrome、Firefox、iOS、Android)均协商 TLS 1.2+ 与 GCM/ChaCha20 套件
- 检查日志中是否有 Event ID 36872(Windows)或 OpenSSL 错误码 0x80090331,这类提示往往意味着某处仍启用了被禁协议











