在接口调试中,遇到这样一个问题:
- App 登录接口返回异常
- 服务端日志没有什么明显错误
- 客户端日志信息不完整,看不出问题
这时有个办法就是抓取 HTTPS 请求,查看数据。
但实际,又出现一个问题:
- 浏览器 HTTPS 可以正常抓
- App HTTPS 请求直接失败
问题就是抓包方向有没有错
一、先用代理抓包验证 HTTPS 环境
第一步使用代理抓包工具,例如:
- Charles
- Proxyman
- Sniffmaster
目标是确认 HTTPS 是否可以被解密。
建立代理环境
操作步骤:
- 启动 Sniffmaster
- 查看监听端口,例如 8888
- iPhone 与电脑连接同一 Wi-Fi
- 在 iPhone Wi-Fi 设置中配置代理地址与端口
保存后返回桌面。
安装 HTTPS 证书
在 iPhone 上完成以下操作:
- 使用 Safari 打开代理工具提供的证书地址
- 下载描述文件
- 安装证书
- 在系统设置中开启证书信任
完成后,代理工具可以解密 HTTPS。
验证 HTTPS 是否成功抓取
打开 Safari 访问一个 HTTPS 网站。
如果 Sniffmaster 中可以看到:
- 请求 URL
- Header
- 响应内容
说明 HTTPS 抓包环境已经建立。
二、抓取 App HTTPS 请求
在同样的代理环境下,打开目标 App。
触发登录或数据加载操作。
观察 Sniffmaster:
- 如果出现请求记录 → 可以查看完整 HTTPS 数据
- 如果没有任何请求 → 需要继续排查
三、HTTPS 抓包失败的常见现象
在这个案例中,出现了这样的情况:
- Safari 请求可以抓到
- App 请求完全没有记录
此时说明:
- 代理是正常的
- App 的网络请求没有走系统代理
四、切换 HTTPS 的抓包模式
当代理无法捕获 HTTPS 请求时,需要换一个抓包方式。
这里使用 Sniffmaster 的 HTTPS 暴力抓包。
这种方式不依赖代理证书。
使用 SniffMaster 抓取 HTTPS
操作步骤:
- 使用 USB 将 iPhone 连接电脑
- 保持设备解锁
- 在手机上点击“信任此电脑”
- 启动 SniffMaster
- 在设备列表中选择 iPhone
- 按提示安装 iOS 驱动
- 安装描述文件
- 进入 HTTPS 暴力抓包模式
- 点击开始
然后在手机上触发 App 请求。
观察抓包结果
在 SniffMaster 中可以看到:
- 请求域名
- 请求路径
- 请求 Header
- 响应数据
即使 App 没有走代理,仍然可以看到 HTTPS 请求。
五、当 HTTPS 数据不完整
在抓包过程中可能会遇到:
- URL 可见
- Header 可见
- 请求体为空
这说明:
- HTTPS 已经被捕获
- 但应用未使用开发证书签名
解决方法:
- 获取 App 的 IPA 文件
- 使用 iOS 开发证书重新签名
- 重新安装 App
- 再次抓包
完成后,请求体与响应体可以正常显示。
六、HTTPS 抓包与端口无关的部分
在抓包过程中,可以观察到:
api.example.com:443
api.example.com:8443
无论是 443 还是自定义端口:
- 只要 TLS 握手成功
- 抓包工具就可以解析 HTTPS
端口不会影响解密能力。
七、修改 HTTPS 请求的限制
如果需要修改请求参数,例如:
- 改写接口数据
- 模拟不同返回结果
需要使用代理抓包工具。
在 Charles 或 Proxyman 中可以:
- 使用 Rewrite
- 使用 Breakpoints
SniffMaster 也支持拦截器,但仅在 HTTPS 代理模式下可用。
设备级抓包模式不修改数据。
八、结合 TCP 层分析 HTTPS 问题
如果 HTTPS 请求出现:
- 超时
- 连接断开
可以将数据导出到 Wireshark。
在 Wireshark 中可以查看:
- TCP 建连过程
- 数据重传
- 连接关闭原因
这一层不涉及证书问题。
在实际调试中,可以按以下顺序操作:
- 使用代理抓包验证 HTTPS
- 如果代理抓不到 App 请求,切换设备级抓包
- 如果数据不完整,处理签名问题
- 如果涉及连接问题,分析 TCP 数据