# DROWN是什么？定义、例子与常见误区

> DROWN 是 2016 年公布的跨协议攻击（CVE-2016-0800），借助任何支持 SSLv2 的服务器，解密使用同一 RSA 密钥的 TLS 会话。

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

DROWN 由一个学术研究团队于 2016 年 3 月公布。SSLv2 早已过时多年，但当时仍有大量服务器接受它，而它的出口级密码和握手缺陷使其成为针对 [RSA](https://ssl.sh/zh/glossary/rsa/) 的 Bleichenbacher 式填充预言机。攻击者先记录使用 RSA 密钥交换的 TLS 连接，再向任何持有同一 RSA 密钥的服务器发送大量精心构造的 SSLv2 握手，利用响应解密之前记录的 TLS 会话。TLS 服务器本身不必支持 SSLv2，只要它的密钥或证书与某台支持 SSLv2 的服务器共用即可。

## 为什么重要
DROWN 说明一个端口或一台主机上的弱协议，可以连累其他地方的强 TLS：如果邮件服务器开着 SSLv2，与它共用证书和私钥的网站即使从未提供 SSLv2 也会受影响。漏洞公开时，相当大比例的 HTTPS 服务器存在风险，主要原因就是这类密钥共用。缓解办法：在所有地方禁用 SSLv2（OpenSSL 从 1.1.0 起已移除 SSLv2 支持）；不要在配置不同的服务之间共用[私钥](https://ssl.sh/zh/glossary/private-key/)；优先使用 [ECDHE](https://ssl.sh/zh/glossary/ecdhe/) 密钥交换，因为 DROWN 只能解密使用 RSA 密钥交换的会话。很多企业把一张通配符证书同时部署在网站、邮件、VPN 等多处，排查时尤其要把这些服务都算进去。

## 例子
检查所有使用同一证书的主机和端口，而不只是网站：

```bash
nmap --script sslv2 -p 443,25,465,587,993,995 mail.example.com
```

## 常见误区
- **我的网站没开 SSLv2，就不受 DROWN 影响。** 任何使用同一 RSA 密钥的其他服务器，例如老旧的邮件或 VPN 服务器，都足以构成威胁。
- **TLS 1.2 会话不受影响。** 使用 RSA 密钥交换的 TLS 1.2 会话正是攻击目标；具备前向保密的 ECDHE 会话无法用这种方式解密。
- **换一张证书就解决了。** 只有新私钥不再与开启 SSLv2 的主机共用时才有效，根本办法是禁用 SSLv2。

## 相关术语

- [RSA](https://ssl.sh/zh/glossary/rsa/): RSA 是 1977 年提出的公钥算法，TLS 用它对证书和握手进行签名，在 TLS 1.3 之前还用它传输会话密钥。
- [私钥](https://ssl.sh/zh/glossary/private-key/): 私钥是非对称密钥对中保密的那一半，TLS 服务器用它证明自己拥有证书里的那把公钥。
- [密钥交换](https://ssl.sh/zh/glossary/key-exchange/): 密钥交换是 TLS 握手中客户端与服务器建立共享秘密的步骤，保护连接的对称密钥都由这个共享秘密派生而来。
- [ECDHE](https://ssl.sh/zh/glossary/ecdhe/): ECDHE 是椭圆曲线上的临时 Diffie-Hellman 密钥交换，TLS 双方每次握手都生成新的椭圆曲线密钥对，并据此协商出共享密钥。
- [前向保密](https://ssl.sh/zh/glossary/forward-secrecy/): 前向保密是密钥交换的一种安全属性：即使服务器的长期私钥日后泄露，过去连接的会话密钥也不会因此暴露。
- [降级攻击](https://ssl.sh/zh/glossary/downgrade-attack/): 降级攻击是指攻击者迫使客户端和服务器协商出比双方实际支持的更旧的协议版本或更弱的算法，从而利用其中的弱点。
- [ROBOT](https://ssl.sh/zh/glossary/robot/): ROBOT 是 2017 年公布的研究，发现大量 TLS 实现仍存在 1998 年的 Bleichenbacher RSA 填充预言机，攻击者可借此解密 RSA 密钥交换。
