在 iOS 抓包过程中,有个常见的情况是证书已经安装,证书也开启了信任,代理工具运行正常,但 App 的请求仍然抓不到
这种情况往往会让人误以为是证书问题,但实际排查下来,问题其实出在别的地方。
先确认抓不到包的具体情况
在开始排查之前,需要先区分两种情况:
情况 A:完全没有请求
- 代理工具中没有任何记录
- App 操作没有产生新请求
情况 B:有请求,但内容不完整
- 可以看到 URL
- 但无法看到请求体或响应体
这两种情况的处理方式不同。
先验证代理是否成功
先排除最基础的问题,代理是否生效。
操作步骤:
- 启动 Charles 或 Proxyman 或 Sniffmaster
- 确认代理端口(例如 8888)
- iPhone 与电脑连接同一 Wi-Fi
- 在 iPhone Wi-Fi 设置中填写代理地址与端口
保存后,打开 Safari 访问 HTTPS 网站。
观察结果
- 如果 Safari 请求可以抓到 → 代理正常
- 如果 Safari 也抓不到 → 需要检查代理配置
只有在 Safari 可以抓到的前提下,后面的排查才有意义。
确认证书是否真正生效
证书安装完成后,还需要确认是否启用了信任。
在 iOS 上执行:
- 打开设置
- 进入“通用” → “关于本机” → “证书信任设置”
- 找到代理证书
- 手动开启信任
然后重新打开 Safari 测试 HTTPS。
观察结果
- 如果 HTTPS 可以解密 → 证书生效
- 如果仍然无法解密 → 证书未正确安装
如果 Safari 正常,但是 App 抓不到包
如果出现:
- Safari 可以抓到
- App 没有任何请求
说明问题已经可以缩小范围了,App 的请求没有走系统代理
验证 App 是否真的发起请求
在切换工具之前,可以做一个简单验证:
- 关闭 iPhone 网络
- 触发 App 请求
- 观察界面变化
如果界面提示网络错误,说明请求确实存在,只是没有经过代理。
使用数据线连接设备抓包获取真实数据
当代理抓不到请求时,需要换一个抓包方式。
这里使用 SniffMaster(抓包大师)。
使用 SniffMaster 抓包
操作步骤如下:
- 使用 USB 将 iPhone 连接电脑
- 保持设备解锁
- 点击“信任此电脑”
- 启动 SniffMaster
- 在设备列表中选择 iPhone
- 按提示安装驱动与描述文件
- 进入 HTTPS 暴力抓包模式
- 点击开始
然后在手机上触发请求。
观察结果
在 SniffMaster 中可以看到:
- 请求 URL
- Header
- HTTPS 数据
即使代理抓不到,这里仍然可以看到请求。
当只能看到 Header,没有 Body
如果抓包结果中:
- URL 可见
- Header 可见
- Body 为空
说明:
- HTTPS 已被捕获
- 但应用未使用开发证书签名
解决方式:
- 获取 App 的 IPA
- 使用 iOS 开发证书重新签名
- 重新安装
- 再次抓包
完成后可以查看完整数据。
证书相关但不是证书本身的问题
在排查过程中,有几个容易混淆的点:
1. 证书已安装,但 App 不信任
- App 内部可能做了证书校验
- 代理证书不会被接受
2. 证书有效,但流量没经过代理
- 代理链路未生效
- App 使用自定义网络栈
3. HTTPS 正常,但数据不完整
- 与签名有关,而不是证书
这些情况都可以通过抓包结果直接区分。
在遇到装了证书但抓不到包时,可以按下面方法尝试:
- 用 Safari 验证代理是否生效
- 确认证书信任状态
- 测试 App 是否走代理
- 如果不走代理,切换数据线连接设备抓包
- 如果数据不完整,处理签名问题