# 中间人攻击是什么？定义、例子与常见误区

> 中间人攻击是指攻击者暗中插入通信双方之间，转发并可能篡改流量，而双方都以为自己在直接和对方通信。

Source: https://ssl.sh/zh/glossary/man-in-the-middle/
Last updated: 2026-11-10

中间人攻击（MITM）中，攻击者设法进入通信路径，例如搭建伪造的 Wi-Fi 热点、在局域网内做 ARP 欺骗、DNS 欺骗或 BGP 路由劫持，然后在客户端和服务器之间转发流量。对未加密的协议，这意味着可以任意读取和修改。TLS 的设计目标正是抵御它：服务器必须证明自己持有证书对应的私钥，证书要覆盖所请求的域名并链到客户端信任的 CA，握手过程本身也经过认证，任何篡改都会被发现。

## 为什么重要
因此针对 TLS 的实际中间人攻击，打的都是这套模型的边缘：用户无视证书警告点了“继续访问”；客户端跳过了校验（`curl -k`、`verify=False`）；在 TLS 开始前做 [SSL 剥离](https://ssl.sh/zh/glossary/ssl-stripping/)；用[降级攻击](https://ssl.sh/zh/glossary/downgrade-attack/)逼出弱协议；或者拿到一张被错误签发的证书。2011 年荷兰 CA DigiNotar 被入侵、签发了伪造的 google.com 证书，随后被各浏览器移除信任，是最后一种情况的典型案例。[HSTS](https://ssl.sh/zh/glossary/hsts/)、[证书透明度](https://ssl.sh/zh/glossary/certificate-transparency/)和 CAA 记录在很大程度上就是为堵住这些缺口而设计的。在企业安全评估中，公共 Wi-Fi 和办公网的中间人风险通常是必查项。

## 例子
最常见的“自找的”中间人风险，是关闭了证书校验：

```bash
curl -k https://api.example.com/                         # 接受任何证书，应避免
curl --cacert internal-ca.pem https://api.example.com/   # 改为显式信任指定 CA
```

## 常见误区
- **用了 HTTPS 就不可能被中间人。** 前提是客户端真的校验证书，而且用户没有无视警告。
- **攻击者必须在物理上离你很近。** DNS 欺骗和路由劫持可以远程实施，被攻陷的路由器或代理则长期待在路径上。
- **内部接口跳过校验没关系。** 跳过校验恰恰去掉了防中间人的那层保护，应改为显式信任内部 CA。

## 相关术语

- [SSL 剥离](https://ssl.sh/zh/glossary/ssl-stripping/): SSL 剥离是一种中间人攻击，攻击者截获本应把用户引向 HTTPS 的跳转或链接，让用户一直停留在明文 HTTP 上。
- [SSL 解密检测](https://ssl.sh/zh/glossary/ssl-inspection/): SSL 解密检测是企业安全网关借助受管设备信任的私有 CA，对 TLS 流量进行解密、检查后再重新加密的做法。
- [HSTS](https://ssl.sh/zh/glossary/hsts/): HSTS 是一个 HTTP 响应头，告诉浏览器在指定时间内只通过 HTTPS 访问该站点，并且遇到证书错误时不允许用户继续访问。
- [证书透明度](https://ssl.sh/zh/glossary/certificate-transparency/): 证书透明度（CT）是一套公开、只可追加的日志系统，记录所有公开信任的 TLS 证书，让任何人都能审计 CA 签发了什么。
- [降级攻击](https://ssl.sh/zh/glossary/downgrade-attack/): 降级攻击是指攻击者迫使客户端和服务器协商出比双方实际支持的更旧的协议版本或更弱的算法，从而利用其中的弱点。
- [错误签发](https://ssl.sh/zh/glossary/misissuance/): 错误签发是指 CA 违反 Baseline Requirements 或根证书计划政策签发证书，从验证缺陷到字段格式错误都算在内。
- [CAA 记录](https://ssl.sh/zh/glossary/caa/): CAA 记录是一种 DNS 记录，用来声明哪些证书颁发机构可以为该域名签发证书，所有公共 CA 签发前都必须检查。
