转载--Android7.0 和 Charles 的抓包 出现无法抓包unknown和证书无效

针对Android7.0以上系统在Mac版Charles抓包遇到的问题,提供了一套解决方案,涉及创建network_security_config.xml配置文件,添加信任证书,并在AndroidManifest.xml中指定网络安全配置。

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

关于android手机在mac版charles上抓不到包这个问题困扰了很久,查阅了很多资料,发现是android7.0系统安全策略问题。

安卓7.0以上系统按照网上的教程安装后仍提示unkonw,这时候需要去看看代码

步骤如下:

1.在项目res目录下新增一个文件夹,命名xml,并且新建一个xml文件,可以命名为network_security_config.xml(其实。名字可以顺便命名,对应就行)

è¿éåå¾çæè¿°

2.network_security_config.xml 里面添加内容:

<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
    <domain-config>
        <domain includeSubdomains="true">请求域名</domain>
        <trust-anchors>
            <certificates src="@raw/证书名称"/>
        </trust-anchors>
    </domain-config>
</network-security-config>

PS:请求域名 - 为你项目请求接口所用到的域名 
证书名称 - 为上面提到的第二点在charles里面点击”Save Charles Root Certificate..”(路径: Help - SSL Proxying -Save Charles Root Certificate.. )

3.把证书放进res/raw 目录下 ,如果没有此目录,需要新建

è¿éåå¾çæè¿°

ps:此时文件名称应当和上面提到的network_security_config.xml 文件里面证书名称对应

4.在AndroidManifest.xml文件需要加入以下配置: 

è¿éåå¾çæè¿°

android:networkSecurityConfig="@xml/network_security_config"


大功告成,配置完成即可抓包。

温馨提示: 抓到看到乱码也是证书导致的

 

注意:上述添加的代码可能会导致安卓端生产app覆盖安装后,必须开代理才请求数据,不开代理,无任何数据展示!!!


原文:https://blog.csdn.net/u011045726/article/details/76064048 
版权声明:本文为博主原创文章,转载请附上博文链接!


 

### 解决 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、付费专栏及课程。

余额充值