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

> Heartbleed 是 2014 年公开的 OpenSSL 漏洞（CVE-2014-0160），出在 TLS 心跳扩展上，任何人都能借此读取服务器内存片段，甚至包括私钥。

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

Heartbleed 是 OpenSSL 在实现 TLS/DTLS 心跳扩展（RFC 6520）时漏掉的一处边界检查，影响 OpenSSL 1.0.1 至 1.0.1f，2014 年 4 月发布的 1.0.1g 修复了它。心跳请求包含一段载荷和一个声明的长度；有漏洞的版本不核对载荷实际有多长，而是按声明的长度回传数据，最多约 64 KB。每次请求都会泄露一块不同的进程内存，无需认证，也不会在常规日志里留下痕迹。它由 Google 安全团队的 Neel Mehta 和 Codenomicon 的工程师分别独立发现。

## 为什么重要
泄露的内存里可能有会话 Cookie、用户密码，某些情况下还有服务器[私钥](https://ssl.sh/zh/glossary/private-key/)；漏洞公开后不久，就有研究者演示了从测试服务器中提取私钥。由于利用过程不留记录，运维者只能假定已被入侵。所以正确的处置远不止升级 [OpenSSL](https://ssl.sh/zh/glossary/openssl/)：重新生成私钥，申请新证书并[吊销](https://ssl.sh/zh/glossary/revocation/)旧证书，作废会话和 ticket 密钥，并提醒用户修改密码。Heartbleed 也让人们意识到，互联网大量依赖着资金匮乏的开源项目，Linux 基金会随后发起了核心基础设施计划（Core Infrastructure Initiative）等资助行动。

## 例子
```bash
openssl version
# 1.0.1 至 1.0.1f：受影响
# 1.0.1g 及之后，以及 0.9.8、1.0.0 分支：不受影响

nmap -p 443 --script ssl-heartbleed example.com
```

## 常见误区
- **Heartbleed 是 TLS 协议本身的缺陷。** 它是 OpenSSL 的实现错误，自有代码的其他 TLS 库并不受影响。
- **升级 OpenSSL 就处理完了。** 补丁无法收回已经泄露的数据，可能泄露的东西，尤其是私钥，必须全部更换。
- **今天它依然是常见风险。** 现行系统多年前就不再带有漏洞版本的 OpenSSL，剩下的风险在于从未打补丁的老旧设备和嵌入式系统。

## 相关术语

- [OpenSSL](https://ssl.sh/zh/glossary/openssl/): OpenSSL 是开源密码学工具包，由 TLS 协议库 libssl、通用密码库 libcrypto 和 openssl 命令行工具组成。
- [私钥](https://ssl.sh/zh/glossary/private-key/): 私钥是非对称密钥对中保密的那一半，TLS 服务器用它证明自己拥有证书里的那把公钥。
- [证书吊销](https://ssl.sh/zh/glossary/revocation/): 证书吊销是 CA 在证书到期前宣布其作废的操作，通过 CRL 或 OCSP 对外公布，使客户端不再信任这张证书。
- [密钥轮换](https://ssl.sh/zh/glossary/key-rotation/): 密钥轮换是按计划或在安全事件后，用新生成的密钥替换旧密钥，以限制密钥泄露造成损失的做法。
- [证书续期](https://ssl.sh/zh/glossary/certificate-renewal/): 证书续期是在证书到期前申请一张新证书来替换它，最好全自动完成并同时更换密钥对。
- [Session Ticket](https://ssl.sh/zh/glossary/session-ticket/): Session Ticket 是服务器交给客户端保管的加密会话状态，客户端下次连接时出示它即可恢复会话，服务器无需保存任何状态。
