安卓7.0+版本Charles抓https显示unknown

本文介绍了在Android 7.0及以上版本中,由于系统不再信任用户证书导致Charles抓https显示unknown的问题。解决方案包括修改网络安全配置,将Charles证书放入项目资源文件,并在AndroidManifest.xml中配置。另外,也提到了尝试通过root手机并将证书添加到系统分区,但作者未能成功,推荐参考其他教程完成。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

安卓7.0+版本Charles抓https显示unknown

Android7.0+系统,应用程序不再信任用户证书,抓包遇到了点问题,记录一下解决方案。

1. 开发更改网络安全配置

官方文档:Andriod开发者-网络安全配置

  1. 在项目res/raw目录(没有raw目录就新建)放入Charles证书,假设名称为:charles.pem

  2. 在项目res/xml目录(没有xml目录就新建)新建一个xml文件,比如:network_security_config.xml

  3. network_security_config.xml文件添加内容

    <?xml version="1.0" encoding="utf-8"?>
    <network-security-config>
        <domain-config>
            <domain includeSubdomains="true">sample.com</domain>
            <trust-anchors>
                <certificates src="@raw/my_ca"/>
            </trust-anchors>
        </domain-config>
    </network-security-config>
    

    sample.com:项目访问接口所用域名
    my_ca:证书名称,如:charles

  4. 在AndroidManifest.xml文件需

### 解决 Charles 包时出现 Unknown 并且网页无法显示的问题 当遇到 Charles 包过程中出现未知 (Unknown) 的情况以及网页无法正常加载的现象,通常是因为 SSL/TLS 加密流量未被正确解码或客户端未能信任 Charles 生成的根证书。 #### 安装并信任 Charles 根证书 对于 Mac 端设备而言,应当通过点击 Charles 菜单栏的帮助选项 `Help` -> `SSL Proxying` -> `Install Charles Root Certificate` 来安装 CA 证书[^1]。这一步骤确保操作系统能够识别由 Charles 创建的安全连接。 #### 配置 SSL 代理设置 在 Charles 中进入菜单项 `Proxy` -> `SSL Proxying Settings`,在此处添加需要监控的目标域名及其对应的端口号作为新的条目[^2]。此操作允许 Charles 对指定站点实施中间人攻击来拦截 HTTPS 流量。 针对 Android 设备特别是版本号大于等于7.0的情况下,除了上述步骤外还需要额外处理应用层安全策略: - 在应用程序源代码目录下的 res/xml 文件夹内创建名为 `network_security_config.xml` 的 XML 文档[^3]: ```xml <?xml version="1.0" encoding="utf-8"?> <network-security-config> <!-- 允许用户自定义的信任库 --> <debug-overrides> <trust-anchors> <certificates src="user"/> </trust-anchors> </debug-overrides> <!-- 或者更宽松的方式适用于所有网络请求 --> <!--<base-config cleartextTrafficPermitted="true">--> <!--<trust-anchors>--> <!--<certificates src="system"/>--> <!--<certificates src="user"/>--> <!--</trust-anchors>--> <!--</base-config>--> <!-- 如果仅需对特定域启用,则可以采用 domain-config 方式 --> <domain-config cleartextTrafficPermitted="true"> <domain includeSubdomains="true">example.com</domain> <trust-anchors> <certificates src="system"/> <certificates src="user"/> </trust-anchors> </domain-config> </network-security-config> ``` 最后记得更新 AndroidManifest.xml 添加对该配置文件的支持: ```xml <application android:networkSecurityConfig="@xml/network_security_config" ... > ... </application> ``` 完成以上更改后重新编译运行项目即可让 Charles 成功捕获到加密后的 HTTP 请求响应数据流而不显示unknown,并能正常展示页面内容。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值