iOS抓包踩坑实录:解决Charles安装证书后仍抓不到HTTPS包的几个关键点
2026/6/8 12:45:49 网站建设 项目流程

iOS抓包进阶指南:Charles HTTPS拦截疑难排查手册

当你按照教程一步步操作,却在Charles里依然看不到HTTPS请求内容时,那种挫败感我深有体会。去年在为某金融App做安全审计时,我花了整整两天时间才排查出问题所在——原来iOS 15之后证书信任设置的位置悄悄变了。这份手册将分享那些教程里不会告诉你的实战经验,特别是针对不同iOS版本、特殊App场景的深度配置技巧。

1. 证书安装后的关键验证步骤

大多数教程止步于"安装证书并启用SSL代理",但实际成功需要四个环节全部打通。先快速检查这个清单:

  1. 证书有效性验证
    在iPhone的设置 > 通用 > VPN与设备管理中,确认Charles证书显示为"已验证"。如果显示红色警告,可能需要重新下载或检查网络连接。

  2. 系统级信任开启
    iOS 13之后,证书信任路径变为:
    设置 > 通用 > 关于本机 > 证书信任设置
    这里需要手动开启对Charles证书的完全信任

  3. Charles代理状态检查
    在电脑端Charles的Help > SSL Proxying菜单中:

    • 确保Install Charles Root Certificate状态为已安装
    • Charles Root Certificate显示为有效(非灰色)
  4. 网络链路测试
    断开手机WiFi重新连接后,在Safari访问任意HTTPS网站(如https://example.com),观察Charles能否看到明文请求

注意:iOS 16.4+版本需要额外在设置 > 通用 > 传输与还原中关闭"私有WiFi地址"功能

2. SSL Proxying配置的隐藏细节

那些看似简单的星号通配符(*)配置,藏着几个容易踩坑的陷阱:

2.1 通配符的最佳实践

Host: * Port: 443

这个经典配置在90%情况下有效,但遇到以下场景会失效:

  • 使用HTTP/3(QUIC)协议的网站
  • 启用证书固定(Certificate Pinning)的App
  • 使用非标准端口的HTTPS服务

更稳妥的配置策略是:

  1. 先保持SSL Proxying关闭
  2. 正常使用App/访问网站,让请求出现在Charles中
  3. 对需要解密的域名右键选择Enable SSL Proxying
  4. 最后再全局启用*:443规则

2.2 多级域名的特殊处理

当遇到api.service.example.com这类多级域名时,Charles的匹配规则是:

配置规则匹配情况
*.example.com匹配所有子域
example.com仅匹配根域
service.example.com精确匹配该子域

我曾遇到一个案例:配置*.google.com却无法解密mail.google.com,原因是该域名使用了特殊的安全策略。

3. 对抗证书固定的高级技巧

银行类App和某些社交应用会采用证书固定(Certificate Pinning)技术,常规方法无法拦截。这里分享三种实测有效的方案:

3.1 越狱设备方案

通过Cydia安装SSL Kill Switch 2插件,直接禁用系统的证书验证机制。操作步骤:

  1. 添加源:https://github.com/nabla-c0d3/ssl-kill-switch2
  2. 搜索安装插件
  3. 在设置中启用开关

3.2 非越狱设备方案

使用Objection框架进行动态注入:

pip3 install objection objection --gadget "应用BundleID" explore ios sslpinning disable

3.3 虚拟机方案

在Mac上使用iOS模拟器运行目标App,配合Charles更容易绕过限制。关键配置:

# 在模拟器的终端执行 defaults write com.apple.NSURLSession disableCertificateValidation -bool YES

4. 网络环境特殊问题排查

当所有配置都正确却仍然失败时,检查这些容易被忽视的环节:

4.1 代理冲突检测

运行以下命令检查端口占用情况:

lsof -i :8888 netstat -vanp tcp | grep 8888

如果发现其他进程占用,修改Charles默认端口:

Proxy > Proxy Settings > HTTP Proxy > Port

4.2 企业网络限制

某些公司网络会拦截HTTPS代理,表现为:

  • 能抓到HTTP请求但HTTPS全部失败
  • Charles显示CONNECT请求但没有后续数据

解决方案:

  1. 尝试使用手机热点测试
  2. 在路由器关闭"HTTPS扫描"功能
  3. 使用USB连接方案:
# 通过usbmuxd建立连接 iproxy 8888 8888

4.3 iOS系统限制对照表

iOS版本特殊限制解决方案
≤12无特殊限制常规配置即可
13-14证书信任位置变更新路径设置
15+私有中继功能干扰关闭iCloud+私有中继
16+锁定模式限制开发者模式白名单

5. 实战案例:某电商App抓包分析

以破解某电商App的API加密为例,演示完整工作流:

  1. 初始发现
    配置*:443后仅能看到乱码请求,响应状态码为403

  2. 问题诊断
    使用Wireshark辅助分析,发现TLS握手阶段有特殊ALPN标识

  3. 解决方案
    在Charles的SSL Proxying设置中添加特定SNI规则:

    Host: api.ecommerce.com Port: 443 SNI: api.ecommerce.com
  4. 最终配置
    配合mitmproxy定制中间件,修改ClientHello报文中的扩展字段

这个案例耗时三天才完全破解,关键是要有耐心逐步排除各种可能性。建议准备一个检查清单,每次按步骤验证各个环节。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询