前言
在 Mac 下使用 Charles 工具进行抓包,然后抓取 HTTPS 请求时,出现 unknown,无法解析的情况如何处理呢?
请继续往下看,将会详细介绍一下整个过程...
正文
一、安装 Charles
过于简单,省略一万字...
二、安装证书
包括电脑端和手机端,这也是抓取 HTTPS 请求的关键所在。
1. 电脑端
打开 Charles,然后在菜单栏选择 Help → SSL Proxying → Install Charles Root Certificate,将证书安装至电脑,并打开钥匙串访问。
证书安装后,默认是不被信任的,所以我们需要将其设置为信任。
在钥匙串中找到该证书 Charles Proxy CA,并设置为始终信任,然后保存。
这样电脑端证书就安装完成了。
2. 手机端
下面以 iOS 设备为例,而 Android 端各定制系统安装证书的方式可能略有差异。
同样在菜单栏选择 Help → SSL Proxying → Install Charles Root Certificate on a Mobile Device or Remote Browser,将会有以下提示。
请注意,手机与电脑需连接在同一局域网内。
在手机打开:设置 → Wi-Fi → 打开所连 WiFi → 设置 HTTP 代理 → 选择手动,接着将 IP 地址以及端口填写进去,然后存储即可。
输入过程中,服务器一栏 .
之间可能会自动插入空格,手动删除一下。
接着打开系统 Safari 浏览器(其他浏览器可能无法唤起安装证书的弹窗),输入地址 chls.pro/ssl
打开页面,会自动唤起安装描述文件的弹窗,选择允许。
紧接着,前往:设置 → 通用 → 描述文件 → 选择对应描述文件 → 安装。
还有最重要的一步,很多人就是忽略了该步骤,导致安装完证书后,抓取 HTTPS 请求仍是 unknown。
前往,设置 → 通用 → 关于本机 → 证书信任设置(滑到屏幕最下面) → 将 Charles 证书勾选上即可。(PS:我截图有两个是证书是两台不同的机器)
三、Charles 配置
Charles 默认是 8888
,不占用其他服务端口情况下,不修改问题也不大,根据实际情况自行调整。
还有一个非常重要的配置是 SSL Proxying Settings,勾选上 Enable SSL Proxying,添加 Include。否则即使添加了证书,抓取 HTTPS 也是 unknown。
这里根据实际需求来设置 Include 或者 Exclude,我这里设置为
*.443
,也可以设置成*.*
。(通配符*
是指所有域名或者端口)
四、效果
这样我们就可以愉快地玩耍了
五、关于 Android 无法抓包的问题
由于挺久没有怎么折腾过 Android 手机了,下面这块内容源自网上整理的,也没有时间去实际测试过。
由于 Android 机型众多,各定制系统差别也不同,安装证书在不同 Android 版本也有限制,导致在使用 Charles 进行抓包时要比 iOS 难很多。
Android 7.0 之后默认不信任用户添加到系统的 CA 证书:
To provide a more consistent and more secure experience across the Android ecosystem, beginning with Android Nougat, compatible devices trust only the standardized system CAs maintained in AOSP.(源自 Android Developers Blog)
换句话说,就是对基于 SDK24 及以上的 APP 来说,即使你在手机上安装了抓包工具的证书也无法抓取 HTTPS 请求。
下面提供几个链接:
- 安装 Xposed 模块解决 Android 端证书的问题,请看 JustTrustMe(我听说公司测试同事也是这样处理的)。
- Android 7.0 之后抓包 unknown 和证书无效的解决方案(无需改代码)
- 小米系列手机不能安装 Charles 证书怎么办