用 Charles 抓币安 APP 包失败:证书 Pinning 解释
技术研究人员或安全审计员尝试用 Charles 或 mitmproxy 抓币安 APP 的 HTTPS 流量时,会发现 APP 直接拒绝连接或报 SSL 错误。这是因为币安实现了证书 Pinning。本笔记从技术角度解释这个机制。下载 APP 走 币安官网 或 币安官方APP;iPhone 装机看 iOS安装教程。
证书 Pinning 是什么
普通 HTTPS 验证流程:
- APP 发起连接
- 服务器返回证书
- APP 检查证书是否由系统受信任的 CA 签发
- 任何受信任 CA 签的都接受
证书 Pinning 是更严格的检查:
- APP 内置一份「期望的证书指纹」
- 服务器返回证书后,APP 不仅看 CA,还看是否匹配内置指纹
- 不匹配 → 拒绝连接
为什么金融 APP 要做 Pinning
防中间人攻击:
- 攻击者可以诱骗用户安装其根证书
- 之后用自己的证书劫持流量
- 普通 HTTPS 验证会通过(因为根证书已加白)
- 但 Pinning 会拒绝(因为指纹不匹配)
币安、银行、PayPal 等金融 APP 普遍做 Pinning。
Charles / mitmproxy 的工作方式
Charles 抓 HTTPS 包的步骤:
- 设备装 Charles 根证书并信任
- 设置代理指向 Charles
- APP 发请求 → Charles 用自己的证书伪装目标
- APP 验证:CA 受信任(因为装了 Charles 证书)
- 普通 APP 接受 → 抓包成功
但币安 APP 在第 4 步多查一项:
5'. 检查证书指纹 → 不匹配 → 拒绝
所以抓包失败。
抓包失败的具体表现
| 现象 | 原因 |
|---|---|
| APP 启动后转圈 | TLS 握手被拒 |
| 行情图空白 | WebSocket 连接拒绝 |
| API 返回连接错误 | 证书校验失败 |
| Charles 看到 SSL Handshake Error | 同上 |
| APP 直接闪退(罕见) | 处理异常未捕获 |
绕过 Pinning 的几种方式
研究人员可能用:
- Frida 脚本:动态替换 APP 内的证书校验逻辑
- LSPosed / Magisk 模块:注入修改的代码
- 反编译 APK 后修改 dex 重打包
- 使用 PIN-SSL 修改器
这些都需要 root 设备且违反 APP 用户协议。币安 APP 安全机制还可能检测这些工具。
普通用户为什么会遇到这个问题
绝大多数用户根本不抓包,但有几种意外场景:
场景一 · 公司网络做 SSL 拦截 公司在路由器层面解密 HTTPS 流量做监控:
- 装公司根证书到所有员工设备
- 流量被解密
- 币安 APP 拒绝连接(指纹不对)
判断:公司其它需要 HTTPS 的 APP 是否也连不上银行类。
场景二 · 杀软的 HTTPS 检查 卡巴斯基、Avast 等杀软会扫描 HTTPS 流量:
- 类似的中间人方式
- 币安 APP 可能拒绝
处理:临时关闭杀软的 HTTPS 检查。
场景三 · 装了「网络加速器」 某些「加速器」实际上做的是流量代理:
- 用户不知情地装了根证书
- 抓包并加速
- 币安拒绝
处理:卸载来路不明的加速器。
Pinning 的更新机制
证书 Pinning 的指纹会变(币安换证书时):
- 通常 APP 内置多个指纹
- 一个失效不影响连接
- 升级 APP 时同步更新
如果你长期不升级 APP,可能某天 Pinning 指纹与服务器证书都变了,连不上。
客户端的不同实现
币安各端的 Pinning 力度:
| 客户端 | Pinning 严格度 |
|---|---|
| 安卓 APP | 严 |
| iOS APP | 严 |
| 桌面客户端 | 严 |
| 浏览器 | 不实现(依赖 OS 信任) |
浏览器没有 Pinning(这就是为什么浏览器能被中间人,APP 不能)。
抓包替代方案
技术研究的替代:
- 用币安官方 API 文档(公开)
- 用 SDK 提供的接口
- Web 版抓包(浏览器开发工具)
- 网络层抓包(Wireshark,但只能看密文)
这些方式都不需要破坏 APP 安全机制。
安全建议
- 不要安装来路不明的根证书
- 公司 / 公共 WiFi 上谨慎用币安 APP
- 杀软的 HTTPS 检查与币安并存时把币安加白
- 不要 root 自己常用的设备
FAQ
Q:Charles 能抓币安网页版的包吗? A:能(浏览器无 Pinning),但只能看到 web 流量,不是 APP。
Q:mitmproxy 能不能让币安 APP 不做 Pinning? A:单独 mitmproxy 不能。要配合 Frida 等工具。
Q:iOS 上安装企业根证书后币安会被拦吗? A:可能。看具体证书是否被内嵌到信任链。
Q:root 安卓上能抓包吗? A:用 Frida 等工具理论可行,但违反 APP 协议。