7.0以上系统Charles无法抓取https接口的解决方案

现象

    Android 7.0及以上系统在即使安装过证书的情况下,抓取https接口会出现:Client SSL handshake failed: An unknown issue occurred processing the certificate (certificate_unknown)问题,证书无效,导致https接口数据抓取失败问题。

原因

      在Android7.0及以上的系统中,每个应用可以定义自己的可信CA证书集。但默认情况下,应用只会信任系统预装的CA证书,而不会信任用户安装的CA证书。通过Charles安装的证书恰恰正属于用户安装的CA证书,因此会被视作不安全的证书。导致出现上面的证书不可信问题

解决方法

   如果只抓取自己项目APP的https接口,可以在项目中添加自定义CA配置,允许用户安装的CA证书可信:

  1、在res/xml目录下新建network_security_config.xml,内容如下:

<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
    <debug-overrides cleartextTrafficPermitted="true">
        <trust-anchors>
            <!--信任所有的系统证书-->
            <certificates src="system" />
            <!--信任所有用户安装的证书-->
            <certificates src="user" />
        </trust-anchors>
    </debug-overrides>
</network-security-config>

    2、在manifest.xml的application标签中添加如下配置:

android:networkSecurityConfig="@xml/network_security_config"

    3、正常安装charles证书,连接代理即可。   

如果需要抓取其它APP的https接口(手机需要Root):

     这个方式的原理是把用户安装的证书复制到手机的系统证书目录下,当成系统证书来用,所以:

      需要手机Root!

      需要手机Root!

      需要手机Root!

    1、手机root。

    2、找到手机上下载的charles证书,导出到PC上并获取此证书的Hash值:

         打开命令行工具,执行命令:

         openssl x509 -subject_hash_old -in 证书路径 

    3、将证书文件重命名为 hash值.0的格式,如: 1c20342s.0。(注意不要带后缀名)。

    4、将重命名好的证书通过adb push/sdcard/Download,然后将其复制到/system/etc/security/cacerts/。

    如果出现了 Read-only file system的错误,说明系统文件夹是只读的,无法修改,执行以下操作将系统文件挂载为可读写:

adb root remount

adb shell 

su

mount -o rw,remount /

    就可以正常复制文件了,复制好后将文件权限更改为644,并重启设备,之后就可以抓https接口数据了。

     

 

 

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 8
    评论
以下是在安卓7.0以上版本上使用Charles进行抓包的步骤[^1]: 1. 在Windows上安装Charles:首先,您需要在Windows上安装Charles。您可以从Charles官方网站下载并安装Charles。 2. 配置CharlesHTTPS抓包功能:在Charles中,您需要配置HTTPS抓包功能,以便能够捕获和查看HTTPS请求和响应。以下是配置HTTPS抓包功能的步骤: - 打开Charles并导航到“Proxy”菜单,然后选择“SSL Proxying Settings”。 - 在“SSL Proxying”选项卡中,单击“Add”按钮。 - 在“Location”字段中,输入要抓取的域名或URL的模式。例如,如果您想抓取所有的HTTPS请求和响应,可以输入“*”。 - 单击“OK”保存设置。 3. 安装Charles证书:为了能够捕获和解密HTTPS流量,您需要在安卓设备上安装Charles证书。以下是安装Charles证书的步骤: - 在安卓设备上打开浏览器,并访问http://chls.pro/ssl。 - 下载并安装Charles证书。 - 在安卓设备的设置中,导航到“安全性和隐私”或“安全”选项。 - 选择“凭据存储”或“受信任的凭据”。 - 选择“安装从存储设备安装的凭据”。 - 选择下载的Charles证书文件并安装。 4. 配置安卓设备的代理:为了将安卓设备的流量导向Charles,您需要配置设备的代理设置。以下是配置代理设置的步骤: - 在安卓设备的设置中,导航到“Wi-Fi”或“网络和互联网”选项。 - 长按您当前连接的Wi-Fi网络,并选择“修改网络”或“网络设置”。 - 在高级选项中,选择“代理”。 - 选择“手动”代理设置。 - 输入您计算机的IP地址和Charles的代理端口(默认为8888)。 - 保存设置并重新连接Wi-Fi网络。 5. 使用Charles进行抓包:现在,您已经完成了所有必要的设置,可以开始使用Charles进行抓包了。以下是使用Charles进行抓包的步骤: - 在Windows上打开Charles,并确保代理服务器正在运行。 - 在安卓设备上打开您想要抓包的应用程序。 - 在Charles中,您应该能够看到安卓设备的流量,并可以查看请求和响应的详细信息。 请注意,使用Charles进行抓包可能涉及到违反隐私和安全规定的行为。请确保您在合法和合适的情况下使用Charles进行抓包。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值