有次排查一个接口问题,对方说 HTTPS 接口跑在 8443 端口上,Charles 里看全是乱码。查了一圈发现 Charles 默认只对 443 端口做 SSL 解密,其他端口需要手动配置才生效。这个问题其实挺常见的——为了安全或绕开运营商限制,不少服务会用 8443、9443、7443 等非标准端口跑 HTTPS。

Charles 的自定义端口配置

Charles 默认的 SSL Proxying 只会对 443 端口生效。如果目标接口跑在 8443 上却只开了默认代理,Charles 能看到请求但解开全是乱码。解决方法是在 Proxy → SSL Proxying Settings → Add 里加一条规则。Location 填写域名加端口,如果 App 的接口域名会变或者懒得一个一个加,可以用通配符 *:8443 匹配所有域名下的 8443 端口。然后 Enable SSL Proxying 勾选上。

如果接口跑的端口比较多——比如同时用 443 和 8443——需要加多条规则。Charles 不支持端口范围匹配,只能逐条添加。端口号改了还得同步更新规则。

Proxyman 的端口配置

Proxyman 默认的 SSL 解密策略和 Charles 类似,只对 443 端口自动生效。自定义端口需要在 Certificate → SSL Proxying 里添加。Proxyman 支持按域名和端口组合添加规则,配置体验比 Charles 直观一些,但同样需要手动添加每条端口规则,改了端口就得更新配置。

Fiddler 的配置方式

Fiddler 在 HTTPS 选项卡里勾选 Decrypt HTTPS Traffic 后,默认也只解密 443 端口的流量。其他端口需要在 Tools → Options → HTTPS 里点 “Ignore server certificate errors” 或者修改 CustomRules.js 脚本,在 OnBeforeRequest 方法里手动处理非标端口的流量。配置路径比 Charles 更深,新手不容易找到。

SniffMaster 的端口处理

SniffMaster 的代理抓包模式和上面几个工具类似,也需要配证书和端口规则。但如果目标 App 的 HTTPS 接口用了非标端口,另一个思路是直接用 SniffMaster 的暴力抓包模式。暴力抓包走 USB 直连 iOS 设备,不依赖代理配置,所以不存在端口限制——不管目标接口跑在 443 还是 8443 或者 12345,都能正常抓取和解密。设备连上 Mac,在暴力抓包模式下所有经过设备的 HTTPS 流量都会被解密,不需要关心端口号是多少。

数据流抓包模式也不受端口限制,可以看到每条数据流的源端口和目的端口信息,适合排查端口相关的连接问题。数据可以导出为 pcap 格式,如果用 Wireshark 进一步分析,可以在过滤条件里直接写 tcp.port == 8443 定位特定端口的流量。

建议

Charles 日常调试 443 端口的接口时仍然是首选。遇到非标端口的场景,要么在 Charles/Proxyman 里加对应的 SSL 规则,要么备一个暴力抓包工具省掉端口配置的麻烦。