mitmproxy

关注
义项:HTTP 抓包代理工具
mitmproxy

mitmproxy是一套免费、开源的交互式中间人代理工具,能够拦截、查看、修改和重放 HTTP/1、HTTP/2、WebSockets 等协议的网络流量,并支持对 SSL/TLS 加密连接进行解密分析[1][2]。它由控制台程序 mitmproxy、网页界面 mitmweb 和命令行程序 mitmdump 3 个前端组成,共用同一套底层代理功能[2]。由于内建 Python 脚本接口,该工具常被用于软件调试、接口测试、渗透测试与网络安全研究[1][3]。

百科 图文
目录
  1. 定义
  2. 原理
  3. 发展历程
  4. 应用
  5. 局限
  6. 参见

定义

mitmproxy是一套免费且开源的交互式 HTTPS 代理工具,可以在客户端与服务器之间中转网络流量,并对经过的请求与响应进行查看、修改和重放[1][4]。它支持 HTTP/1、HTTP/2、HTTP/3、WebSockets 以及其他受 SSL/TLS 保护的协议,并能对 HTML、Protobuf 等多种消息格式进行美化和解码[1]。

项目名称中的「mitm」是「Man-In-The-Middle」(中间人)的缩写,指其在流量通路中同时扮演客户端与服务器两端角色的工作方式[5]。该工具属于自由软件,采用 MIT 许可证发布,源代码托管在 GitHub 上[6]。

原理

对于未加密的 HTTP 流量,mitmproxy 以常规显式代理的方式工作:客户端把请求发往代理,代理再向目标服务器转发,因此代理能够直接读取请求内容[5]。对于 HTTPS 流量,客户端通常先发出 CONNECT 请求,要求代理在客户端与服务器之间建立一条数据通道;普通代理只能盲目转发这段加密数据,无法获知其内容[5]。

mitmproxy 的解决方式是让自身充当一个受信任的证书颁发机构:它内建完整的 CA 实现,在连接过程中即时签发用于拦截的证书,分别与客户端和服务器建立两条独立的 TLS 连接,从而对两侧明文进行解码[5]。要让客户端接受这些证书,需要手动把 mitmproxy 的根证书登记为设备上的受信任 CA[5]。

生成拦截证书时需要知道目标域名,但客户端有时只提供 IP 地址。为此 mitmproxy 采用上游证书嗅探:收到 CONNECT 请求后先暂停与客户端的会话,同时连向服务器完成 TLS 握手并检查其证书,再以证书中的 Common Name 生成出示给客户端的证书[5][7]。若证书还带有 Subject Alternative Name 字段,其中的备用域名也会一并提取并加入生成的证书[5]。针对服务器名称指示(SNI)扩展,处理流程会等客户端握手传出 SNI 值后再向该主机名发起上游连接,以取得正确的服务器证书[5]。

mitmproxy 默认以常规 HTTP 代理模式启动,监听本机 8080 端口,需要浏览器或其他设备把流量指向该端口才能生效[4]。除默认模式外,它还提供透明代理、反向代理和上游代理等运行方式;其中透明代理在网络层把连接重定向到代理,无需修改客户端配置,但要求通过路由机制还原连接的原始目标地址[5]。mermaid 图示意显式 HTTPS 拦截流程:


sequenceDiagram

participant C as 客户端

participant M as mitmproxy

participant S as 服务器

C->>M: CONNECT 目标主机

M->>S: 建立 TLS 连接并读取证书

S-->>M: 返回证书(CN/SAN)

M->>C: 出示即时签发的拦截证书

C->>M: 发送加密请求

M->>S: 转发明文请求

发展历程

mitmproxy 由开发者 Aldo Cortesi 创建,其版权声明可追溯至 2010 年,早期版本以命令行加控制台界面的形式提供,功能包括拦截并修改 HTTP 请求与响应、保存完整会话以供重放和分析,以及用 Python 脚本改动流量[8][9]。0.8 版本时期,项目运行需要 Python 2.6 或 2.7,并曾明确不支持 Windows 系统[9]。

项目随后转向 Python 3,并要求至少 3.6 版本,后续版本的要求进一步提高到 3.12。许可证方面,早期发行版采用 GNU 通用公共许可证第 3 版,并附带针对 OpenSSL 库的链接例外;后来的仓库许可证改为 MIT 许可证[8][6]。项目维护工作后来由 Maximilian Hils 等人接手。

mitmproxy 被收录进多个主流 Linux 发行版的软件仓库,例如 Debian 与 Ubuntu 都提供名为 mitmproxy 的软件包,其定位描述为「具备 SSL 能力的中间人 HTTP 代理」[10]。它同时通过 Python 包索引发布,可以借助包管理工具安装[11]。

应用

mitmproxy 的常见用途包括软件调试与测试、隐私测量和渗透测试[1]。开发人员用它了解应用程序与其他服务之间的接口交互,安全研究人员用它分析网络协议,测试人员用它构造边界情况与错误条件[3]。由于可以修改请求和响应内容,它也常被用于构造模拟数据和验证接口在不同参数下的行为[12]。

3 个核心工具面向不同使用场景:mitmproxy 是带控制台的交互式界面,所有会话保存在内存中,适合处理规模较小的样本;mitmweb 提供浏览器中的图形界面,用法接近 Chrome 开发者工具的抓包面板;mitmdump 是非交互的命令行程序,可输出到终端并支持脚本处理,功能定位类似针对 HTTP 的 tcpdump[2][1]。

mitmproxy 提供 Python 脚本接口,可以加载自定义脚本或插件,对流量执行自动化改动,例如修改请求头、重定向流量、将消息可视化或实现自定义命令;mitmdump 还可以把流量写入文件,之后再读取并重放给客户端或服务器[1][2]。由于其脚本能力可实现过滤、篡改、重放和自动化,被广泛用于接口自动化测试流程[12][13]。

局限

mitmproxy 解密 HTTPS 的前提是目标设备信任其根证书,若证书未正确安装或未被设为受信任根证书,流量会保持加密状态或连接直接中断[14]。自 Android 7 起,应用默认不再信任用户自行安装的 CA 证书,因此即使证书已装入系统,目标应用仍可能忽略它[14][13]。

部分应用会实施证书固定(Certificate Pinning),即在程序内硬编码所接受的证书或公钥指纹,使任何由其他 CA 签发的证书都会被拒绝[15]。这类机制会直接导致 mitmproxy 看不到明文流量,代理工具本身不提供绕过能力[13]。Chromium 浏览器也已禁止固定自签名根证书的证书链,使 mitmproxy、Fiddler 等抓包工具无法再利用自签证书嗅探加密内容[16]。

在透明代理模式下,mitmproxy 依赖路由机制还原原始目标地址,因此流量到达代理主机前不应施加网络地址转换,否则目标信息会丢失[5]。此外,控制台版本的 mitmproxy 不支持 Windows 系统,Windows 环境下只能使用其命令行或网页界面形式[12]。

参见

  • 中间人攻击 —— mitmproxy 的工作方式建立在这一类流量截获方法之上

  • 传输层安全协议 —— 该工具拦截与解密的对象,即 HTTPS 所依赖的加密协议

  • 证书颁发机构 —— mitmproxy 内建 CA 实现并即时签发拦截证书

  • 证书固定 —— 使 mitmproxy 无法解密部分应用流量的防护机制

  • Python —— mitmproxy 实现脚本扩展与插件机制所用的编程语言

参考资料

  1. mitmproxy is a free and open source interactive HTTPS proxy [引用日期2026-10-14]
  2. Introduction [引用日期2026-10-14]
  3. Introduction [引用日期2026-10-14]
  4. MASTG-TOOL-0097: mitmproxy [引用日期2026-10-14]
  5. How mitmproxy works [引用日期2026-10-14]
  6. LICENSE [引用日期2026-10-14]
  7. Upstream Certificates¶ [引用日期2026-10-14]
  8. Copyright for mitmproxy source package in Trusty [引用日期2026-10-14]
  9. mitmproxy is an SSL-capable man-in-the-middle proxy for HTTP [引用日期2026-10-14]
  10. 软件包: mitmproxy (6.0.2-1) [universe] [引用日期2026-10-14]
  11. mitmproxy [引用日期2026-10-14]
  12. Mock 工具与定制化 [引用日期2026-10-14]
  13. Python抓包工具怎么选_Fiddler/Charles/Mitmproxy抓取手机App HTTPS流量包 [引用日期2026-10-14]
  14. Mitmproxy如何捕获HTTPS流量? - CodeMaster 2025-12-01 02:30 采纳率: 99% [引用日期2026-10-14]
  15. mimic/docs/pinning.md at main · littledivy/mimic [引用日期2026-10-14]
  16. [科普中国]-HTTP公钥固定 [引用日期2026-10-14]
词条评价
词条统计

浏览次数:3 次

阅读量:0 次 · 阅读完成量:0 次

最近更新:2026-10-13T21:29:49Z

历史版本

本条目引用的词条
中间人攻击 传输层安全协议 证书颁发机构 证书固定 Python