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
内容如下
<?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文件里同样要配置。
<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已经变成可以看到抓包内容了。
资料参考:
原文地址:https://blog.csdn.net/Kongou/article/details/144088848
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!