Android 7.0 之后抓包 Charles 手机配置证书后仍报: SSLHandshake: Received fatal alert: certificate_unknown

本文介绍了解决安卓7及以上版本系统中因安全策略调整导致的抓包失败问题。通过配置network_security_config.xml文件信任用户添加的CA证书,并在AndroidManifest.xml中指定配置路径。

Client SSL handshake failed: An unknown issue occurred processing the certificate (certificate_unknown) 

æå失败

安卓7之后调整了安全策略会导致部分手机抓包失败,请参考官网方法:

https://developer.android.google.cn/training/articles/security-config

其中 用于调试较安全的配置CA[证书颁发机构]方式为:

1 res/xml/network_security_config.xml

<!-- Trust user added CAs while debuggable only -->
<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
    <debug-overrides>
        <trust-anchors>
            <certificates src="user"/>
        </trust-anchors>
    </debug-overrides>
</network-security-config>

2  清单文件里添加

<?xml version="1.0" encoding="utf-8"?>
<manifest ... >
    <application android:networkSecurityConfig="@xml/network_security_config"
                    ... >
        ...
    </application>
</manifest>

 

### Charles 抓包SSL 握手失败问题的解决方案 在使用 Charles 抓取 HTTPS 数据包时,如果出现 `SSLHandshake: Received fatal alert: certificate_unknown` 错误,通常是因为客户端无法信任 Charles 的自签名证书。以下是解决该问题的详细方法: #### 1. 确保正确安装 Charles 证书 确保设备上已正确安装 Charles 的根证书,并且浏览器或应用程序能够识别并信任该证书。具体步骤如下: - 在 Charles 中生成并导出证书。 - 将证书安装到目标设备的信任存储中[^1]。 #### 2. 配置 Android 应用的安全策略 对于 Android 应用,从 Android 7.0(API 级别 24)开始,默认情况下应用会忽略用户安装的 CA 证书。为了解决此问题,需要在应用的 `AndroidManifest.xml` 文件中添加网络安全配置文件的引用[^3]: ```xml <manifest ... > <application android:networkSecurityConfig="@xml/network_security_config" ... > </application> </manifest> ``` 同时,在 `res/xml/network_security_config.xml` 文件中定义以下内容以信任用户安装的证书[^4]: ```xml <?xml version="1.0" encoding="utf-8"?> <network-security-config> <base-config> <trust-anchors> <certificates src="user" /> <certificates src="system" /> </trust-anchors> </base-config> </network-security-config> ``` #### 3. 针对特定域名的信任配置 如果只需要抓取特定域名的数据包,可以在 `network_security_config.xml` 中定义 `domain-config`,仅对该域名启用用户证书信任[^5]: ```xml <?xml version="1.0" encoding="utf-8"?> <network-security-config> <domain-config> <domain includeSubdomains="true">example.com</domain> <trust-anchors> <certificates src="user" /> </trust-anchors> </domain-config> </network-security-config> ``` #### 4. 解决 Python 程序中的 SSL 证书验证问题 如果在 Python 程序中遇到类似的 SSL 证书验证失败问题,可以尝试以下方法[^2]: - 忽略 SSL 验证(仅用于测试环境): ```python import ssl import urllib.request ssl._create_default_https_context = ssl._create_unverified_context response = urllib.request.urlopen('https://example.com') print(response.read()) ``` - 或者将 Charles证书导出并添加到程序的信任链中。 #### 5. 检查网络代理设置 确保设备的网络代理设置正确指向 Charles,并且 Charles 已启用 SSL 代理功能。可以在 Charles 的 `Proxy` -> `SSL Proxying Settings` 中添加需要抓取的域名。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值