Android 7.0解决抓取不到https请求的问题

本文介绍了解决Android 7.0系统中使用Charles无法抓取HTTPS请求的问题。通过配置network_security_config.xml文件并信任用户导入的证书,实现了抓包功能。适用于需要在Android 7.0设备上进行HTTPS请求抓包调试的开发者。
问题:Android7.0系统,使用charles不能抓取https请求

解决方法: 

1.在源码res目录下新建xml目录,增加network_security_config.xml文件

(工程名/app/src/main/res/xml/network_security_config.xml)
 
network_security_config.xml文件内容为:
复制代码
<network-security-config>
    <base-config cleartextTrafficPermitted="true">

        <trust-anchors>
            <certificates src="system" overridePins="true" />
            <certificates src="user" overridePins="true" />
        </trust-anchors>

    </base-config>

</network-security-config>
复制代码

 

 
说明:certificates说明的src=“system"表示信任系统的CA证书,src=“user"表示信任用户导入的CA证书
 

2.修改项目的AndroidManifest.xml文件,在application中增加android:networkSecurityConfig="@xml/network_security_config"

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

 

说明:android:networkSecurityConfig的值指向的就是上一步创建的xml文件
 
3.然后再打包安装apk即可
前提手机已经要安装了fiddler等CA证书哈
 

问题原因:

Android7系统,默认不信任用户导入的CA证书,所以需要配置文件,来信任用户导入的证书
 
 
参考文档:
https://www.charlesproxy.com/documentation/using-charles/ssl-certificates/
<think>我们被要求使用Charles Proxy抓取小程序请求,特别是微信小程序。 根据引用内容,我们需要配置Charles的代理设置,安装证书,并确保手机信任该证书。 但需要注意的是,高版本Android7.0+)对用户安装的证书默认不信任,我们需要特殊处理。 此外,微信小程序可能还有额外的安全机制。 步骤: 1. Charles基础配置(设置代理端口,启用SSL代理) 2. 手机代理配置(设置代理指向运行Charles的电脑) 3. 在手机上安装Charles根证书 4. 针对高版本Android系统,可能需要将证书安装为系统证书(需要root)或使用其他方法 5. 配置Charles的SSL Proxy Settings,添加需要抓取的域名(或者使用*:*抓取所有,但可能有安全风险) 6. 启动小程序并抓包 详细步骤: </think>### 使用Charles Proxy抓取小程序请求的详细方法 #### **一、基础环境配置** 1. **Charles基础设置** - 打开 Charles → `Proxy` → `Proxy Settings` - 勾选 `Enable HTTP Proxy` - 设置端口(默认`8888`)→ 点击 **Apply** [^1] ```mermaid graph LR A[Proxy菜单] --> B[Proxy Settings] B --> C[Enable HTTP Proxy] C --> D[设置端口8888] ``` 2. **启用SSL代理** - `Proxy` → `SSL Proxying Settings` - 勾选 `Enable SSL Proxying` - 添加域名规则:`*:*`(抓取所有HTTPS请求)或指定域名(如 `*.servicewechat.com`)[^2] --- #### **二、手机端操作** 1. **代理配置** - 手机连接与PC**同一Wi-Fi** - Wi-Fi高级设置 → 代理选 **手动** - 主机名:`电脑IP`(Charles顶部菜单 `Help` → `Local IP Address` 查看) - 端口:`8888` 2. **安装Charles证书** - 手机浏览器访问:`http://chls.pro/ssl` - 下载 `Charles Proxy CA` 证书 - **Android**: - 设置 → 安全 → 安装证书 → 选择下载的文件 - **Android 7+ 额外步骤**:需Root后将证书移至 `/system/etc/security/cacerts/`[^3] - **iOS**: - 安装描述文件 → `设置` → `通用` → `关于` → `证书信任设置` → 启用Charles证书 --- #### **三、解决小程序抓包问题** 1. **高版本Android兼容** - 若抓不到HTTPS请求: - 使用低版本Android设备(<7.0)[^3] - 或Root后执行: ```bash adb push charles-cert.pem /system/etc/security/cacerts/ adb shell chmod 644 /system/etc/security/cacerts/charles-cert.pem ``` 2. **绕过微信安全机制** - 关闭微信后重新启动 - 首次打开小程序时确保Charles已在抓包状态 --- #### **四、验证抓包结果** 1. 手机打开目标小程序 2.Charles中观察请求: - 成功捕获:显示具体请求(如 `https://servicewechat.com/...`) - 失败标志:显示 `Tunnel to...` 或 `Unknown` - 检查证书是否信任 - 确认SSL代理规则包含 `*:*` > ✅ **成功示例**: > ``` > GET https://miniapp.example.com/api/data > HTTP/1.1 200 OK > { "data": [...] } > ``` --- #### **五、高级技巧** 1. **过滤请求** - `Proxy` → `Recording Settings` → `Include` 中添加小程序域名 2. **映射本地文件** - `Tools` → `Map Local` → 将线上请求映射到本地JSON(调试用) 3. **断点调试** - 右键请求 → `Breakpoints` → 修改请求/响应数据 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值