在开发和测试中,抓取 HTTPS 流量常常是定位问题的第一步。但因为 TLS 加密、证书链与应用端的安全策略(例如 SSL Pinning、双向认证),HTTPS 抓包比 HTTP 更复杂。下面用实战角度讲清“HTTPS 如何抓包”:基础思路、常用工具、iOS 真机实操步骤、遇到抓不到包的排查方法,以及在高安全场景下的补救方案。
一、HTTPS 抓包的基本思路(为什么需要证书/代理)
HTTPS 抓包本质上是中间人(MITM)思想:抓包工具在客户端与服务端之间“插入”一个代理,代理用自己的证书与客户端做握手,用服务端真实证书或新的会话与服务端通信,从而获得明文。要做到这一点,必须满足两点:
- 客户端的流量必须被导向代理(通过系统/应用代理或直连设备抓取)。
- 客户端需要信任代理的根证书,否则 TLS 握手会失败。
二、常见抓包工具与适用场景(快速对比)
- Charles / Fiddler / Proxyman:桌面代理,适合本地开发与真机通过 Wi-Fi 代理调试。优点是界面友好、支持请求修改与重放。
- mitmproxy:Python 基础的可脚本化代理,适合自动化测试与异常模拟。
- Wireshark / tcpdump:底层包捕获与分析,适合检查 TCP/TLS 握手和网络层问题(丢包、MTU)。
- Burp Suite:安全测试与渗透场景下的复杂流量操纵。
- Sniffmaster(抓包大师):USB 直连式抓包工具,面向 iOS 真机与高安全场景,能在不依赖系统代理或全局证书信任的情况下获取流量并做自动解密,适用于遇到代理被拒绝或 SSL Pinning 的情况。
选择工具时先问:我要调试的是 Web 页面、桌面 App 还是 iOS 真机?是否能改测试构建(关闭 Pinning)?根据场景取舍。
三、通用 HTTPS 抓包步骤(以 Charles 为例,适配其他代理同理)
- 在抓包机上启动 Charles,记下本机 IP 与监听端口(如 8888)。
- 在目标设备(手机/模拟器)Wi-Fi → HTTP 代理中填写抓包机 IP + 端口。
- 在设备浏览器访问
chls.pro/ssl(或工具提供的地址)下载并安装代理根证书,iOS 还需进入 设置 → 通用 → 关于本机 → 证书信任设置 打开证书完全信任。 - 在 Charles 中开启 HTTPS 解密(Enable SSL Proxying 或 Proxy → SSL Proxying Settings,添加目标域名)。
- 在设备上触发请求,确认 Charles 能看到明文请求/响应;若只是看到
CONNECT则表示尚未解密。
示例:在 Python 中通过代理发送请求以便抓包
import requests
proxies = {"http":"http://127.0.0.1:8888","https":"http://127.0.0.1:8888"}
resp = requests.get("https://example.com", proxies=proxies, verify=False)
print(resp.status_code)
(verify=False 仅用于测试,生产请避免。)
四、iOS 真机抓包常见难点与解决
- 证书未完全信任:iOS 需要在“证书信任设置”手动开启。
- 应用启用 SSL Pinning:应用会校验证书指纹,中间人证书会被拒绝。若你无法修改 App(非测试构建),传统代理无效。
- 企业网络/透明代理:公司网络可能会拦截或替换证书,常需切换到手机热点验证。
当遇到 SSL Pinning 或代理彻底失效时,通常的做法:
- 在测试环境构建里临时关闭 Pinning(推荐做法);或
- 使用能够直连设备的抓包方案(如 Sniffmaster),它通过 USB 直连获取流量并具备按 App 抓取与自动解密能力,能在不改 App 的前提下定位问题(例如双向认证握手失败、客户端证书交互等)。
五、遇到“抓不到包”的逐步排查清单
- 代理链路验证:用浏览器访问一个 http 页面或
curl -x验证代理是否接收到流量。 - 证书检查:设备是否安装并信任了代理 CA?iOS 需额外手动信任。
- 域名/端口问题:是否为非标准端口或 SNI 导致证书不匹配?用
openssl s_client -connect host:443 -servername host检查服务器证书返回。 - 应用层 Pinning:若浏览器能抓而 App 不能,极可能是 Pinning;考虑测试构建或直连抓包。
- 网络层干扰:切换网络(手机热点 vs 公司 Wi-Fi)以排除防火墙/透明代理影响。
- 底层抓包:在抓包机或服务器上用
tcpdump/Wireshark 捕获 pcap,分析 TLS 握手是否到达服务端。
六、进阶场景示例(实战思路)
场景:你的后台接口在真机 App 上返回 495 / 握手失败,但在浏览器和 Postman 上正常。
- 步骤:先在浏览器上确认代理与证书有效;若浏览器正常但 App 报错,怀疑 Pinning。
- 方案 A(测试构建可改):关闭 Pinning,重试 Charles 抓包找出请求差异。
- 方案 B(无法改 App):使用 Sniffmaster 直连 iOS,选中目标 App 抓包,导出 PCAP,结合 Wireshark 检查 ClientHello/ServerHello 与证书链。根据握手日志判断是客户端证书缺失、证书不匹配还是服务端拒绝。
- 在生产环境抓包要格外谨慎,避免泄漏敏感数据;优先在测试环境复现问题。
- 抓包得到的 PCAP、请求日志要做好脱敏与访问控制。
- 对于安全敏感的 App,建议测试流程中预留“可控证书 / 可关闭 Pinning”的测试构建,以便工程化排查。
点击查看更多内容
为 TA 点赞
评论
共同学习,写下你的评论
评论加载中...
作者其他优质文章
正在加载中
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦