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抓包失败

相关推荐
鲤籽鲲6 小时前
C# 内置值类型
android·java·c#
工程师老罗7 小时前
我用AI学Android Jetpack Compose之Kotlin篇
android·kotlin·android jetpack
工程师老罗7 小时前
我用AI学Android Jetpack Compose之入门篇(2)
android·android jetpack
工程师老罗12 小时前
我用AI学Android Jetpack Compose之理解声明式UI
android·ui·android jetpack
锋风Fengfeng13 小时前
安卓Activity执行finish后onNewIntent也执行了
android
tmacfrank13 小时前
Jetpack Compose 学习笔记(四)—— CompositionLocal 与主题
android·kotlin·android jetpack
且随疾风前行.13 小时前
重学 Android 自定义 View 系列(十):带指针的渐变环形进度条
android
网安墨雨15 小时前
[网络安全]DVWA之File Upload—AntSword(蚁剑)攻击姿势及解题详析合集
android·安全·web安全
Clockwiseee15 小时前
文件上传题目练习
android·服务器·安全·网络安全
_明川16 小时前
Android 性能优化:内存优化(实践篇)
android·性能优化