内容提要
本文介绍了在Linux下使用mitmproxy抓取https流量的方法,包括安装mitmproxy、运行mitmweb命令、安装证书文件和更新系统信任。通过指定目标软件使用8080端口通信,并使用gg代理工具,可以成功捕获和解密https流量。
延伸解读
为何选择指定端口而非透明代理
文章提到,作者曾尝试透明代理抓包,但由于日常使用的 Arch Linux 系统会持续产生大量后台通信,导致 mitmproxy 的 webui 被刷屏,难以聚焦目标流量。因此,作者改为指定目标软件使用 8080 端口通信。这种做法适合需要精确抓取特定应用流量的场景,能避免系统噪声干扰,但要求手动配置目标软件或借助代理工具。
证书安装的关键步骤与系统信任
要解密 HTTPS 流量,必须让系统信任 mitmproxy 的 CA 证书。文章指出,首次运行 mitmproxy 后会在用户目录下生成多个证书文件,其中 mitmproxy-ca-cert.pem 需要复制到 /usr/share/ca-certificates/trust-source/anchors/ 目录,并执行 update-ca-trust 命令更新信任。这一步骤是解密成功的前提,若跳过则只能看到加密流量。
代理工具的选择:gg 与 proxychains-ng 的差异
作者对比了两种代理工具:proxychains-ng 虽然常见,但在部分软件上会出现不生效、无法联网甚至崩溃的问题;而 gg 定位相同,却解决了部分 Golang 编写的软件无法被 proxychains 代理的问题,并支持一些常见的国际联网协议。因此,作者最终选用 gg 来指定目标软件通过 8080 端口通信,从而成功抓包。
Q&A
在 Arch Linux 上怎么安装 mitmproxy?
在 Arch Linux 下,官方 extra 源中已经打包好了 mitmproxy,直接使用命令 `sudo pacman -S mitmproxy` 即可完成安装。
mitmweb 命令启动后,代理端口和 webui 端口分别是什么?
使用 mitmweb 命令会同时打开 8080 的代理端口和 8081 端口的 webui。访问 http://127.0.0.1:8081 即可看到 mitmproxy 的网页。
如何让系统信任 mitmproxy 的 CA 证书以解密 HTTPS?
将 mitmproxy 生成的证书文件 `$HOME/.mitmproxy/mitmproxy-ca-cert.pem` 复制到 `/usr/share/ca-certificates/trust-source/anchors/` 路径下,然后执行 `sudo update-ca-trust` 命令更新系统信任。
为什么选择指定目标软件使用 8080 端口通信,而不是透明代理?
因为作者将 Arch Linux 作为日常主力机使用,系统无时无刻不在向外通信,透明代理会导致 mitmproxy 的 webui 各种刷屏,所以放弃透明代理,选择指定目标软件使用 8080 端口通信。
gg 代理工具和 proxychains-ng 相比有什么优势?
gg 和 proxychains-ng 定位相同,都是使目标命令通过指定的代理进行通信,但 gg 解决了部分 golang 编写的软件无法被 proxychains 代理的问题,并支持一些常见的用来国际联网的协议。
mitmproxy 成功抓包后能实现什么效果?
mitmproxy 可以成功捕获并解密 HTTPS 流量,针对图片等信息甚至可以直接实现预览。