# 降级攻击（Downgrade Attack）是什么？

> 降级攻击是指攻击者迫使客户端和服务器协商出比双方实际支持的更旧的协议版本或更弱的算法，从而利用其中的弱点。

Source: https://ssl.sh/zh/glossary/downgrade-attack/
Last updated: 2026-11-10

降级攻击中，中间人篡改协商过程，让双方退而求其次：用 SSL 3.0 而不是 TLS 1.2，用出口级（export-grade）弱密钥而不是强密钥，甚至干脆不用 TLS。著名的例子有利用浏览器回退到 SSL 3.0 的 [POODLE](https://ssl.sh/zh/glossary/poodle/)，以及强迫使用出口级 RSA、DH 密钥的 [FREAK](https://ssl.sh/zh/glossary/freak/) 和 [Logjam](https://ssl.sh/zh/glossary/logjam/)。[SSL 剥离](https://ssl.sh/zh/glossary/ssl-stripping/)和 STARTTLS 剥离则是从加密连接降级到明文连接。

## 为什么重要
为了兼容而保留旧协议，安全与否取决于能否防止被“逼”到旧协议上。现在已有多层防护：握手在 Finished 消息中对整个过程做认证，只要协商出的算法够强，篡改就会被发现；TLS_FALLBACK_SCSV（RFC 7507）阻止了攻击者利用浏览器“失败后用旧版本重试”的行为；TLS 1.3 服务器在协商 TLS 1.2 及以下版本时，会在 ServerHello.random 末尾写入固定标记，支持 TLS 1.3 的客户端据此识别被强制回退。最可靠的办法仍然是关掉用不到的东西：SSL 3.0（RFC 7568）、TLS 1.0 和 1.1（RFC 8996），以及出口级等弱密码套件。漏洞扫描和渗透测试报告中常见的“支持不安全的 TLS 版本”问题，修复思路也是如此。

## 例子
```bash
# 加固后的服务器会拒绝（新版 OpenSSL 本地也可能直接拒绝 TLS 1.1）
openssl s_client -connect example.com:443 -servername example.com -tls1_1 </dev/null

# 列出服务器提供的所有协议版本和密码套件
nmap --script ssl-enum-ciphers -p 443 example.com
```

## 常见误区
- **客户端总会选最高版本，保留旧版本无害。** 这只在降级防护有效时成立，而 DROWN 这类跨协议攻击根本不需要客户端降级。
- **支持 TLS 1.3 就能杜绝降级。** 回退检测标记只对同样实现了 TLS 1.3 的客户端有用。
- **降级只涉及协议版本。** 密码套件、密钥长度，甚至“加密还是明文”都可能被降级。

## 相关术语

- [POODLE](https://ssl.sh/zh/glossary/poodle/): POODLE 是 2014 年公布的攻击（CVE-2014-3566），利用 SSL 3.0 不校验 CBC 填充的缺陷，从加密连接中逐字节还原 Cookie 等秘密。
- [FREAK](https://ssl.sh/zh/glossary/freak/): FREAK 是 2015 年公布的攻击，中间人诱使有漏洞的 TLS 客户端接受可被分解的 512 位出口级 RSA 密钥，从而解密和篡改流量。
- [Logjam](https://ssl.sh/zh/glossary/logjam/): Logjam 是 2015 年公布的攻击（CVE-2015-4000），可把 TLS 降级到 512 位出口级 Diffie-Hellman，并威胁使用过小或被大量共用 DH 参数的服务器。
- [DROWN](https://ssl.sh/zh/glossary/drown/): DROWN 是 2016 年公布的跨协议攻击（CVE-2016-0800），借助任何支持 SSLv2 的服务器，解密使用同一 RSA 密钥的 TLS 会话。
- [SSL 剥离](https://ssl.sh/zh/glossary/ssl-stripping/): SSL 剥离是一种中间人攻击，攻击者截获本应把用户引向 HTTPS 的跳转或链接，让用户一直停留在明文 HTTP 上。
- [TLS 1.3](https://ssl.sh/zh/glossary/tls-1-3/): TLS 1.3 是当前最新的传输层安全协议版本（2018 年的 RFC 8446，现行规范为 RFC 9846），完整握手只需一个往返，且只保留 AEAD 加密算法。
- [中间人攻击](https://ssl.sh/zh/glossary/man-in-the-middle/): 中间人攻击是指攻击者暗中插入通信双方之间，转发并可能篡改流量，而双方都以为自己在直接和对方通信。
