← 返回题目列表

什么是中间人攻击?TLS 和证书如何防止 MITM?

高频 中等 第 11 / 27 题 更新于 2026/07/31
中间人攻击MITMTLS证书

简化版

中间人攻击是攻击者夹在客户端和服务端之间,窃听、篡改或分别冒充双方通信。TLS 防 MITM 的关键不只是加密,还包括证书验证:客户端要验证服务器证书链、域名、有效期和吊销状态,确认公钥确实属于目标站点。

详细版

如果只有密钥交换但没有身份认证,攻击者可以分别和客户端、服务端建立两条加密连接,两边都以为安全,实际明文被中间人看到。TLS 通过 CA 证书链和域名校验绑定“域名”和“服务器公钥”,客户端信任 CA,验证证书后才使用服务器公钥协商密钥。

防御包括全站 HTTPS、正确校验证书、不忽略证书错误、HSTS、防止降级、证书透明度监控、移动端谨慎做证书 Pinning。

完整版教学

一、中间人攻击攻击的是什么

MITM 攻击不是简单窃听,而是攻击者站在通信中间,同时对客户端伪装成服务端,对服务端伪装成客户端。

client <-> attacker <-> server

如果协议没有认证,客户端可能把密钥交给攻击者,服务端也可能以为攻击者就是客户端。加密本身不能证明“对面是谁”。

记忆钩子:加密回答“别人看不看得懂”,证书认证回答“我到底在和谁说话”。

二、为什么只有加密不够

Diffie-Hellman 这类密钥交换能让双方在公开网络上协商密钥,但它默认不验证对端身份。攻击者可以分别和两端做两次密钥交换。

client <--key1--> attacker <--key2--> server

客户端看到的是加密连接,服务端看到的也是加密连接,但攻击者能在中间解密再加密。这就是为什么 TLS 必须把密钥交换和证书认证结合起来。

三、证书链如何绑定身份

服务器证书里包含域名、公钥、有效期和签发者。客户端验证证书链是否能追溯到本机信任的根 CA,并检查访问域名是否匹配证书。

校验项作用
证书链确认由可信 CA 签发
域名确认证书属于目标站点
有效期防过期证书继续使用
用途确认证书可用于服务器认证

任何一项失败都不应忽略。点击“继续访问”就是在绕过身份认证。

四、TLS 握手中的防 MITM 流程

简化流程可以理解为:服务器出示证书,客户端验证证书,双方协商密钥,后续数据用对称密钥加密。

1. ClientHello
2. ServerHello + Certificate
3. client verifies certificate
4. key exchange -> shared secret
5. encrypted HTTP

TLS 1.3 让握手更快,但“先验证身份,再建立安全通道”的原则没有变。

五、常见 MITM 场景

公共 Wi-Fi、恶意代理、DNS 污染、ARP 欺骗、企业代理根证书、用户安装恶意证书,都可能制造中间人位置。不同场景防线不同。

DNS 被污染 -> 访问错误 IP
证书不匹配 -> 浏览器应报警
用户安装恶意根证书 -> 本机信任体系被改变

所以浏览器的证书错误提示非常重要,不能教育用户随便忽略。

六、HSTS 和证书 Pinning

HSTS 能防止用户从 HTTP 被降级或劫持到明文连接。证书 Pinning 是客户端只信任特定证书或公钥,常见于移动 App,但配置错误会导致证书轮换困难。

Strict-Transport-Security: max-age=31536000; includeSubDomains

Pinning 安全性强但运维风险也高。Web 站点更多依赖 CA 体系、HSTS、证书透明度和自动化证书管理。

七、开发和测试里的危险习惯

很多 MITM 风险来自开发阶段留下的坏习惯,比如关闭证书校验、信任所有证书、忽略 hostname 校验。测试环境可以临时使用自签证书,但客户端必须明确安装测试 CA,而不是在代码里写“全部信任”。

bad: verify=False
bad: trust all certificates
good: trust specific test CA

一旦这类配置进入生产,攻击者只要能站到链路中间,就可以伪造任意服务器证书。

八、排查证书问题的顺序

证书问题要按链路看:域名是否正确,证书 SAN 是否包含该域名,中间证书是否完整,证书是否过期,客户端时间是否正确,是否被代理替换证书。

domain -> SAN -> chain -> expiry -> client clock -> proxy/root CA

很多“HTTPS 不通”不是 TLS 协议问题,而是证书链缺中间证书、负载均衡配错证书或客户端时间偏差。

九、常见误区与追问

  • 误区:只要用了加密就不会被中间人。 没有身份认证的加密可能只是和攻击者加密。
  • 误区:证书错误可以先忽略。 证书错误可能意味着身份无法确认,继续访问会暴露通信。
  • 误区:自签证书和正规证书一样安全。 自签证书需要客户端预先可信分发,否则无法防伪造。
  • 追问:证书验证主要看什么? 证书链、域名、有效期、用途和吊销信息。
  • 追问:HSTS 防什么? 防浏览器降级到 HTTP 或首次之后的明文访问。
  • 追问:企业代理为什么能解 HTTPS? 终端安装了企业根证书,代理可签发被本机信任的站点证书。
  • 追问:Pinning 有什么风险? 证书轮换或误配置可能让客户端无法连接。

十、加强记忆

MITM 的核心是“你以为对面是服务器,其实中间站了攻击者”。TLS 防 MITM 靠两步:先用证书链和域名校验证明服务器身份,再协商会话密钥加密数据。加密解决看不懂,证书解决对面是谁;少了身份认证,加密也可能加给攻击者看。