业务场景
- 调试Hybrid App里Web页面的HTTPS请求。HTTPS请求因为经过加密,所以需要做一些额外的配置,否则只能看到乱码。
- 我实践的设备是小米手机和Mac电脑,工具是Charles。
- Mac上推荐Charles,Windows系统的电脑推荐Fiddler。
原理说明
- 让Charles能承担“中间人”这个角色,介入TLS/SSL握手
- 通过Charles官网获取一个根证书,用它生成签名认证的代理服务器证书
- 手机设置Charles为网络代理,此时手机里请求的服务器证书就是Charles自动生成的服务器证书,只要信任它,就能保证手机和Charles的TLS握手可以顺利完成。
设置Charles
- Proxy -> Proxy Setting… -> Proxies,这里除了动态端口dynamic port这个选项外,其他都启用,在下面Socks Proxy的设置里,在Ports里允许:
80, 443, 8080
- Proxy -> SSL Proxying Settings -> SSL Proxying这里add一下,设为
*
和443
- Charles根证书安装:Help -> SSL Proxying -> Install Charles Root Certificate。安装结束后,需要到Mac的钥匙链里去设置信任(需要输入你电脑的密码)
手机设置
- 给手机安装SSL证书:
- 在Charle上:Help -> SSL Proxying -> Install Charles Root Certificate on a Mobile device or a remote Browser然后根据提示在手机上打开地址
chls.pro/ssl
去下载 - 如果上一步不行,就Help -> SSL Proxying -> Save Charles Root Certificate…然后把文件保存下来,传到手机上,在手机上手动安装。
- 注意如果使用的是iOS手机,需要在手机“设置”里主动去信任这个证书
- 在Charle上:Help -> SSL Proxying -> Install Charles Root Certificate on a Mobile device or a remote Browser然后根据提示在手机上打开地址
- 手机的网络代理设置:
- 首先要和电脑在同一个局域网里
- 代理ip地址就设成运行着Charles的电脑的ip地址(在电脑上可以通过
ifconfig en0
查看inet
后面的ip地址) - 端口号是
8888
(默认)可以在Charles里改成别的,注意保持一致 - 通过数据线链接手机和电脑后,等待Charles弹出提示框,确认allow
手机安装证书的一些细节问题
- 可以在WIFI列表页下面找到“高级设置”,然后选择安装证书
- 证书的安装,点名小米,是稍微不一样的。需要:设置 -> 更多设置 -> 系统安全 -> 从存储设备里安装 -> 然后找到传到手机上的证书,安装,这里会让你验证手机解锁码(手势或者数字,看你怎么设置的手机)
- 小米手机在“验证手机解锁码”这里有一个坑:如果你的手机没有设置过密码,比如4位数字密码,这里会提示“输入证书存储的凭据”——一个让你感到非常困扰的提示,你根本想不到这是什么东西的密码,很多文章也不提。其实就是说你的手机需要有一个密码,到手机的“设置”里去给手机设置一个4位数字密码就行,这里需要的就是那个密码了。