版本降级是怎么回事
降级攻击指中间人篡改握手中的版本与套件信息,诱导双方协商到更弱的旧协议(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 拒绝 | 降级重试被正常接受 |
| 分层一致性 | 前端与后端版本策略一致 | 前端禁旧版本、后端仍接受 |
降级防护无法靠单侧解决:服务端拒绝旧版本解决「协商到低版本」,客户端声明降级意图解决「被诱导重试」。两者都配置才算完整。