为什么我的Charles配置好了却抓不到手机的HTTPS请求? UE丶玉宁 提问于 2026-02-10 15:06:31 阅读 34 工具 我按教程配置了Charles的HTTPS代理,手机也设置了代理并安装了证书,但访问App时请求还是显示“Connection refused”。 /* 我在App的WebView里看到的错误样式 */ .error { color: red; } 网页请求能抓到,App的请求却全都是红叉,证书里也勾选了对应App包名,到底哪里出问题了? Charles抓包调试 我来解答 赞 11 收藏 分享 生成中... 手机扫码查看 复制链接 生成海报 反馈 发表解答 您需要先 登录/注册 才能发表解答 2 条解答 雅涵 Dev Lv1 大概率是App用了SSL Pinning防抓包,这种安全机制会校验证书链,Charles的证书过不了验证。你得用Frida或者Objection绕过Pinning,像这样安装个Objection: pip3 install objection 然后运行 objection explore 再试下抓包。我之前也被坑过好几次,现在遇到HTTPS抓不到基本都是这原因。 回复 点赞 5 2026-02-16 20:05 技术树泽 Lv1 这个问题太常见了,我之前在调试公司App的时候也卡过两天,最后发现是几个细节没注意。我们一步步来排查,先说最常见的原因。 首先你提到网页请求能抓到,说明Charles的基础代理配置没问题,手机网络也通,问题出在App的HTTPS通信上。Connection refused 红叉一般是SSL握手失败或者App本身做了证书校验。 第一步,确认手机和电脑在同一局域网,并且Charles的代理端口(默认8888)没有被占用。你在Charles里打开 Proxy → Proxy Settings,确认端口是8888,勾选了Enable transparent HTTP proxying。然后手机Wi-Fi设置里手动代理填的是你电脑的局域网IP,不是localhost也不是127.0.0.1。 第二步,证书安装要特别小心。你得在手机浏览器里访问 chls.pro/ssl 下载并安装证书。iOS要注意在设置 → 通用 → 关于本机 → 证书信任设置里把Charles的证书打开信任。Android不同系统位置不一样,比如小米在“更多设置”→“系统安全”→“加密与凭据”→“信任的凭据”里安装,然后还得在应用层面开启用户证书信任。 这里需要注意,现在很多App为了安全,会做SSL pinning(证书绑定),也就是说它不认系统证书,只认自己打包进来的证书。这种情况下就算你装了Charles证书也没用,App会直接拒绝连接,报Connection refused。 解决办法是绕过SSL pinning。如果你有App的测试包,可以用工具处理。比如Android可以用JustTrustMe这个Xposed模块,或者用Frida注入脚本。举个Frida的例子: // bypass-ssl-pinning.js Java.perform(function () { var CertificatePinner = Java.use('okhttp3.CertificatePinner'); CertificatePinner.check.overload('java.lang.String', '[Ljava.security.cert.Certificate;').implementation = function (hostname, certificates) { console.log('[*] Bypassing CertificatePinner for ' + hostname); return; }; // 如果是用HttpUrlConnection var SSLContext = Java.use('javax.net.ssl.SSLContext'); SSLContext.getInstance.overload('java.lang.String').implementation = function (protocol) { console.log('[*] Bypassing SSLContext: ' + protocol); return this.getInstance(protocol); }; }); 保存成js文件,用frida -U -f com.your.app.package -l bypass-ssl-pinning.js 启动。这样就能绕过常见的OkHttp和系统级的证书校验。 iOS的话类似,可以用trustKit或者修改dylib,但需要越狱或者用自己的证书重签App,比较麻烦。 还有一个可能是App用了Network Security Config(Android 7.0+)。它可以在xml里指定只信任系统证书,忽略用户安装的证书。这时候你需要反编译App的AndroidManifest.xml,看有没有networkSecurityConfig引用,然后去对应的xml文件里加一个debug允许用户证书的配置: <!-- res/xml/network_security_config.xml --> <network-security-config> <debug-overrides> <trust-anchors> <certificates src="system" /> <certificates src="user" /> </trust-anchors> </debug-overrides> </network-security-config> 然后在AndroidManifest.xml里加上: android:networkSecurityConfig="@xml/network_security_config" 到application标签里。 但注意这只能在debug包生效,线上包可能不会这么配。 最后检查Charles的SSL Proxying Settings。你得在Proxy → SSL Proxying Settings里添加你要抓的域名,比如 . 或者具体的 api.example.com。如果不加,Charles不会解密这些Host的流量,就会显示红叉。 总结一下排查顺序: 1. 手机和电脑网络通不通,代理设对没 2. Charles证书装了没,系统里信任了没 3. App有没有做SSL pinning 4. Android有没有Network Security Config限制 5. Charles的SSL Proxying有没有加对应域名 你可以先拿一个简单的测试App试试,比如官方文档里的demo,排除是不是目标App本身的问题。慢慢来,这种问题调通了之后就一通百通了。 回复 点赞 9 2026-02-10 15:14 加载更多 相关推荐 2 回答 44 浏览 Charles抓包手机HTTPS请求失败怎么办? 我用Charles调试移动端接口,HTTP请求能正常抓到,但一换成HTTPS就显示SSL handshake failed。手机已经装了Charles的根证书,也信任了,iOS 16系统,设置里证书状... UP主~永香 工具 2026-02-27 14:53:20 2 回答 48 浏览 Charles 开启 SSL Proxy 后为什么还是抓不到 HTTPS 请求? 我用 Charles 抓包本地开发的 React 项目,已经按教程装了 Charles 的根证书,也在手机和电脑上都信任了。SSL Proxying Settings 里也加了 *:443,但打开 A... 西门世英 工具 2026-03-26 15:01:20 2 回答 42 浏览 Charles抓包为什么看不到本地React开发的HTTPS请求? 我在用 create-react-app 搭建的项目里调用后端接口,本地启的是 https://localhost:3000,但 Charles 完全抓不到这些请求,明明代理已经开了,其他 HTTP ... 极客东旭 前端 2026-03-03 10:45:18 1 回答 94 浏览 Charles 开启 SSL Proxy 后为什么还是抓不到 HTTPS 请求? 我用 Charles 抓包,已经安装了根证书,也在 SSL Proxying Settings 里加了 *:443,但手机上的 App 发的 HTTPS 请求还是显示为 CONNECT tunnel,... 南宫东焕 工具 2026-02-24 03:52:19 2 回答 88 浏览 Charles SSL证书配置后iOS设备请求显示证书错误怎么办? 在用Charles抓iOS设备的HTTPS请求时,虽然已经在设置里启用了SSL Proxy并信任了Charles证书,但每次请求都弹出"证书无效"的错误。之前测试HTTP请求没问题,换成HTTPS就报... 希玲 工具 2026-02-04 12:44:33 1 回答 26 浏览 Charles抓包时为什么手机请求没显示? 我用Charles配置了手机代理,电脑和手机在同一个WiFi下,SSL证书也装了,但React Native App发的请求完全没出现在Charles里,是哪里漏了吗? 我试过重启Charles、重装... 极客东旭 移动 2026-03-22 16:55:24 2 回答 82 浏览 Burp Suite配置HTTPS抓包一直拦截不到请求怎么办? 在用Burp测试网站时,配置了代理和安装CA证书后,HTTP请求能正常拦截,但HTTPS请求就是进不去拦截器,浏览器还提示证书不受信任。我试过清浏览器缓存、重装证书、换8080/8090端口都不行,B... 松奇 安全 2026-02-03 17:13:34 1 回答 52 浏览 Fiddler抓不到HTTPS请求怎么办? 我用 Fiddler 想抓本地开发环境的 HTTPS 接口,但完全看不到请求,HTTP 的能正常抓到。已经点了 Tools > Options > HTTPS 里的 Decrypt HTT... UI园园 前端 2026-03-17 22:39:19 1 回答 50 浏览 Charles抓包HTTPS时证书安装后还是无法解密? 我用Charles抓自己开发的React项目接口,已经按教程在手机和电脑上都装了Charles的根证书,也开启了SSL Proxying,但HTTPS请求还是显示“SSL Proxying not e... Prog.新红 工具 2026-03-13 21:05:20 1 回答 28 浏览 Charles 设置断点后为什么请求没被拦截到? 我在 Charles 里对某个接口启用了 Breakpoints,也确认了代理设置没问题,但请求发出去后直接就返回了,根本没在 Charles 里停下来。我试过重启 Charles 和浏览器,还检查了... 程序猿毓琳 工具 2026-03-12 19:54:20
pip3 install objection然后运行objection explore再试下抓包。我之前也被坑过好几次,现在遇到HTTPS抓不到基本都是这原因。首先你提到网页请求能抓到,说明Charles的基础代理配置没问题,手机网络也通,问题出在App的HTTPS通信上。Connection refused 红叉一般是SSL握手失败或者App本身做了证书校验。
第一步,确认手机和电脑在同一局域网,并且Charles的代理端口(默认8888)没有被占用。你在Charles里打开 Proxy → Proxy Settings,确认端口是8888,勾选了Enable transparent HTTP proxying。然后手机Wi-Fi设置里手动代理填的是你电脑的局域网IP,不是localhost也不是127.0.0.1。
第二步,证书安装要特别小心。你得在手机浏览器里访问
chls.pro/ssl下载并安装证书。iOS要注意在设置 → 通用 → 关于本机 → 证书信任设置里把Charles的证书打开信任。Android不同系统位置不一样,比如小米在“更多设置”→“系统安全”→“加密与凭据”→“信任的凭据”里安装,然后还得在应用层面开启用户证书信任。这里需要注意,现在很多App为了安全,会做SSL pinning(证书绑定),也就是说它不认系统证书,只认自己打包进来的证书。这种情况下就算你装了Charles证书也没用,App会直接拒绝连接,报Connection refused。
解决办法是绕过SSL pinning。如果你有App的测试包,可以用工具处理。比如Android可以用JustTrustMe这个Xposed模块,或者用Frida注入脚本。举个Frida的例子:
保存成js文件,用frida -U -f com.your.app.package -l bypass-ssl-pinning.js 启动。这样就能绕过常见的OkHttp和系统级的证书校验。
iOS的话类似,可以用trustKit或者修改dylib,但需要越狱或者用自己的证书重签App,比较麻烦。
还有一个可能是App用了Network Security Config(Android 7.0+)。它可以在xml里指定只信任系统证书,忽略用户安装的证书。这时候你需要反编译App的AndroidManifest.xml,看有没有networkSecurityConfig引用,然后去对应的xml文件里加一个debug允许用户证书的配置:
然后在AndroidManifest.xml里加上:
android:networkSecurityConfig="@xml/network_security_config"到application标签里。但注意这只能在debug包生效,线上包可能不会这么配。
最后检查Charles的SSL Proxying Settings。你得在Proxy → SSL Proxying Settings里添加你要抓的域名,比如 . 或者具体的 api.example.com。如果不加,Charles不会解密这些Host的流量,就会显示红叉。
总结一下排查顺序:
1. 手机和电脑网络通不通,代理设对没
2. Charles证书装了没,系统里信任了没
3. App有没有做SSL pinning
4. Android有没有Network Security Config限制
5. Charles的SSL Proxying有没有加对应域名
你可以先拿一个简单的测试App试试,比如官方文档里的demo,排除是不是目标App本身的问题。慢慢来,这种问题调通了之后就一通百通了。