Charles抓包手机HTTPS请求失败怎么办?

UP主~永香 阅读 21

我用Charles调试移动端接口,HTTP请求能正常抓到,但一换成HTTPS就显示SSL handshake failed。手机已经装了Charles的根证书,也信任了,iOS 16系统,设置里证书状态是“已验证”。

试过在Proxy Settings里勾选”Enable SSL Proxying”,还加了*:*的通配规则,但还是不行。看控制台报错是SSL Proxying not enabled for this host,这到底咋整?

我来解答 赞 5 收藏
二维码
手机扫码查看
2 条解答
文亭(打工版)
这个问题我之前踩过坑,iOS 16之后确实比以前麻烦。你报错"SSL Proxying not enabled for this host"说明Charles没有真正对这个域名开启SSL代理,虽然你加了:,但可能有几个地方没配置到位。

常见的解决方案有这几个关键点:

第一,iOS 16的证书信任有两层。你说的"已验证"只是在设置-通用-关于本机-证书信任设置里安装了,但还需要进去那个页面,把Charles证书的开关手动打开,变成绿色才是真正信任。很多人卡在这一步。

第二,Charles的SSL Proxying Settings配置。去Proxy菜单下的SSL Proxying Settings,确保勾选Enable SSL Proxying,然后添加一条规则,Host填,Port填443或者。你虽然加了:,但建议删掉重新加一条,有时候这个配置会抽风。

第三,检查一下你报错的那个具体host。右键点击请求记录里那个失败的请求,看看有没有"Enable SSL Proxying"选项,如果有的话点一下手动开启。

第四,如果上面都对了还是不行,可能是App做了SSL Pinning(证书绑定)。这种情况只能hook绕过或者用其他工具,Charles本身搞不定。

顺便说下,iOS 16.4之后有些系统级别的请求可能还是抓不到,但第三方App一般没问题。

你先检查第一点,那个开关很多人漏掉。
点赞
2026-03-02 13:02
百里馨冉
你这个情况挺常见的,iOS 16开始对证书信任做了更严格的限制,光在“设置里信任证书”还不够,得确保两个关键点:

第一个是 Charles 的 SSL Proxying 设置要生效,你加了 *:* 规则是对的,但得确认这个规则是 Enable SSL Proxying 后加进去的,而且规则里端口要写成 :443 或者保留通配,比如 *:443,不能只写 *:*,有些版本会忽略非 443 的端口。

第二个更重要:iOS 上即使显示“已验证”,如果 Charles 的根证书没安装到 “系统”层级,HTTPS 握手还是会失败。你得重新导出 Charles 根证书(Help → SSL Proxying → Save Charles Root Certificate),然后通过 Safari 打开这个证书文件安装,安装时选择“系统”层级(不是“用户”),之后在“设置 → 通用 → VPN与设备管理”里找到 Charles 根证书,点进去点“完全信任”。

做完这两步重启下 Charles 和手机(不是重启 App),再试。要是还不行,检查下 Charles 的 SSL 解密设置里有没有勾选“Record SSL Proxying”,有时候默认是关的。

顺带提醒一句,生产环境别这么抓包,别把证书装在主力机上,尤其别信陌生来源的根证书,真要长期用建议搞个测试机或者模拟器。
点赞
2026-02-27 15:01