欢迎光临
我们一直在努力

使用 Charles 进行 HTTPS 抓包

背景:

在进行App测试或定位线上问题时,经常会遇到抓取HTTPS数据包的需求。对于https请求,抓到的数据因为经过了加密,只能看到乱码。本文介绍如何使用Charles来抓取https网络请求。

操作原理

关键的操作思想:

  1. 构造一个中间人代理,它有能力完成TLS/SSL握手。
  2. 弄到一个根证书,并用它生成签名认证的代理服务器证书。

分步指南

第一步:配置HTTP代理,这步与抓取HTTP请求是一样的:

选择菜单中的 “Proxy” -> “Mac OS X Proxy/windows proxy” 来将 Charles 设置成系统代理,参考如下,如果 Mac 下有管理密码,需要输入密码后方可进行;

选择在8888端口上监听,然后确定。够选了SOCKS proxy,还能截获到浏览器的http访问请求。

第二步:配置SSL代理:

首先在charles的 “Proxy” 选项选择 “SSL Proxy Settings”:

然后在弹出的对话框中点击 add,添加需要监视的域名。域名支持 * 号通配符,如:抓取所有的https请求,可以填写 *:443

如果想要抓取 qq.com 的域名,可以填写 *.qq.com

第三步:为手机设置代理

在手机无线中配置手动代理,输入安装Charles的电脑的网络地址,端口填8888。

手机首次连接后,Charles会弹出是否允许连接的提示,选择“Allow”即可。

第四步:安装根证书

在手机上安装Charles的根证书:

IOS 安装方法:

在Safri上打开Charles的根证书下载网址: chls.pro/ssl 。

顺利的话会出现下图的画面,继续点安装,一路点确定。然后去设置里的描述文件管理如果看到有绿色的勾勾就说明安装成功了。

接下来,在设置->通用->关于本机->证书信任设置 (这一步很重要) 刚刚安装的证书的开关打开信任就可以抓取加密包了。

如果不能下载,检查手机是否正确设置了代理,Charles是否已经打开并配置正确。

Android 安装方法:(解决7.0之后抓包unknown和证书无效的解决方案)

这里可以我使用“夜神模拟器”来代替手机,因为它默认安装好就已经是root了的。

(1)在浏览器上打开Charles的网址: chls.pro/ssl ,下载证书。

(2)用户证书改成系统证书。

知识科普:

系统证书目录:/system/etc/security/cacerts/

其中的每个证书的命名规则是: <Certificate_Hash>.<Number>

文件名是一个Hash值,而后缀是一个数字,文件名可以用下面的命令计算出来:

openssl x509 -subject_hash_old -in <Certificate_File>

这个<Certificate_File> 就是你下载的证书的名字,计算出hash值以后,把原来证书的名字,改成hash值点Number的格式。

后缀名的数字是为了防止文件名冲突的,比如如果两个证书算出的Hash值是一样的话,那么一个证书的后缀名数字可以设置成0,而另一个证书的后缀名数字可以设置成1。

请做好准备要开始骚操作了:用openssl命令计算出证书的hash值(如果没法使用那个,用Git bash也可以)

openssl x509 -subject_hash_old -in <Certificate_File>

如下:

然后按<Certificate_Hash>.<Number>的格式修改证书名,再把证书文件拖到夜神模拟器里,此时文件会在夜神的一个非系统文件夹里,我们只需选择文件到系统证书目录:/system/etc/security/cacerts/,粘贴即可。

电脑端的根证书安装

直接在Charles的Help菜单中安装根证书(如下图),证书的存储位置选择“本地计算机”后一路“下一步”即可。

到这里了,你就可以抓取HTTPS的数据包了。

小红书抓包

上图是抓取小红书的数据

赞(6) 打赏
未经允许不得转载:前端学习分享网 » 使用 Charles 进行 HTTPS 抓包

评论 抢沙发

评论前必须登录!

 

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏