为什么fiddler能修改https转送的信息?

Fiddler 能修改 HTTPS 流量的原理

这是一个**中间人攻击(Man-in-the-Middle, MITM)**的合法应用。Fiddler 通过以下机制实现:


核心原理:SSL/TLS 代理伪造

复制代码
正常 HTTPS:
客户端 ──────────────────────────── 服务器
         加密通信(只有两端能解密)

安装 Fiddler 后:
客户端 ←→ Fiddler ←→ 服务器
       ↑           ↑
   假证书         真证书
 (客户端信任)    (Fiddler解密)

Fiddler 实际上建立了两条独立的 TLS 连接

  1. 客户端 → Fiddler:使用 Fiddler 自己生成的伪造证书加密
  2. Fiddler → 服务器:使用服务器的真实证书加密

关键步骤

① 安装根证书(Root CA)

  • Fiddler 安装时会在系统证书库植入自己的根证书(Root CA)
  • 操作系统和浏览器信任这个根 CA,所以 Fiddler 动态伪造任何域名的证书都不会报警

② 动态生成证书

  • 当你访问 https://api.example.com
  • Fiddler 实时生成一张 api.example.com 的假证书
  • 用自己的根 CA 签名 → 客户端验证通过

③ 中间解密再转发

复制代码
客户端发出请求
    ↓
Fiddler 用假证书解密 → 读取/修改明文数据
    ↓
Fiddler 用真证书重新加密 → 转发给服务器
    ↓
服务器响应 → Fiddler 解密 → 读取/修改 → 重新加密返回客户端

为什么平时 MITM 行不通?

条件 普通攻击者 Fiddler
根证书是否被信任 ❌ 没有 ✅ 手动安装到系统
是否控制网络流量 需要入侵 ✅ 配置系统代理
结果 浏览器报证书错误 正常通过

安全机制的本质是:浏览器信任谁签的证书。Fiddler 能绕过,是因为你主动授权了它的根证书。


防御机制(对抗 Fiddler 抓包)

部分应用会使用额外防护:

  • Certificate Pinning(证书固定):App 内置服务器的真实证书指纹,不接受任何其他证书,即使是系统信任的 CA 签发的也不行
  • HPKP:HTTP 层面的公钥固定(已较少用)

这就是为什么抓取某些 App 的 HTTPS 流量需要额外 hook 或绕过 pinning。


总结一句话:Fiddler 能改 HTTPS 数据,是因为你主动信任了它的根证书,让它合法地扮演"中间人"角色。