Charles 和 Fiddler 明明装了证书,为什么还是抓不到包?

0 阅读3分钟

在 iOS 抓包过程中,有个常见的情况是证书已经安装,证书也开启了信任,代理工具运行正常,但 App 的请求仍然抓不到

这种情况往往会让人误以为是证书问题,但实际排查下来,问题其实出在别的地方。


先确认抓不到包的具体情况

在开始排查之前,需要先区分两种情况:

情况 A:完全没有请求

  • 代理工具中没有任何记录
  • App 操作没有产生新请求

情况 B:有请求,但内容不完整

  • 可以看到 URL
  • 但无法看到请求体或响应体

这两种情况的处理方式不同。


先验证代理是否成功

先排除最基础的问题,代理是否生效。

操作步骤:

  1. 启动 Charles 或 Proxyman 或 Sniffmaster
  2. 确认代理端口(例如 8888)
  3. iPhone 与电脑连接同一 Wi-Fi
  4. 在 iPhone Wi-Fi 设置中填写代理地址与端口

填写端口

保存后,打开 Safari 访问 HTTPS 网站。


观察结果

  • 如果 Safari 请求可以抓到 → 代理正常
  • 如果 Safari 也抓不到 → 需要检查代理配置

只有在 Safari 可以抓到的前提下,后面的排查才有意义。


确认证书是否真正生效

证书安装完成后,还需要确认是否启用了信任。

在 iOS 上执行:

  1. 打开设置
  2. 进入“通用” → “关于本机” → “证书信任设置”
  3. 找到代理证书
  4. 手动开启信任

然后重新打开 Safari 测试 HTTPS。 证书信任


观察结果

  • 如果 HTTPS 可以解密 → 证书生效
  • 如果仍然无法解密 → 证书未正确安装

如果 Safari 正常,但是 App 抓不到包

如果出现:

  1. Safari 可以抓到
  2. App 没有任何请求

说明问题已经可以缩小范围了,App 的请求没有走系统代理


验证 App 是否真的发起请求

在切换工具之前,可以做一个简单验证:

  1. 关闭 iPhone 网络
  2. 触发 App 请求
  3. 观察界面变化

如果界面提示网络错误,说明请求确实存在,只是没有经过代理。


使用数据线连接设备抓包获取真实数据

当代理抓不到请求时,需要换一个抓包方式。

这里使用 SniffMaster(抓包大师)


使用 SniffMaster 抓包

操作步骤如下:

  1. 使用 USB 将 iPhone 连接电脑
  2. 保持设备解锁
  3. 点击“信任此电脑”
  4. 启动 SniffMaster
  5. 在设备列表中选择 iPhone
  6. 按提示安装驱动与描述文件
  7. 进入 HTTPS 暴力抓包模式
  8. 点击开始

然后在手机上触发请求。 配置


观察结果

在 SniffMaster 中可以看到:

  • 请求 URL
  • Header
  • HTTPS 数据

即使代理抓不到,这里仍然可以看到请求。 抓包


当只能看到 Header,没有 Body

如果抓包结果中:

  • URL 可见
  • Header 可见
  • Body 为空

说明:

  • HTTPS 已被捕获
  • 但应用未使用开发证书签名

解决方式:

  1. 获取 App 的 IPA
  2. 使用 iOS 开发证书重新签名
  3. 重新安装
  4. 再次抓包

完成后可以查看完整数据。


证书相关但不是证书本身的问题

在排查过程中,有几个容易混淆的点:

1. 证书已安装,但 App 不信任

  • App 内部可能做了证书校验
  • 代理证书不会被接受

2. 证书有效,但流量没经过代理

  • 代理链路未生效
  • App 使用自定义网络栈

3. HTTPS 正常,但数据不完整

  • 与签名有关,而不是证书

这些情况都可以通过抓包结果直接区分。


在遇到装了证书但抓不到包时,可以按下面方法尝试:

  1. 用 Safari 验证代理是否生效
  2. 确认证书信任状态
  3. 测试 App 是否走代理
  4. 如果不走代理,切换数据线连接设备抓包
  5. 如果数据不完整,处理签名问题

参考链接:www.sniffmaster.net/blog/130