Android 使用Charles抓包显示Unknown

最近开发的一个功能需要抓包验证一下网络请求的结果。

但是在配置完Charles的证书代理等设置后,抓包时显示Unknown。

在网上查了半天资料和文章,最终解决了问题。

以下是在调试抓包环境中遇到的一些问题和解决方法。

1、手机证书的安装

Charles在Mac电脑端的配置大部分网上都有教程,这里不过多介绍,只简单说一下。

在Charles的Mac电脑端要配置端口号和查看本地的IP地址,把IP地址和端口号在手机的WLAN选项里进行代理设置。代理设置为手动。

同时把证书安装在mac电脑上并且在mac电脑的系统设置里要把Charles的证书的所有设置修改为一直信任(Always trust)。

在mac电脑设置完成后,下一步就是在android手机上下载安装Charles的CA证书。

这一步问题最多。

我的华为手机系统自带的浏览器,使用Charles推荐的方法在浏览器输入chls.pro/ssl去下载时,下载不了。

所以我推荐大家在mac电脑上使用Charles把证书Save到电脑本地,在通过邮件的方式最终下载到手机里。

Charles证书在保存时,可以选择pem格式或cer格式。这两种大家最好都下载并传到手机。

因为不同的手机可能对格式要求不一样。

我自己最终不仅把pem格式和cer格式都安装了,同时还把这两个文件都改名成了crt后缀又安装一遍。

在安装时,在华为手机的设置里找到安全->更多安全设置->加密和凭据->从存储设备安装

到这一步会看到页面里有CA证书和WLAN证书。我最后是把这两个全部都安装了,安装CA证书时需要输入一下开机密码。这两个证书安装的内容是一样的,都是从Mac电脑里Charles保存的证书文件。

安装CA证书到这一步就完成了,可以说把能装的证书都装了一遍。

2、Android项目的抓包权限配置

这一步尤为重要。在android 7.0以上的版本,想要让app支持抓包需要在app的网络安全配置文件里进行特殊设置。

文件名一般是network_security_config.xml

内容如下

Kotlin 复制代码
<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
<base-config cleartextTrafficPermitted="true"/>
<debug-overrides>
    <trust-anchors>
        <certificates
            overridePins="true"
            src="system" />
        <certificates
            overridePins="true"
            src="user" />
    </trust-anchors>
</debug-overrides>
</network-security-config>

大家可以检查一下自己的项目里是否有这个文件,没有的话在项目的xml目录下创建一个就可以。

代码里的内容已经是支持debug抓包模式的代码了。大家直接复制粘贴就可以。

需要注意的是,这个文件配置里写的是debug-overrides,所以在打包时,也要检查打包的buildtype里debuggable要设置成true。

文件设置改好之后,在manifest文件里同样要配置。

Kotlin 复制代码
<application
        android:name="myproject"
        android:allowBackup="@bool/allow_backup"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_label"
        android:networkSecurityConfig="@xml/network_security_config"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme"
        android:allowNativeHeapPointerTagging="false"
        tools:replace="android:name,android:allowBackup,android:label,android:networkSecurityConfig">

在manifest文件里配置好后,抓包配置就可以生效了。

以上2个步骤完成后,我的华为手机从抓包显示unknown已经变成可以看到抓包内容了。

资料参考:

在MAC上使用Charles抓包HTTPS链接

Android Charles抓包失败

相关推荐
狂浪天涯1 小时前
Android 16 显示系统 | 从View 到屏幕系列 - 7 | SurfaceFling Commit
android
_祝你今天愉快1 小时前
HashMap 底层原理 (JDK 1.8 源码分析)
android·java·后端
尘云逸2 小时前
将开发的软件安装到手机:环境配置、android studio设置、命令行操作
android·react native·adb·智能手机·gradle·android studio·android-studio
AirDroid_cn3 小时前
手机防沉迷新招:安卓手机如何成为管理iPhone的遥控器?
android·ios·智能手机·iphone·ipad
狂浪天涯4 小时前
Android 16 显示系统 | 从View 到屏幕系列 - 6 | 提交 GraphicBuffer 到 SurfaceFlinger
android·架构
来来走走4 小时前
Flutter开发 StatelessWidget与StatefulWidget基本了解
android·flutter
清霜之辰5 小时前
Android 区块链 + CleanArchitecture + MVI 架构实践
android·架构·区块链·mvi·architecture·clean
深盾安全7 小时前
Android SO导出符号的深度解析与安全防护指南
android
顾林海8 小时前
Android安全防护:Runtime 调试检测与反制手段
android·安全·面试
什么半岛铁盒8 小时前
MySQL 约束知识体系:八大约束类型详细讲解
android·数据库·mysql