Android设备配置Charles代理后出现网络连接丢失问题
解决Android 8.0(S8)上Charles代理网络丢失问题
针对你遇到的问题,核心原因是Android 8.0(API 26)引入了证书信任机制的变更:用户手动安装的CA证书默认不再被系统应用和绝大多数第三方应用信任,这就导致你配置了代理后,应用无法通过Charles的证书建立安全连接,最终出现网络丢失的情况。下面是具体的解决方案,你可以根据自己的情况选择:
方案1:将Charles证书安装为系统证书(需要Root权限)
如果你的S8已经获取Root权限,这是最彻底的解决方式,所有应用都会信任Charles的证书:
- 在Charles中导出根证书:点击
Help -> SSL Proxying -> Save Charles Root Certificate,选择PEM格式保存到电脑。
- 在Charles中导出根证书:点击
- 计算证书的哈希值:使用命令
openssl x509 -inform PEM -subject_hash_old -in charles.pem | head -1,得到一个8位的哈希值(比如9a5ba575)。
- 计算证书的哈希值:使用命令
- 重命名证书:把刚才导出的PEM文件重命名为
[哈希值].0(比如9a5ba575.0)。
- 重命名证书:把刚才导出的PEM文件重命名为
- 将证书推送到设备:通过ADB命令
adb push 9a5ba575.0 /system/etc/security/cacerts/,然后修改权限adb shell chmod 644 /system/etc/security/cacerts/9a5ba575.0。
- 将证书推送到设备:通过ADB命令
- 重启设备,之后所有应用都会信任Charles的证书,代理网络即可正常使用。
方案2:针对自定义应用配置网络安全策略(无需Root)
如果你只是需要调试自己开发的应用,可以通过配置应用的网络安全规则来信任用户安装的证书:
- 在应用的
res/xml目录下创建network_security_config.xml文件,内容如下:
- 在应用的
<?xml version="1.0" encoding="utf-8"?> <network-security-config> <base-config> <trust-anchors> <!-- 信任系统默认证书 --> <certificates src="system" /> <!-- 信任用户安装的证书 --> <certificates src="user" /> </trust-anchors> </base-config> </network-security-config>
- 在
AndroidManifest.xml的application标签中添加引用:
- 在
<application ... android:networkSecurityConfig="@xml/network_security_config"> ... </application>
重新编译安装应用后,该应用就会信任你安装的Charles证书,代理可以正常工作。
额外排查点
除了证书信任问题,你还可以检查以下内容:
- 确认你的S8和运行Charles的电脑处于同一局域网,并且电脑的防火墙没有阻止Charles的端口(默认8888)。
- 在Charles中检查
Proxy -> Access Control Settings,确保已经添加了你的S8设备IP地址,允许设备连接。 - 再次核对WiFi代理设置:主机名是电脑的局域网IP,端口是Charles的监听端口(默认8888),没有填写错误。
内容的提问来源于stack exchange,提问作者John Smith
相关产品推荐
相关产品推荐

