最近在做APP上的活动页面的调试工作,在调试的过程中遇到了一些麻烦,比如线上报bug,本地很难在浏览器上模拟真机复现,频繁改动代码,频繁上线很麻烦,于是调研了一下抓包工具,charles,一下是使用教程及遇到的一些问题和解决方法:
一.需要的工具
1.下载charles并安装
2.需要一台有root权限的手机
注意:
小米手机自带root为不完整root,需要进行完整root(即解锁system)。方法如下:
安装adb工具 :brew install Caskroom/cask/android-platform-tools# 没有安装homebrew的先安装homebrew
root : adb devices# 测试adb是否安装成功,成功了会出现设备的hash值
adb root
adb disable-verity# 禁用系统验证
二.配置http代理
proxy -> proxy settings -> proxies
选择监听8888端口,并勾选Enable SOCKS proxy这样也可以监听浏览器的http请求
三.配置SSL代理
proxy -> SSL Proxy Settings
点add添加需要监视的域名,支持 *号通配符,端口一般都是443
四.为手机配置http代理
以小米手机为例
设置 -> wlan -> 选择一个网络并链接 -> 点击此网络的详情(右边的箭头icon)-> 设置代理为手动 -> 主机名为你的电脑ip -> 端口号8888 -> 点击右上角对号设置成功
这时候charles会出现是否允许此设备链接的提示,点击allow就行啦
五.为手机安装根证书
Charles的根证书下载网址: chls.pro/ssl
以小米手机为例:
1.需要下载一个第三方浏览器
在浏览器中输入 chls.pro/ssl 下载证书
更改证书后缀为.crt :
系统工具-文件管理-手机-QQBrowser-其他(证书的文件路径),找到charles-proxy-ssl-proxying-certificate.pem,更改后缀
设置-> wlan -> 下滑到高级设置 -> 安装证书 -> 找到刚刚修改过的文件点击并安装 -> 系统提示安装成功
六.为电脑安装根证书
Help -> SSL Proxy -> install charles root certicate
进入钥匙串信任此证书
七.访问需要代理的地址
找到需要代理的地址,右键map local
设置local path,点击choose可以选择本地文件,确认
这样就代理成功啦
八.可能会出现的问题
当你访问https的资源时,出现以下情况
查看Help -> SSL Proxying
说明根证书没有安装成功,在Android 7.0及以上版本会出现这样的问题
解决方法:将证书安装到系统证书中(需要root)
系统证书的目录是:/system/etc/security/cacerts/
每个证书的命名规则为:<Certificate_Hash>.<Number>
Certificate_Hash表示证书文件的hash值,Number是为了防止证书文件的hash值一致而增加的后缀
证书的hash值可以由命令计算出来,在终端输入openssl x509 -subject_hash_old -in <Certificate_File>,其中Certificate_File为证书路径,将证书重命名为hash.0放入系统证书目录,之后你就可以正常抓包了。