一、简介
1 | Charles is an HTTP proxy / HTTP monitor / Reverse Proxy that enables a developer to view all of the HTTP and SSL / HTTPS traffic between their machine and the Internet. This includes requests, responses and the HTTP headers (which contain the cookies and caching information). |
Charles是移动端开发时候比较常见的抓包工具:
Web调试代理工具
可用于Http/Https接口获取Request/Reponse信息
可用于手机抓包
二、PC/Mac HTTPS配置
1. 安装根证书
(1) Mac
- 在应用的工具栏选择Help—SSL Proxying—Install Charles Root Certificate
- 输入本机密码安装证书(注意需要安装为系统证书)
- 打开Mac的“钥匙串访问”程序,选择系统,找到Charles Proxy CA一项,双击打开
- 点击信任,然后全部改为“始终信任”
- 重启Charles
- 在应用的工具栏选择Proxy—macOS Proxy即可对Mac进行抓包
(2) PC
- 在应用的工具栏选择Help—SSL Proxying—Install Charles Root Certificate
- 在弹出的“证书”页面,选择“安装证书”
- 选择“本地计算机”,点击“下一页”(需要管理员权限)
- 选择“将所有的证书都放入下列存储”,点击“浏览”,选择“收信人的根证书颁发机构”,点击“确认”,点击“下一页”
- 点击“完成”
- 重启Charles
- 在应用的工具栏选择Proxy—Windows Proxy即可对Windows进行抓包
2. 配置Https
- 在应用的工具栏选择Proxy—SSL Proxying Settings
- 勾选“Enable SSL Proxying”
- 在Include下点击“Add”
- Host输入通配符(*),Port输入443,点击“OK”
- 点击“OK”
三、iOS/Android配置
1. 下载手机证书
(1) iOS
- 打开iOS的“设置”—无线局域网—选择和PC/Mac同一局域网进行连接
- 修改当前局域网配置,在http代理项,“配置代理”—手动—输入PC/Mac的IP地址(可在Charles—Help—Local IP Address查看),端口号选择8888(默认值),点击右上角“存储”
- 首次连接PC/Mac会提示设备链接,需要确认是“Allow”还是“Deny”,选择“Allow” (可在Charles—Proxy—Access Control Settings管理)
- 打开Safafi浏览器,输入网址“chls.pro/ssl”,提示是否允许下载配置描述文件,选择“允许”
- 点击“OK”
(2) Android
- 打开Android的“设置”—“WLAN”—选择和PC/Mac同一局域网进行连接
- 修改当前局域网配置,在代理项,选择手动—输入PC/Mac的IP地址(可在Charles—Help—Local IP Address查看),端口号选择8888(默认值),保存
- 首次连接PC/Mac会提示设备链接,需要确认是“Allow”还是“Deny”,选择“Allow”(可在Charles—Proxy—Access Control Settings管理)
- 打开浏览器,输入网址“chls.pro/ssl”,下载证书文件
2. 安装手机证书
(1) iOS
- 打开iOS的“设置”—通用—VPN与设备管理—已下载的描述文件—点击“Charles Proxy CA……”
- 进入安装描述文件页面,点击“安装”,输入锁屏密码安装证书
- 打开iOS的“设置”—通用—关于本机—证书信任设置
- 找到安装的“Charles Proxy CA”,开启后面的开关
(2) Android
Android系统的CA证书分为两种:用户证书和系统证书
Android7.0后,Android的APP默认配置只信任系统证书,使用用户证书无法对Https进行抓包
安装CA证书为用户证书(适用于测试包):
- 下载证书文件后,打开Android的“设置”,安全—加密与凭据—安装证书—CA证书—选择刚下载的证书文件(不同厂商、不同版本操作步骤可能会有区别)
安装CA证书为系统证书,需要ROOT(适用于正式包):
- 把下载的证书转移到PC/Mac上,使用
openssl x509 -subject_hash_old -in charles-ssl-proxying-certificate.pem
计算特征值,例如46f58a05 - 把证书文件改名为
46f58a05.0
- 把证书放到手机的系统分区中
/system/etc/security/cacerts/
四、常用功能
1. Rewrite
操作:Charles工具栏—Tools—Rewrite
适用场景:对接口的Req/Res进行调整;对HTML进行注入
2. Map Local
操作:Charles工具栏—Tools—Map Local
适用场景:本地开发真机调试,build后替换资源;新项目上线前的模板Mock
3. Map Remote
操作:Charles工具栏—Tools—Map Remote
适用场景:部分SDK的联调
4. Breakpoints
操作:Charles工具栏—Proxy—Breakponits Settings
适用场景:对接口的Req/Res进行编辑
五、推荐实践
1. 每次调试完成后关闭所有工具
操作:每次使用完成后,关闭Map Remote/Map Local/Rewrite/Breakpoints等功能
作用:排除因这些功能造成的异常
2. 设置抓包记录域名白名单
操作:在Charles—Proxy—Record Settings设置抓包记录域名白名单
作用:只记录58相关域名,减少其他请求干扰
3. SSL证书绕过Apple域名
操作:在Charles—Proxy—SSL Proxying Settings设置SSL代理不包括Apple相关域名:
- *.apple.com
- *.itunes.apple.com
- *.mzstatic.com
作用:抓包时候可以正常访问Apple Store以及苹果内购(也可以通过手机的pac分流实现)
4. 使用Rewrite注入vconsole
操作:在Charles—Tools—Rewrite设置给html请求的Response注入vconsole
作用:不需要给项目中增加冗余代码,不需要重新构建,不会影响线上代码
5. 利用Map Local/Rewrite模拟一些case
操作:利用Map Local/Rewrite模拟一些case
作用:不改变代码逻辑的情况对线上接口进行微调
(jsonp使用Rewrite)