最近用 Charles 给安卓设备抓包,结果一直报SSLException: Connection reset,看不到任何数据内容。之前跟着教程装了证书、开了 SSL 代理,手机和电脑也在同一网络,常规操作都检查了,问题却始终没解决。
一、先走常规排查:排除常见坑
一开始以为是证书或配置出了问题,按流程重新核对了一遍:
确认安卓证书已装对,甚至尝试了将用户证书转为系统证书(非 root 场景也加了网络安全配置);
Charles 里也勾了
Enable SSL Proxying,手动添加了代理规则;手机 Wi-Fi 代理指向电脑 IP 和 Charles 默认端口
8888,网络连通性没问题。
但重试后,还是同样的连接重置报错,这时候才意识到,可能忽略了电脑本身的网络设置。
二、意外发现:关闭机场代理就好了
某天排查时,无意中关掉了电脑后台运行的机场代理(之前开着是为了访问境外网站),再重新启动 Charles 抓包 —— 居然成功了!TTPS 请求数据清晰显示,没有再出现 SSL 错误。
后来反复测试了两次:开机场代理,抓包必报错;关掉代理,抓包立刻正常。原来问题根源是电脑的机场代理和 Charles 代理冲突了 —— 机场代理会拦截电脑的网络请求,导致 Charles 无法正常建立与手机的 SSL 代理连接,最终触发连接重置。
三、解决步骤:两步搞定
关闭电脑上的机场代理:不管是系统代理开关,还是机场软件本身的 “全局代理”“自动代理”,都先关掉(可以暂时退出软件,避免后台运行);
重启 Charles 并重新抓包:关闭代理后,重启 Charles 让配置生效,再操作手机触发目标请求,就能正常抓取数据了。
总结
遇到 Charles 抓包 SSL 连接问题,别只盯着手机证书和软件配置,也看看电脑有没有开其他代理(比如机场、VPN)。这些代理会和 Charles 抢网络请求,导致代理链路异常,反而让简单问题变得复杂。先关掉多余代理,说不定问题就迎刃而解了。