> 技术文档 > Charles 无法抓取 Android 7 及以上手机 HTTPS 协议的深度解析与解决方案_android 7 以上 charles

Charles 无法抓取 Android 7 及以上手机 HTTPS 协议的深度解析与解决方案_android 7 以上 charles

在移动应用开发与测试过程中,网络抓包工具是我们排查问题、分析数据交互的重要助手。Charles 作为一款功能强大的抓包工具,广泛应用于 iOS 和 Android 平台。然而,不少开发者和测试人员在使用 Charles 抓取 Android 7 及以上版本手机的 HTTPS 协议时,遇到了抓包失败的情况。本文将深入探讨这一问题的根源,详细分析 Android 7 及以上系统在网络安全配置方面的区别,并提供切实可行的解决方案。​

一、Charles 抓包 HTTPS 的基本原理​

在理解问题之前,我们需要先了解 Charles 抓取 HTTPS 流量的基本原理。当手机与 Charles 代理服务器连接后,Charles 会作为中间人,在客户端(手机)和服务器之间建立安全连接。具体来说,Charles 会生成一个自签名的 CA 证书,手机安装该证书后,当手机向服务器发起 HTTPS 请求时,会将 Charles 的 CA 证书视为可信证书,从而允许 Charles 拦截并解密 HTTPS 流量,实现对加密数据的抓取和分析。

二、Android 7,8,9 网络安全配置差异对比

自 Android 7(24)发布以来,Google 对网络安全策略进行了重大调整,其中最核心的变化是引入了 ** 网络安全配置(Network Security Configuration)** 机制。这一机制允许开发者通过 XML 文件精细控制应用的网络行为,包括信任的证书颁发机构(CA)、明文流量限制等。对于 Charles 这类抓包工具而言,这一变化直接导致其默认的中间人代理模式在 Android 7 + 设备上失效,尤其是在处理 HTTPS 请求时候,下面是不同系统配置文件,

Android7 ~8.1 引入网络安全配置,默认不信任用户 CA 证书

     

**仅信任系统 CA,用户 CA 被排除

Android 9(API 28):HTTPS 的全面强制化

         example.com 

**禁止明文流量(cleartextTrafficPermitted=\"false\"),进一步限制信任范围

三 配置应用的网络安全配置文件(开发者角度)​

如果您是应用开发者,可以通过配置网络安全配置文件,允许应用信任用户 CA 证书,从而使得 Charles 能够抓取该应用的 HTTPS 流量。以下是具体步骤:​

  1. 创建网络安全配置文件​
  2. 在项目的res/xml/目录下创建一个新的 XML 文件,例如network_security_config.xml
      

​其中,表示允许信任用户安装的 CA 证书,表示信任系统 CA 证书,cleartextTrafficPermitted=\"true\"表示允许明文流量(根据需求可设置为 false)。​

3 在 AndroidManifest.xml 中引用配置​

​4 重新编译和安装应用​

 完成配置后,重新编译应用并安装到手机上,此时应用将按照网络安全配置文件的设置,信任用户安装的 Charles CA 证书,从而可以被 Charles 抓取 HTTPS 流量。

四 写在最后

 在日常测试工作中,为了保证外发版本安全性,这种修改几乎不做,如果为了测试接口功能,会使用iOS系统或者Android6系统手机。

~欢迎同行交流学习

摄影论坛