MacOS使用Charles Proxy进行HTTPS流量监控

摘要: 本文记录我在Mac OS上使用Charles Proxy进行HTTPS流量监控以调试iOS和Android app的过程。

省流量总结:帮你确认你是否能使用Charles Proxy

  1. ✅ 监控iOS或Android 设备上的HTTP 流量。 使用Charles Proxy 能监控iOS/Android 设备上的所有app的HTTP访问流量。

  2. ✅ 监控iOS app里的HTTPS 流量。 使用Charles Proxy 能监控iOS 设备上的所有app的HTTPS访问流量。

  3. ✅ 监控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即可。
f1e2a3d1c1724de89cd85f308393ce72.png

这样就可以监控普通HTTP流量了。但是现在默认网络访问大都是基于HTTPS了, 所以需要额外配置一下才能监控HTTPS,否则会无法正确识别出HTTPS加密后的网络流量。

启动HTTPS监控的具体做法包括两部:

  1. 添加Charles Proxy的根证书到Mac OS的keychain并信任它。这一步是告诉Mac OS要允许Charles Proxy的根证书对进入本机的HTTPS流量进行破译以显示原文。
    8870932cd1b5411580241cbc5dd64ab5.png
    安装到login keychain里:
    28c3887e5fe344c0bc1a2e132d51d8d6.png
    安装完毕后,在keychain里找到它,双击以打开,我们需要修改它的trust的值为“Always Trust”,然后按提示输入管理员密码确认后完成。

99b079041f91430ab5c68380092b47fd.png
2. 启动SSL监控。在Proxy菜单里,SSL Proxying Settings 配置页面,选中Enable SSL Proxying 并添加*到Location,即监听所有HTTPS流量,后续可以根据自己需求把*换成自己需要监控的域名
84b743fbeb5f4de3a57f45fdc034e391.png

Android 安卓设备配置以支持HTTPS监控

Android 设备(手机和平板)上的设置分如下几步,因手机和平板操作类似,以下以手机举例说明:

  1. 配置手机WIFI网络的代理,使该手机的所有WIFI流量都走Charles Proxy这个代理。具体配置因机型不一样,可能略有差别,但操作目的相同,都是需要在WIFI代理设置里启用代理,代理服务器的ip输入运行Charles Proxy的主机的局域网ip,端口输入上面配置里指定的8888。

  2. 配置完毕后,在手机浏览器里访问任意网页,都会触发Charles Proxy的弹出提示,表明代理连接设置正确,点击允许继续操作。
    9765e2538ae14d6a83045897bce27ed2.png

  3. 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手机上。

69f4238d5b5d4e0393fc15b0bdc16b2b.png

  1. 根据手机不同,下载或传输到手机上的crt证书文件, 有些机型和系统是允许直接点击并安装的,有些不允许,可以试试直接打开。我的Pixel 7 手机就不允许。只能从手机的设置菜单里,搜索“加密与凭据”或“证书”后进入证书管理菜单后,点击安装证书:
    f723fb52b166478286222823cf1aaa79.png
    然后选择CA证书:
    0377fdd7baa2459f8160e5cb96c69501.png
    在弹出的警告里,选择“仍然安装”来接受
    fd88ac11b08b4328ba212a57666046f1.png

之后就可以手机文件里找到该crt文件并安装了:
731121bf955449c382de9737af6ead40.png

  1. 然后需要修改自己的Android App项目,添加必要的网络安全配置才可以进行流量记录。

具体做法: 在app的res/xml/路径下新建一个文件名为network_security_config.xml的文件,内容如下:
79c1678a522e464fabb6a8c551d580cf.png

1
2
3
4
5
6
7
8
9
<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
<debug-overrides>
<trust-anchors>
<!-- Trust user added CAs while debuggable only -->
<certificates src="user" />
</trust-anchors>
</debug-overrides>
</network-security-config>

然后在AndroidManifest.xml文件里,需要添加如下属性到application配置:android:networkSecurityConfig="@xml/network_security_config"
一个例子:

1
2
3
4
5
6
<application
...
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:networkSecurityConfig="@xml/network_security_config"
tools:ignore="GoogleAppIndexingWarning">
  1. 重新编译你的 Android app后运行,就可以发现它的HTTPS 流量也能被Charles Proxy 记录了,enjoy!

iOS设备配置以支持HTTPS监控

iOS设备和Android操作类似,也分如下几步,因手机和平板操作类似,以下以手机举例说明:

  1. 配置手机WIFI网络的代理,使该手机的所有WIFI流量都走Charles Proxy这个代理。具体配置因机型不一样,可能略有差别,但操作目的相同,都是需要在WIFI代理设置里启用代理,代理服务器的ip输入运行Charles Proxy的主机的局域网ip,端口输入上面配置里指定的8888。iPhone里,点击系统设置里的WI-FI菜单, 找到当前连接的WIFI 后,点击它的属性(蓝色小圆圈包围的i字符) 打开它的具体配置:
    e496c4c3435c4f8c81100265eb09b56f.png
    然后找到HTTP代理这一项,选择手动并输入对应IP和端口,示例:
    4baa5b5873724ff6b10ba9e4612a0fee.png
    配置完毕后保存,会触发Charles Proxy的弹出提示,表明代理连接设置正确,点击允许继续操作。

  2. iOS 手机需要获取一个来自Charles Proxy的CA证书并安装到本机,才能实现https的流量记录。在手机浏览器里直接访问 http://charlesproxy.com/getssl 这个网址,就会提示下载一个配置描述文件,同意并保存到本地。
    28c83f721e834392b4ff632cbbc2b998.png

  3. 下载完毕后,在系统设置菜单, 通用-> VPN和设备管理,找到刚下载的证书进行安装,
    43157a0f26ff4f10ad234d9773af230d.png
    6b7fbbebc7f44a3990a9194b21027d19.png

安装过程中会出现一些安全提示,接受并接续完成安装,最终会显示已安装状态:
36a86fe3707b40beb61c2de1dc19d406.png

  1. 还有重要一步,回到系统设置菜单,通用->关于本机-> 证书信任设置,里面列出了这个新安装的根证书,点击开关以信任它。
    75e8c7a7a5b84a31b395d745c91f14a3.png
    同样会弹出安全提示,点击继续以完成
    ffab37526c494c6e99bde02a78c8fc66.png

好了,iOS上配置完毕,可以使用了。


MacOS使用Charles Proxy进行HTTPS流量监控
https://pub.zangchuantao.com/20250102/MacOS-Charles-Proxy-HTTPS-Traffic.html
作者
Chuantao
发布于
2025年1月2日
许可协议