基于本文回答

播面 播面

文图音视,全方位拆解八股文
0
评论

SSL Pinning(证书锁定)是什么?

知识点图片

SSL Pinning(中文常称为 证书锁定SSL 绑定)是一种主要用于移动应用(App)的安全机制,旨在防止中间人攻击(Man-in-the-Middle Attack, MitM)

简单来说,它的核心思想是:App 不再盲目信任手机系统里预装的那些证书颁发机构(CA),而是只信任开发者在代码里“写死”的那个特定证书或公钥。

以下是详细的通俗解释和技术原理:


1. 为什么要用 SSL Pinning?(背景)

在标准的 HTTPS 通信中,信任是基于“信任链”的:

  1. 你的手机里预置了很多受信任的“根证书”(Root CA)。
  2. 当 App 访问服务器时,服务器出示它的证书。
  3. 只要这个证书是由手机里受信任的 CA 签发的,App 就会认为服务器是安全的。

存在的问题(漏洞):
如果黑客(或者安全测试人员)诱导用户在手机上安装了一个恶意的“根证书”(例如使用 Charles、Fiddler 或 Burp Suite 等抓包工具生成的证书),手机系统就会信任黑客的服务器。这时,黑客就可以拦截、查看甚至篡改 App 和服务器之间的加密通信。

SSL Pinning 的作用:
App 开发者说:“我不关心手机系统信任谁,我只信任我自己指定的那个证书。” 这样,即使手机安装了黑客的根证书,App 发现服务器给出的证书跟代码里“锁定”的不一样,就会直接切断连接。

2. SSL Pinning 的工作原理

它的流程大致如下:

  1. 预埋: 开发者将服务器证书的指纹(Hash)或者公钥硬编码(写死)在 App 的代码或配置文件中。
  2. 连接: 当 App 发起 HTTPS 请求时,服务器发来它的证书链。
  3. 比对: App 在建立连接前,会拿出服务器发来的证书(或公钥),与本地预埋的指纹进行比对。
  4. 决策:
    • 一致: 确信是自家服务器,建立连接,传输数据。
    • 不一致: 哪怕该证书通过了系统的校验,App 也会认为连接不安全,直接报错并断开。

3. 锁定的对象(Pin 什么?)

通常有两种锁定方式:

  1. 锁定证书(Certificate Pinning):
    • 直接比对整个证书文件。
    • 缺点: 证书都有有效期,一旦证书过期或更新,App 必须强制更新,否则无法联网(俗称“变砖”)。
  2. 锁定公钥(Public Key Pinning / SPKI):
    • 提取证书中的“公钥”部分进行比对。
    • 优点: 即使证书续期或重新签发,只要私钥没变,公钥就不变。这样服务器更新证书时,不需要强制用户更新 App。这是目前最推荐的做法。

4. 优缺点分析

优点:

  • 极高的安全性: 有效防止中间人攻击(MitM)。即使攻击者拿到了受信任的 CA 签发的伪造证书,也无法骗过 App。
  • 防止抓包: 增加了逆向工程和分析 API 协议的难度。

缺点:

  • 维护成本高(最大的坑): 如果服务器证书意外变更(比如私钥泄露需要重签,或者运维配置失误),而 App 里存的还是旧的指纹,所有旧版 App 将瞬间无法联网。
  • 灵活性差: 必须制定周密的备用方案(Backup Pins),通常建议预埋两到三个备用公钥的 Hash。

5. 能被破解吗?(道高一尺,魔高一丈)

虽然 SSL Pinning 极大地提高了安全性,但它是在客户端(手机)上运行的校验逻辑。

对于拥有 Root 权限(Android)或越狱(iOS)设备的高级逆向工程师来说,SSL Pinning 是可以被绕过的(Bypass)。

  • 原理: 使用 Frida、Xposed 或 Objection 等 Hook 工具,在 App 运行时动态修改内存,将“校验失败”的函数返回值强行改为“校验成功”。
  • 结论: SSL Pinning 能挡住绝大多数普通黑客和脚本小子,但挡不住针对性的专业逆向攻击。

总结

SSL Pinning 就像是:
你去银行办事,不仅看对方是不是穿着银行制服(系统信任),你还随身带了一张银行经理的照片(Pinning)。如果柜台后面的人长得跟照片不一样,哪怕他穿着制服、戴着工牌,你也拒绝把钱给他。

00:00
00:00