[Android] 7.0以上Android手机连接Charles无法抓取HTTPS请求的坑

本文介绍了Android 7.0及以上版本设备在使用Charles抓取HTTPS请求时遇到的问题,主要原因是证书信任。解决方案是在AndroidManifest.xml中添加networkSecurityConfig,参考res/xml/目录下的网络安全配置文件,详细文档可查看Android官方文档。

    配置Charles抓取HTTPS的方法就不说了,网上一搜一大堆,无非是配置下证书,打开下SSL代理连接。最近业务开发需要抓取HTTPS请求,按照网上的教程在自己的华为P9(Android O)上一顿配置diao用没有,然而同组小哥的乐视就可以,一顿查之后发现是Android N之后证书信任的问题。

从Android Nougat(7.0)开始,谷歌改变了网络安全策略。
自签的CA证书将默认不被TLS/SSL连接信任,这意味着HttpCanary可能无法抓取HTTPS的明文数据。

解决方法:

在项目的AndroidManifest.xml中添加networkSecurityConfig:

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

network_security_config文件放在 res/xml/ 目录下面:

<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
    <base-config cleartextTrafficPermitted="true">
        <trust-anchors>
            <certificates src="system" />
  
<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` → 修改请求/响应数据 ---
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值