在手机抓包中,证书绑定是一种让抓包工具“失灵”的安全机制。它会导致你在手机上安装了 Burp Suite 或 Charles 的 CA 证书后,目标 App 依然提示网络错误、连接失败或无法加载数据。

它是什么

正常情况下,App 信任手机系统里所有受信任的 CA 机构证书。抓包工具能解密 HTTPS,正是利用了这一点:你把抓包工具的证书装进手机,系统信任了它,App 也就跟着信任了。
证书绑定打破了这一逻辑。App 在代码里“写死”了它只认服务器那一张特定的证书或公钥。即使抓包工具的证书被系统信任,只要不是 App 预设的那一张,连接就会被强制断开。

抓包时的典型表现

当你设置好代理并安装证书后,如果 App 出现以下情况,通常意味着存在证书绑定:

  • 提示“网络连接失败”、“网络异常”或“证书无效”。
  • App 闪退或卡在加载界面。
  • 系统日志中可能出现类似 Pin verification failed 或 Certificate chain validation failed 的错误。

常见的绕过思路(仅供授权测试)

在获得合法授权的前提下,安全测试人员会通过动态插桩或修改安装包来绕过这一机制:

  • 使用 Frida/Objection:这是最常用的方法。通过注入脚本,Hook 掉校验证书的系统函数(如 Android 的 TrustManager 或 iOS 的 SecTrustEvaluate),让校验函数永远返回“通过”。Objection 工具甚至提供了一键绕过命令(如 android sslpinning disable)。
  • 修改安装包(重打包):针对 Android,可以反编译 App,修改 network_security_config.xml 或直接删除校验代码,然后重新签名安装。
  • 针对 Flutter 等特殊框架:如果 App 是用 Flutter 开发的,常规 Hook 可能无效,需要专门 Hook Flutter 引擎底层的 SSL 校验函数(如 ssl_crypto_x509_session_verify_cert_chain)。