MacOS使用Charles Proxy进行HTTPS流量监控
摘要: 本文记录我在Mac OS上使用Charles Proxy进行HTTPS流量监控以调试iOS和Android app的过程。
省流量总结:帮你确认你是否能使用Charles Proxy:
✅ 监控iOS或Android 设备上的HTTP 流量。 使用Charles Proxy 能监控iOS/Android 设备上的所有app的HTTP访问流量。
✅ 监控iOS app里的HTTPS 流量。 使用Charles Proxy 能监控iOS 设备上的所有app的HTTPS访问流量。
✅ 监控Android app里的HTTPS流量。使用Charles Proxy 只能 监控该设备上你自己开发的App的HTTPS访问流量,因为它需要你修改Android APP项目源代码加入相关网络安全配置后才可以进行监控。
背景:
最近我在进行OS和Android app开发调试时,通过使用Charles Proxy 对我们app内无法看到源码的第三方依赖库进行了网络流量监控,从而定位了这个依赖库确实存在问题导致网络访问出错。使用中发现Charles Proxy是个很好用的网络监控测试工具,只是它需要在Mac和移动设备上同时进行配置,过程略微繁琐,因此记录下来供参考。
运行环境:Charles Proxy v5.0b16, 主机MacOS 15.1, Mac M1. 移动端设别运行最新iOS 18.1和Android 15.
Charles Proxy的工作原理是作为手机和网络服务器之间的中间人,通俗理解就是”两头骗“:它让移动设备以为自己访问的是真实网络服务器,同时让服务器以为它收到的网络访问来自真实的移动设备。普通的HTTP流量是不加密的,Charles Proxy只需要进行一个简单转发即可;但因为现在默认网络访问大都是基于HTTPS加密处理了,简单的流量转发是无法看到实际访问内容的,因此需要在Charles Proxy软件和移动设备上同时进行一些配置才能监控HTTPS流量。
Charles Proxy配置HTTP和HTTPS监控功能
下载后在Mac OS里安装并运行Charles Proxy. 启动后,在菜单Proxy里,选择Proxy Settings…以配置一下它的监听端口, 使用默认8888即可。
这样就可以监控普通HTTP流量了。但是现在默认网络访问大都是基于HTTPS了, 所以需要额外配置一下才能监控HTTPS,否则会无法正确识别出HTTPS加密后的网络流量。
启动HTTPS监控的具体做法包括两部:
- 添加Charles Proxy的根证书到Mac OS的keychain并信任它。这一步是告诉Mac OS要允许Charles Proxy的根证书对进入本机的HTTPS流量进行破译以显示原文。
安装到login keychain里:
安装完毕后,在keychain里找到它,双击以打开,我们需要修改它的trust的值为“Always Trust”,然后按提示输入管理员密码确认后完成。
2. 启动SSL监控。在Proxy菜单里,SSL Proxying Settings 配置页面,选中Enable SSL Proxying 并添加*到Location,即监听所有HTTPS流量,后续可以根据自己需求把*换成自己需要监控的域名
Android 安卓设备配置以支持HTTPS监控
Android 设备(手机和平板)上的设置分如下几步,因手机和平板操作类似,以下以手机举例说明:
配置手机WIFI网络的代理,使该手机的所有WIFI流量都走Charles Proxy这个代理。具体配置因机型不一样,可能略有差别,但操作目的相同,都是需要在WIFI代理设置里启用代理,代理服务器的ip输入运行Charles Proxy的主机的局域网ip,端口输入上面配置里指定的8888。
配置完毕后,在手机浏览器里访问任意网页,都会触发Charles Proxy的弹出提示,表明代理连接设置正确,点击允许继续操作。
Android 手机需要获取一个来自Charles Proxy的CA证书并安装到本机,才能实现https的流量记录。这个证书有两种获取方式,一种是在手机浏览器里直接访问 http://charlesproxy.com/getssl 这个网址,就会提示下载一个
charles-proxy-ssl-proxying-certificate.pem.crt
的文件,同意并保存到本地。因为有些浏览器会自动把http换成https导致下载失败,则需要采用第2种方式。在Charles Proxy的Help菜单里, SSL Proxying -> Save Charles Root Certifiate. 保存这个文件到本地,再通过数据线传输到Android手机上。
- 根据手机不同,下载或传输到手机上的crt证书文件, 有些机型和系统是允许直接点击并安装的,有些不允许,可以试试直接打开。我的Pixel 7 手机就不允许。只能从手机的设置菜单里,搜索“加密与凭据”或“证书”后进入证书管理菜单后,点击安装证书:
然后选择CA证书:
在弹出的警告里,选择“仍然安装”来接受
之后就可以手机文件里找到该crt文件并安装了:
- 然后需要修改自己的Android App项目,添加必要的网络安全配置才可以进行流量记录。
具体做法: 在app的res/xml/路径下新建一个文件名为network_security_config.xml的文件,内容如下:
1 |
|
然后在AndroidManifest.xml文件里,需要添加如下属性到application配置:android:networkSecurityConfig="@xml/network_security_config"
一个例子:
1 |
|
- 重新编译你的 Android app后运行,就可以发现它的HTTPS 流量也能被Charles Proxy 记录了,enjoy!
iOS设备配置以支持HTTPS监控
iOS设备和Android操作类似,也分如下几步,因手机和平板操作类似,以下以手机举例说明:
配置手机WIFI网络的代理,使该手机的所有WIFI流量都走Charles Proxy这个代理。具体配置因机型不一样,可能略有差别,但操作目的相同,都是需要在WIFI代理设置里启用代理,代理服务器的ip输入运行Charles Proxy的主机的局域网ip,端口输入上面配置里指定的8888。iPhone里,点击系统设置里的WI-FI菜单, 找到当前连接的WIFI 后,点击它的属性(蓝色小圆圈包围的i字符) 打开它的具体配置:
然后找到HTTP代理这一项,选择手动并输入对应IP和端口,示例:
配置完毕后保存,会触发Charles Proxy的弹出提示,表明代理连接设置正确,点击允许继续操作。iOS 手机需要获取一个来自Charles Proxy的CA证书并安装到本机,才能实现https的流量记录。在手机浏览器里直接访问 http://charlesproxy.com/getssl 这个网址,就会提示下载一个配置描述文件,同意并保存到本地。
下载完毕后,在系统设置菜单, 通用-> VPN和设备管理,找到刚下载的证书进行安装,
安装过程中会出现一些安全提示,接受并接续完成安装,最终会显示已安装状态:
- 还有重要一步,回到系统设置菜单,通用->关于本机-> 证书信任设置,里面列出了这个新安装的根证书,点击开关以信任它。
同样会弹出安全提示,点击继续以完成
好了,iOS上配置完毕,可以使用了。