在启用双向认证(mTLS)的 App 面前,很多熟悉的抓包方式会不成功。
证书已经正确安装,代理也配置完成,但请求不出现在工具里,或者只看到一次失败的 TLS 握手。
这是通信方式发生了变化。
mTLS 在抓包层面带来的直接变化
在单向 TLS 中,客户端只验证服务器证书;
mTLS 则要求客户端在握手阶段向服务器提供客户端证书,并完成私钥签名。
这会带来两个直接结果:
- 系统代理即使拿到了 CA,也无法伪装客户端证书
- TLS 握手在应用内部完成,代理层无法参与
所以,继续在代理工具里反复确认证书状态,并不会产生新的数据。
代理工具仍然有用,但作用发生了变化
Charles / Fiddler 的用法
在 mTLS 场景下,这类工具更适合用来做验证型操作:
- 是否有任何请求尝试走系统代理
- 握手失败发生在 ClientHello 之后还是之前
- 是否存在未启用 mTLS 的备用接口
如果代理工具完全没有数据,说明网络栈已经绕过了系统代理。
对 iPhone 手机直接抓包是一个方法
使用抓包大师(Sniff Master)进行 HTTPS 暴力抓包
当网络通信被封装在 App 内部,手机抓包是可选方案之一。
抓包大师的 HTTPS 暴力抓包模式具备以下特点:
- 不依赖 Wi-Fi 代理
- 不要求在系统中信任中间证书
- 可直接在设备侧解密 HTTPS 数据
- mTLS、PIN 校验场景下仍可工作
前提条件也非常明确:
目标 App 必须使用 iOS 开发证书签名。
设备准备与环境状态检查
在启动抓包之前,需要确认几个状态:
- iOS 设备通过 USB 连接电脑
- 屏幕处于解锁与亮屏状态
- 第一次连接已完成“信任此电脑”确认
在 Windows 环境下,抓包大师会提示安装 iOS 驱动,安装完成后需要重新启动软件。
第一次使用时,设备上还需要安装抓包大师的描述文件。
该步骤用于开启必要的设备管理能力,而不是注入证书。
进入 HTTPS 暴力抓包模式
操作路径很明确:
- 在设备列表中选中目标 iPhone
- 等待左下角“高级管理服务”状态变为绿色
- 在功能区域中选择 HTTPS 暴力抓包
该模式仅对 iOS 设备可用,选择“本机”时不会显示此功能。
如果高级管理服务启动失败,可以通过界面中的按钮重新触发启动流程。

只抓目标 App,减少无关流量
mTLS 应用往往伴随大量系统请求。
在抓包界面中:
- 点击“选择 App”
- 勾选目标应用
- 再触发网络请求
这样可以避免被系统服务和后台任务干扰,直接观察业务接口行为。

为什么有时只能看到 Header,看不到 Body
在 mTLS 场景下,这一点尤其容易被忽略。
如果 App:
- 来自 App Store
- 未使用开发证书签名
即使启用了暴力抓包,也只能看到:
- 请求地址
- 请求头
请求体和响应体会被隐藏。
解决方式不是修改抓包配置,而是对 App 本身进行处理:
- 获取 IPA 文件
- 使用 iOS 开发证书重新签名
- 如 IPA 加密,需要先完成脱壳
- 安装重签后的应用再进行抓包
完成后,HTTPS 数据即可完整解析。
工具组合在 mTLS 调试中的分工
在完整流程中,不同工具承担的作用并不相同:
- 代理工具用于确认网络是否走系统路径
- 设备级抓包用于获取真实 HTTPS 数据
- 拦截器用于验证业务逻辑与异常处理
参考链接:https://www.sniffmaster.net/tutorial/zh/2/2.html