真.Charles抓包配置大全

添加Charles Keychain

下载Charles CA

打开Charles,依次点击菜单栏 Help - SSL Proxying - Install Charles Root Certificate
下载CharlesCA到本地

信任Charles CA

之后打开电脑的 Keychain Access,搜索 “Charles” 找到Charles CA,然后设置它为始终信任:
设置信任证书

浏览器抓包

打开Charles, 确保 Proxy-macOS Proxy设置是开启(打勾)的,开启之后Charles左边的请求列表里应该会出现一些请求信息,这些都是电脑上正在发出的请求,没有的话建议重启电脑再打开Charle,开启macOS Proxy。

打开浏览器在你想要抓取请求的测试网站里做一些操作,直到在Charles请求列表里看到你要抓取的请求,此时还需要开启SSL Proxy你才能看到请求的具体信息,否则会有下图的提示:

需要开启SSL提示

鼠标选中想要抓取的请求域名,右键在选项列表中开启 SSL Proxy,然后就可以正常抓取Https请求了,如果只想关注这个请求,也可以在右键的选项列表中选中Focus,其他的请求就会被分组到Other Hosts:

右键选项列表

打开Proxy-SSL Proxy Settings,也可以对所有在抓取的请求地址进行管理:
SSL Proxy Settings

iOS抓包

iOS Simulator

下载Charles CA

打开Charles,依次点击菜单栏 Help - SSL Proxying - Install Charles Root Certificate in iOS Simulators
下载CharlesCA到iOS Simulator
之后Charles会弹出添加成功的提示:
添加成功提示
打开iOS Simulator,进入Settings - General,此时应该有一个 Profile 选项显示:
CA Profile
如果没有的话, 开启Charles的 Proxy-macOS Proxy设置,再打开Simlator的Safari浏览器,输入 chls.pro/ssl,手动下载Charles,之后再去Settings - General就可以看到Profile了,里面就是下载的Charles CA:
手动下载CharlesCA到iOS Simulator

安装Charles CA

点击上边下载好的Charles CA,一路点击安装即可,直到CA为Verified:
安装Charles CA到iOS Simulator

信任Charles CA

Settings - General - About - Certificate Trust Settings,打开Charles CA的信任按钮就好了:
信任CA

抓取Simulator请求

打开Charles, 确保 Proxy-macOS Proxy设置是开启的,再打开Simulator在你想要抓取请求的测试应用里做一些操作,确保你可以在Charles的请求列表里看到相关信息,如果看不到,可以试试重启Simulator。
抓取请求和上文 浏览器抓包 一致。

抓取Simulator请求

iOS 真机

设置Wifi Proxy

打开Charles,点击 Help - SSL Proxying - Install Charles Root Certificate on a Mobile device or Remote Broswer:
Charles Proxy
之后会打开一个弹窗,上边是你的本地IP和Charles默认端口,先别关掉它:
Proxy Detail
打开真机以下设置,将代理配置改成手动,Server和端口号填写和上面弹窗中的一致,保存设置:
设置Wifi Proxy
回到Charles,此时应有一个确认连接的弹窗,点击允许:
允许连接

下载Charles CA

打开Safari浏览器(最好打开隐私窗口),输入 chls.pro/ssl,下载Charles CA:
下载CharlesCA

安装Charles CA

进入 Settings - General,此时应该有一个 Profile Downloaded 选项显示,点击进入,按照下图安装即可,直到CA为Verified:
安装CharlesCA

信任Charles CA

Settings - General - About - Certificate Trust Settings,打开Charles CA的信任按钮就好了:
信任CharlesCA

抓取Simulator请求

上文 一致。

tvOS抓包

AppleTV 模拟器

下载Charles CA

在下图页面选择 “Save Charles Root Certificate” 选项下载Charles证书保存到本地,比如桌面啥的:

下载CharlesCA并保存

信任Charles CA

打开AppleTV模拟器,将下载的Charles证书手动拖到模拟器里,进入 Seetings -> General -> About 设置页面,此时下方应有一个证书信任的选项,点击后开启Charles证书的信任Toggle,就完成配置了。

抓取Simulator请求

上文 一致。

AppleTV 真机

apple tv 真机连接

apple tv有4Ktv和HDtv两种设备(4k比较难搞),需要下载一个神奇的软件 apple configurator 连接tv(上图)后再以profile的方式安装Charles,可以参考 这个链接 (需要科学上网)

如果按照链接做的还是不顺利,这里有一些trouble shooting:

  1. supervise tv不用路由器也可以,买一条type-c转网口的线把tv和mac连起来,再开启mac的internet sharing,这样mac和tv也在一个网段就可以开始配置
  2. tv reset之后一定不要动遥控器,先Pair!
  3. supervise之后理论上mac和tv连到同一个wifi,就可以在apple configurator的paired device里看到tv然后成功pair,不顺利的话先尝试在tv的remote app and devices页面remove设备再尝试打开apple configurator pair,还是不行那么恭喜你跟我一样,只能通过tv和mac连线的方式pair tv(HDtv用双头typeC线,4Ktv用type-C转网口线按照第一条连上), 这个是硬连接绝对不会断,甚至不用打开tv的remote app and devices页面pair就可以在apple configurator里看到设备。

Android抓包

Android Emulator

设置Wifi Proxy

打开Charles,点击 Help - SSL Proxying - Install Charles Root Certificate on a Mobile device or Remote Broswer:
Charles Proxy
之后会打开一个弹窗,上边是你的本地IP和Charles默认端口,先别关掉它:
Proxy Detail
先确保模拟器网络连接正常,之后去 Settings-Network & internet-WiFi,可以看到连接到了AndroidWifi,然后按照下图设置此Wifi的Proxy,点击Wifi后的设置按钮,点击铅笔图标,将Proxy设置为Manual,Hostname和Port就是上边弹窗里对应的值:
设置Wifi Proxy

下载Charles CA

打开模拟器的Chrome浏览器,输入 chls.pro/ssl,之后弹出下载Charles CA的提示框,选择下载:
下载CA
如果没有网络,尝试冷启动模拟器,看模拟器下拉框中有没有关于Wifi的限制连接提示,点击之后选择仍要连接,应该就有网了,之后再去浏览器下载CA:
连接网络
如果这样还是下载不了,那么打开Charles,点击点击 Help - SSL Proxying - Save Charles Root Certificate 将Charles CA下载到本地:
Save Charles Root Certificate
然后手动将文件拖到模拟器,也是一样的。

安装Charles CA

进入模拟器Settings - Security - Encryption&credentials

Android 11:

选择Install a certificate,点击CA certificate,选择Install anyway,最后点击下载的Charles CA文件,就可以安装成功了:
Android11安装Charles CA

其它版本

选择 Install from SD card,你就会看到上面下载的Chares CA文件,点击进行安装,名字可以随便写,Credential Use选择VPN and apps:
安装Charles CA

安装完成之后去Encryption&credentials-User credentialsEncryption&credentials-Trusted credentials应该都可以看到安装成功的Charles CA文件:
Charles CA

信任Charles CA

这里是个大坑,很重要,根据 Charles官方文档 的Android部分所述 ,由于Charles证书是用户安装的,而Android 7.0以后,系统默认不信任用户安装的证书。所以即使我们安装了Charles证书,也并不能成功进行抓包,此时有两种解决办法:

  • 办法一:使用官网做法,在你要抓包的应用程序源代码中添加配置文件,使该应用程序信任用户安装的Charles证书。
  • 办法二:将Charles证书的属性更改为系统安装的证书,从根本上解决问题,但是网上能找到的成功案例不多,不过适用于无法改动应用源代码的同学。

这里我用的办法一,添加配置文件,按照官网说的做就行,在代码库的 res/xml/ 路径添加network_security_config.xml文件,内容如下:

1
2
3
4
5
6
7
8
<network-security-config> 
<debug-overrides>
<trust-anchors>
<!-- Trust user added CAs while debuggable only -->
<certificates src="user" />
</trust-anchors>
</debug-overrides>
</network-security-config>

之后在Manifest.xml里添加下边的reference就行:

1
2
3
4
5
6
<?xml version="1.0" encoding="utf-8"?>
<manifest ... >
<application android:networkSecurityConfig="@xml/network_security_config" ... >
...
</application>
</manifest>

这里只配置了应用的debug版本,作改动后重新build代码,之后将生成的debug版本.apk文件安装到模拟器,这时信任Charles CA就设置成功了。

抓取Emulator请求

打开Charles, 然后关闭 Proxy-macOS Proxy设置,其它内容按照上文iOS部分的抓取Simulator请求做就行了,这里不再赘述。

Android真机

WIP

利用Breakpoints修改并发送请求

设置Breakpoints

通过设置Breakpoints,我们可以修改请求的Request和Response, 鼠标定位到你想要修改的请求,之后右键勾选BreakPints即可,之后再次进行相同请求时,就会出现编辑请求的页面,可以修改Request和Response:
设置Breakpoints

管理Breakpoints

打开Proxy-Breakpoints Settings,可以打开管理Breakpoints的弹窗,里面包括已经设置Breakpoints的url,以及Breakpoints的类型:Request和Response
Breakpoints Settings
如果只想修改请求的Request或Response,只需要勾选对应的选项即可:
设置具体抓取类型