Android 7.0 以上 Charles 和 Fiddler 无法抓取 HTTPS 包的解决方式

Android 7.0 以上 Charles 和 Fiddler 无法抓取 HTTPS 包的解决方式

https://johnnyshieh.me/posts/android-7-capture-https-package/

发表于 2019-05-06 | 分类于 Android| 0| 阅读次数

最近升级了 targetSdkVersion 到 28 后发现在 Android 7.0 以上机型 Charles 抓取 https 包时显示找不到证书,但是 Android 6.0 机型还是可以正常抓包。原因是因为从 Android 7.0 开始,默认的网络安全性配置修改了,具体请阅读官方文档网络安全性配置

问题原因

Android 6.0(API 23)及更低版本应用的默认网络安全性配置如下:


1

2

3

4

5

6

7

8

9

<!-- 默认允许所有明文通信 -->

<base-config cleartextTrafficPermitted="true">

<trust-anchors>

<!-- 信任系统预装 CA 证书 -->

<certificates src="system" />

<!-- 信任用户添加的 CA 证书,Charles 和 Fiddler 抓包工具安装的证书属于此类 -->

<certificates src="user" />

</trust-anchors>

</base-config>

而在 Android 7.0(API 24)到 Android 8.1(API 27)的默认网络安全性配置如下:


1

2

3

4

5

6

7

<!-- 默认允许所有明文通信 -->

<base-config cleartextTrafficPermitted="true">

<trust-anchors>

<!-- 信任系统预装 CA 证书 -->

<certificates src="system" />

</trust-anchors>

</base-config>

而在 Android 9.0(API 28)及更高版本的默认网络安全性配置如下:


1

2

3

4

5

6

7

<!-- 默认禁止所有明文通信 -->

<base-config cleartextTrafficPermitted="false">

<trust-anchors>

<!-- 信任系统预装 CA 证书 -->

<certificates src="system" />

</trust-anchors>

</base-config>

对比很容易发现,在 Android 7.0(API 24)到 Android 8.1(API 27),默认不再信任用户添加的 CA 证书,所以也就不再信任 Charles 和 Fiddler 抓包工具的证书,所以抓取 HTTPS 包时才会失败。而且在 Android 9.0(API 28)及更高版本上,不仅默认只系统预装的 CA 证书,还默认禁止所有明文通信(不允许 http 请求)。

解决方式

所以解决该问题就需要应用信任 Charles 和 Fiddler 抓包工具的证书抓包工具即可。

最简单的解决方式是使用 Android 6.0 以下的网络安全性配置:

添加res/xml/network_security_config.xml:


1

2

3

4

5

6

7

8

9

<?xml version="1.0" encoding="utf-8"?>

<network-security-config>

<base-config cleartextTrafficPermitted="true">

<trust-anchors>

<certificates src="system" />

<certificates src="user" />

</trust-anchors>

</base-config>

</network-security-config>

然后在清单文件中指向该文件:


1

2

3

4

5

6

7

<?xml version="1.0" encoding="utf-8"?>

<manifest ... >

<application android:networkSecurityConfig="@xml/network_security_config"

... >

...

</application>

</manifest>

这种解决方式有一个安全风险:正式版的应用会有被他人抓包的风险。

如何只在调试模式下允许抓包呢?

使用<debug-overrides>即可实现只在android:debuggabletrue时才生效的配置:


1

2

3

4

5

6

7

8

9

10

<?xml version="1.0" encoding="utf-8"?>

<network-security-config>

<!-- 支持 Android 7.0 以上调试时,信任 Charles 和 Fiddler 等用户信任的证书 -->

<debug-overrides>

<trust-anchors>

<certificates src="system" />

<certificates src="user" />

</trust-anchors>

</debug-overrides>

</network-security-config>

网上有些解决方式是将 Charles 和 Fiddler 的证书添加到raw文件夹下的方式也可以,但是繁琐了点。

在 Android 9.0(API 28)以上允许部分 http 请求

最佳的解决方式肯定是全部使用 https 请求,安全性更高,如果有些请求或测试环境下还是需要使用 http 请求,需要在网络安全性配置添加白名单:


1

2

3

4

5

6

7

8

9

10

11

12

13

14

<?xml version="1.0" encoding="utf-8"?>

<network-security-config>

<!-- 支持 Android 9.0 以上使用部分域名时使用 http -->

<domain-config cleartextTrafficPermitted="true">

<domain includeSubdomains="true">sample.domain</domain>

</domain-config>

<!-- 支持 Android 7.0 以上调试时,信任 Charles 和 Fiddler 等用户信任的证书 -->

<debug-overrides>

<trust-anchors>

<certificates src="system" />

<certificates src="user" />

</trust-anchors>

</debug-overrides>

</network-security-config>

原文地址:https://www.cnblogs.com/cute/p/12185928.html

时间: 2024-10-23 16:09:28

Android 7.0 以上 Charles 和 Fiddler 无法抓取 HTTPS 包的解决方式的相关文章

手机通过Charles抓取https包

因为fiddler不能在mac上使用,而Charles是跨平台的,可以在mac上使用,所以需要了解一下Charles的使用 安装破解版Charles 下载破解版包,先启动一次未破解版的Charles,然后再替换包内容的java下的Charles.jar 破解版下载地址(如果不幸的又不能下载了,那就网上随便搜一个吧):http://download.csdn.net/download/m694449212/9770583 手机通过Charles抓取https 第一步:配置Charles,允许抓取h

MAC配置Charles,过滤筛选抓取https请求(证书安装完毕且设置信任后,https依然为unknown的原因)

MAC安装证书,设置为始终信任 Charles代理信息设置 Charles所在MAC的IP地址查看 手机安装证书 根据下图说明操作 vivo/iphone为例 Android&iphone手机设置代理 ①保证手机同mac连接的同一wifi ②在手机端wifi详情处选择配置代理:手动,IP:mac的IP(即Charles所在MAC的IP地址查看的结果)端口号8888 手机浏览器访问:chls.pro/ssl,下载证书. iphone 在设置——通用——描述文件处安装完毕后,在设置——关于本机——证

[Fiddler]如何让Fiddler可以抓取https的请求

Fiddler通过在本机开启了一个http的代理服务器来进行http请求和响应转发,默认情况下,并不能抓取https的请求.下面小编就来介绍下,如何用fiddler来抓取https的请求. 1.打开Fiddler,然后点击菜单栏的Tools > Fiddler Options,打开“Fiddler Options”对话框. 2.在打开的对话框中切换到“HTTPS”选项卡. 3.在打开的“HTTPS”选项卡中,勾选“Capture HTTPS  CONNECTs”和“Decrypt HTTPS t

Fiddler配置抓取https数据包

一.Fiddler配置 准备工作 以下所使用的配置都是基于Windows 7 64位的操作系统: 首先下载Fiddler 官网地址 https://telerik-fiddler.s3.amazonaws.com/fiddler/FiddlerSetup.exe 一路next安装: 然后下载 Fiddlercertmaker 下载地址: https://telerik-fiddler.s3.amazonaws.com/fiddler/addons/fiddlercertmaker.exe : 一

如何让Fiddler可以抓取https的请求

默认安装了Fiddler后,在抓取http页面的时候,https的页面是抓取不到的,需要我们对fiddle进行设置,才可以的.所以Fiddler如何捕获HTTPS会话呢?请按以下步骤来操作和设置. 默认下,Fiddler不会捕获HTTPS会话,需要你设置下, 打开Fiddler,然后点击菜单栏的Tools > Fiddler Options,打开"Fiddler Options"对话框. 在打开的对话框中切换到"HTTPS"选项卡. 在打开的"HTT

[抓包]使用Fiddler工具抓取HTTPS的包

1 打开Fiddler 2 Toos->Fiddler Options 2 勾选如下

【转】【fiddler】抓取https数据失败,全部显示“Tunnel to......443”

打开cmd执行命令. d: cd D:\soft\Fiddler2 makecert.exe -r -ss my -n "CN=DO_NOT_TRUST_FiddlerRoot, O=DO_NOT_TRUST, OU=Created by http://www.fiddler2.com" -sky signature -eku 1.3.6.1.5.5.7.3.1 -h 1 -cy authority -a sha1 -m 120 -b 09/05/2012 参考 参考1(fiddler

fiddler设置抓取HTTPS协议数据包

1.打开工具里的选项 2.选择弹窗中的HTTPS选项,如下图进行勾选 3.若浏览器显示不安全链接则需要添加证书 提示如下点击确定证书安装成功,可以查看安装的证书,点击Action 下图即可查看fiddler安装成功的证书 原文地址:https://www.cnblogs.com/huicong/p/12079098.html

【转】抓包工具Fiddler的使用教程(十二)下:Fiddler抓取HTTPS

在教程十二(上),我们也了解了HTTPS协议,该教程就和大家分享Fiddler如何抓取HTTPS 抓包工具Fiddler的使用教程(十二):[转载]HTTPS协议 再次回忆一下关键内容: iddler如何在服务器与客户端之间充当第三者呢? 服务器->客户端:Fiddler接收到服务器发送的密文, 用对称密钥解开, 获得服务器发送的明文.再次加密, 发送给客户端. 客户端->服务端:客户端用对称密钥加密,被Fiddler截获后,解密获得明文.再次加密,发送给服务器端.由于Fiddler一直拥有通