什么是中间人攻击?HTTPS 是如何防范的?
简化版
中间人攻击(MITM):攻击者悄悄插在客户端和服务器之间,冒充双方转发并窃听/篡改通信——你以为在和服务器说话,其实中间人全听得到。HTTPS 靠数字证书防范:服务器的公钥由权威 CA 签名背书,中间人拿不到 CA 私钥,伪造不出被浏览器信任的、且域名匹配的证书,所以冒充会被证书验证识破、浏览器报警。
详细版
中间人攻击的原理:攻击者控制了通信链路(比如伪造 WiFi 热点、DNS 劫持、ARP 欺骗),把自己插在中间:
你 ⇄ 中间人 ⇄ 服务器
- 对服务器,中间人假装是你;对你,中间人假装是服务器;
- 双向转发消息,从而窃听全部内容,甚至篡改(改转账金额、注入木马)。
纯 HTTP 完全无法防——明文传输,中间人想看想改都行。
HTTPS 的防范核心是证书验证:
- 光加密不够——如果中间人一开始就用自己的公钥冒充服务器公钥,它照样能解密;
- 关键在于证书:服务器公钥必须由受信 CA 签名,绑定域名。中间人无法伪造一个「被浏览器信任的 CA 签名 + 域名匹配」的证书,所以它冒充时,浏览器验证证书就会失败并警告用户。
完整版教学
一、为什么「只加密」防不住中间人
初学者常以为「HTTPS 加密了就安全了」,但只有加密是防不住中间人的。设想一个只加密、不验证身份的方案:
- 你要和服务器协商密钥,需要服务器的公钥;
- 中间人截获,把自己的公钥冒充成服务器公钥发给你;
- 你用中间人的公钥加密密钥 → 中间人能解 → 中间人再用真服务器的公钥和服务器建立连接;
- 于是中间人和你、和服务器各建了一条加密连接,居中转发——加密了,但全被它看光了。
问题出在:你无法确认「拿到的公钥真是服务器的」。所以 HTTPS 除了加密,必须验证服务器身份——这就是证书存在的意义。
二、证书如何堵住这个漏洞
数字证书让中间人的冒充无法得逞:
- 真服务器的公钥被受信 CA 用私钥签名,绑定了域名,做成证书;
- 中间人想冒充,要么:
- 用自己的证书 → 它的证书没有受信 CA 的签名(它拿不到 CA 私钥),浏览器验签失败、报「不受信任」;
- 改真证书里的公钥换成自己的 → 一改,CA 的签名就对不上了,验签失败;
- 用一张它自己域名的合法证书 → 域名和你访问的对不上,浏览器报「域名不匹配」。
无论哪条路,浏览器的证书验证都会拦下它并弹出安全警告。中间人的死结是:它没有 CA 的私钥,签不出被信任的证书(详见「数字证书」那道题)。
三、HTTPS 防中间人的完整逻辑链
把前面串起来,HTTPS 防中间人靠三层配合:
- 证书验证身份 → 确认「对面确实是目标服务器」,堵住冒充;
- 非对称加密协商密钥 → 安全地交换对称密钥,中间人截获也解不了;
- 对称加密 + MAC → 数据加密防窃听、校验防篡改。
第一层是防中间人的关键——没有身份验证,后面的加密都可能是在和中间人加密。
四、HTTPS 也不是绝对无懈可击
证书体系有几个现实中的突破口,面试能提到会加分:
- CA 被攻破 / 错误签发:如果某个受信 CA 被黑或误签了假证书,中间人就能拿到「被信任」的假证书。历史上发生过(如 DigiNotar 事件)。对策有证书透明度(CT)、证书吊销。
- 用户被诱导安装恶意根证书:企业代理、某些软件会往系统装自己的根证书,于是它能合法地「中间人」你的 HTTPS(企业审计常用)。
- SSL 剥离(降级攻击):中间人在你首次用 HTTP 访问时拦截,不让你升级到 HTTPS。对策是 HSTS(详见那道题)。
- 用户无视警告:浏览器报警了但用户点「继续访问」,防线就破了。
所以 HTTPS 防的是「无法伪造可信证书的中间人」,但防不了 CA 失守、本地信任被污染、或用户主动忽略警告。
五、常见误区
- ❌ 以为 HTTPS 只靠加密防中间人——加密不验证身份挡不住冒充,证书验证身份才是关键。
- ❌ 以为中间人攻击需要很高技术门槛——公共 WiFi、ARP 欺骗、DNS 劫持都能实施,很常见。
- ❌ 以为有 HTTPS 就绝对防中间人——CA 失守、装了恶意根证书、SSL 剥离、无视警告都能绕过。
- ❌ 看到证书警告随手点「继续」——这可能正是中间人在冒充,等于自毁防线。
六、常见误区与追问
| 考点 | 正确口径 |
|---|---|
| 攻击方式 | 攻击者夹在客户端和服务器之间转发并篡改流量 |
| 只加密不足 | 如果公钥可被替换,客户端会加密给攻击者 |
| HTTPS 防护 | 证书链证明公钥属于目标域名 |
client -- attacker -- server
without cert validation:
attacker gives fake public key
with HTTPS:
browser rejects untrusted certificate
防中间人关键不是“有没有加密”,而是“加密对象的公钥是否可信”。
- 误区:只要使用非对称加密就能防中间人。 如果公钥被中间人替换,客户端会把秘密安全地发给攻击者。
- 误区:用户点继续访问也一样安全。 绕过证书警告会失去身份认证,中间人攻击风险大增。
- 误区:HTTPS 能防所有中间人相关风险。 本机被安装恶意根证书、证书误签发、应用忽略校验仍可能出问题。
- 追问:证书链如何防冒充? 攻击者没有受信 CA 对目标域名签发的证书,也没有对应私钥,无法完成可信握手。
- 追问:公钥固定是什么? 应用内置或记住特定证书/公钥,降低 CA 被误签发时的风险,但运维复杂。
- 追问:公司代理 HTTPS 抓包原理是什么? 终端安装公司根证书后,代理动态签发站点证书,浏览器因此信任代理。
七、加强记忆
中间人攻击是攻击者插在客户端和服务器之间冒充双方、窃听篡改。纯 HTTP 无力防范;HTTPS 靠数字证书验证服务器身份防范——中间人没有 CA 私钥,伪造不出受信且域名匹配的证书,冒充会被证书验证识破报警。防线的关键是「身份验证」而非「只加密」;但 CA 失守、恶意根证书、SSL 剥离、用户无视警告仍可能突破。