为什么我的Charles配置好了却抓不到手机的HTTPS请求? UE丶玉宁 提问于 2026-02-10 15:06:31 阅读 16 工具 我按教程配置了Charles的HTTPS代理,手机也设置了代理并安装了证书,但访问App时请求还是显示“Connection refused”。 /* 我在App的WebView里看到的错误样式 */ .error { color: red; } 网页请求能抓到,App的请求却全都是红叉,证书里也勾选了对应App包名,到底哪里出问题了? Charles抓包调试 我来解答 赞 6 收藏 分享 生成中... 手机扫码查看 复制链接 生成海报 反馈 发表解答 您需要先 登录/注册 才能发表解答 2 条解答 雅涵 Dev Lv1 大概率是App用了SSL Pinning防抓包,这种安全机制会校验证书链,Charles的证书过不了验证。你得用Frida或者Objection绕过Pinning,像这样安装个Objection: pip3 install objection 然后运行 objection explore 再试下抓包。我之前也被坑过好几次,现在遇到HTTPS抓不到基本都是这原因。 回复 点赞 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本身的问题。慢慢来,这种问题调通了之后就一通百通了。 回复 点赞 5 2026-02-10 15:14 加载更多 相关推荐 1 回答 65 浏览 Charles SSL证书配置后iOS设备请求显示证书错误怎么办? 在用Charles抓iOS设备的HTTPS请求时,虽然已经在设置里启用了SSL Proxy并信任了Charles证书,但每次请求都弹出"证书无效"的错误。之前测试HTTP请求没问题,换成HTTPS就报... 希玲 工具 2026-02-04 12:44:33 1 回答 53 浏览 Burp Suite配置HTTPS抓包一直拦截不到请求怎么办? 在用Burp测试网站时,配置了代理和安装CA证书后,HTTP请求能正常拦截,但HTTPS请求就是进不去拦截器,浏览器还提示证书不受信任。我试过清浏览器缓存、重装证书、换8080/8090端口都不行,B... 松奇 安全 2026-02-03 17:13:34 1 回答 31 浏览 Charles证书安装后手机浏览器仍显示不安全怎么办? 刚用Charles抓手机微信网页版的请求,按教程安装了Charles CA证书,手机显示安装成功。但打开微信里的测试网站时还是提示证书不信任,红色感叹号警告。已经试过清除缓存、重启手机和Charles... 光磊(打工版) 前端 2026-02-14 18:39:25 2 回答 13 浏览 Charles代理下,为什么iOS设备的请求URL路径被自动修改了? 用Charles抓小程序的接口请求时,iOS真机调试发现所有请求的URL前面被自动加上了"/charles/proxy"前缀,导致404错误。已经正确安装SSL证书并勾选了映射本地文件功能,重启设备和... 沐希 ☘︎ 前端 2026-02-13 20:50:25 2 回答 20 浏览 设置了Secure标志的Cookie为什么在HTTPS页面读取不到? 我按照文档配置了服务器返回的Cookie携带Secure标志,但发现HTTPS页面始终无法通过document.cookie获取到该Cookie。明明在开发者工具的Network标签里看到响应头确实有... 博主雨涵 安全 2026-02-12 11:59:48 2 回答 25 浏览 Charles反向代理配置后请求被拦截怎么办? 用Charles设置反向代理把localhost:8080映射到第三方接口,但请求还是走的原始地址,Proxy设置已经开启SSL拦截了 按官方教程配置了映射规则:请求URL: /api/* 反向URL... 程序员志鸽 工具 2026-02-06 20:15:25 2 回答 35 浏览 Charles DNS Spoofing设置后接口请求没被劫持怎么办? 在React项目开发时用Charles配置了DNS Spoofing,想拦截测试环境接口,但发现请求还是走的原地址。已经确认手机和电脑在同一网络,证书也安装了,规则里写了.*api.test.com,... 秀丽 工具 2026-02-03 22:31:26 1 回答 33 浏览 Fiddler抓不到HTTPS请求的响应内容怎么办? 用Fiddler调试时发现,发给https://api.example.com的请求在会话里显示为空响应体,明明已经安装了证书。 我写了个测试页面用fetch调用接口:<pre class=&q... A. 新利 前端 2026-01-26 01:25:29 1 回答 34 浏览 Charles录制时Post请求的响应数据怎么没显示? 用Charles抓包调试接口时发现,发送的Post请求在Recording里能看到请求头和参数,但响应数据栏一直是空的。 我用fetch发送的POST请求是这样的: fetch('/api/... Top丶利云 工具 2026-02-15 21:58:25 1 回答 35 浏览 为什么我的HTTPS页面加载时显示Mixed Content错误? 我在开发一个HTTPS网站时,发现用JavaScript请求HTTP接口会报Mixed Content错误。明明服务器已经配置了SSL证书,为什么还是不行? 比如这个请求代码: fetch('... UX栾同 前端 2026-02-15 19:59:29
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本身的问题。慢慢来,这种问题调通了之后就一通百通了。