首页/安全/加密与证书速查/版本降级与降级攻击防护
TLS 与 HTTPS60 条

版本降级与降级攻击防护

中间人可以篡改握手中的版本信息,诱导连接落在更弱的协议上;防护手段包括服务端只启用高版本、客户端在降级重试时声明意图(TLS_FALLBACK_SCSV),以及 TLS 1.3 内置的降级检测。

加密与证书速查安全更新于 2026-10-13

版本降级是怎么回事

降级攻击指中间人篡改握手中的版本与套件信息,诱导双方协商到更弱的旧协议(SSLv3、TLS 1.0 等历史问题多由此引发)。防护要两侧同时成立:服务端只启用高版本、拒绝旧版本;客户端在主动降级重试时携带 TLS_FALLBACK_SCSV 套件值,服务端识别后直接拒绝。TLS 1.3 又加了一层:ServerHello 随机数尾部使用固定字节,客户端看到该特征即判定遭遇降级并中断连接。

基本信息

攻击思路剥离高版本支持信息,让连接落在更弱的协议上
服务端防护配置只启用 TLS 1.2/1.3,禁用 1.0/1.1/SSLv3
客户端防护降级重试时携带 TLS_FALLBACK_SCSV,服务端据此拒绝
TLS 1.3 兜底ServerHello 随机数含固定降级标记,客户端自动识别
检查点负载均衡、反向代理、后端服务、网关每一层都要查

典型使用场景

  • 安全基线核查:确认对外站点不接受 TLS 1.0/1.1 与 SSLv3。
  • 等保与合规测评:协议版本与加密套件是常见检查项。
  • 链路排查:用 openssl 强制低版本握手,验证被正确拒绝而不是静默降级。
  • 网关改造:升级反向代理后确认后端没有继续接受旧版本形成绕过路径。
  • 客户端升级评估:老客户端库不支持降级标记时,需要先升级依赖。

验证低版本被拒绝

验证低版本被拒绝
openssl s_client -connect example.com:443 -tls1 </dev/null 2>&1 | grep -E 'Protocol|alert|error' | head -3
openssl s_client -connect example.com:443 -tls1_1 </dev/null 2>&1 | grep -E 'Protocol|alert|error' | head -3
# 用 nmap 快速看服务端开放的协议版本
# nmap --script ssl-enum-ciphers -p 443 example.com

检查项与判定

检查项正常表现异常信号
强制 TLS 1.0 握手服务端直接拒绝并回协议告警握手成功,说明旧版本仍开放
套件列表不含 RC4、3DES、CBC 类弱套件出现历史弱套件
降级标记服务端对 FALLBACK_SCSV 拒绝降级重试被正常接受
分层一致性前端与后端版本策略一致前端禁旧版本、后端仍接受
降级防护无法靠单侧解决:服务端拒绝旧版本解决「协商到低版本」,客户端声明降级意图解决「被诱导重试」。两者都配置才算完整。

易错点

  • 只在负载均衡层禁用旧版本:后端仍接受 TLS 1.0,内网直连或绕过路径依旧可降级。
  • 客户端库过旧不支持降级标记:两侧防护缺一半,需先升级依赖再评估。
  • 用自建脚本判断版本:脚本自身只试一个版本,容易得出「已禁用」的错误结论,应多版本交叉验证。
  • 升级协议版本后未回归业务:老旧嵌入式客户端可能无法连接,需提前清点接入方。

数据来源与参考

  • RFC 7507(TLS_FALLBACK_SCSV)
  • RFC 8446 §4.1.3(1.3 降级防护)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌