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

本文介绍了解决Android 7.0设备在使用Charles进行抓包时遇到的问题的方法。通过修改项目的network_security_config.xml配置文件,并正确安装和引用证书,使Charles能够成功抓取HTTPS流量。

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

Android7.0 和 Charles 的抓包

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

Charles抓包正常流程

1.在手机上配置证书

点击后:直接在手机浏览器输入: chls.pro/ssl
ps:最好用UC浏览器 华为自带浏览器会下载一个pem文件,会直接在手机上无法安装

2.在电脑上保存加密文件
这里写图片描述

ps:这个证书后面会用到

3.设置访问域名和端口
这里写图片描述

这里写图片描述

ps:大部分人会设置Host:* port:443 ;但是如果直接点击OK也是没有问题的

以上的步骤在随便一搜都可以找到的,但是,上面是针对ios和一部分android机子可行,android7.0的机子再去用charles抓包时候会出现一下情况:
各种unknown

这里写图片描述

此时此刻,把目光转移到代码上来,不管你在charles怎么配置都是无济于事的

步骤如下:

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"

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

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

转载于:http://blog.csdn.net/mrxiagc/article/details/75329629

### 解决 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,并能正常展示页面内容。
评论 29
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值