证书固定
证书固定 是什么?
证书固定一种技术,应用程序在其中硬编码一个预期的证书或公钥,并拒绝任何不匹配的 TLS 连接,从而挫败恶意或被入侵的 CA。
证书固定将某个特定的 TLS 服务器绑定到一个或多个客户端隐式信任的加密身份——完整的叶子证书、中间证书,或 SubjectPublicKeyInfo(SPKI)哈希。在握手过程中,客户端会将服务器的证书链与固定的值进行比对,一旦不匹配便中止连接,即便该证书链由公开受信任的 CA 签发也是如此。这可以挫败持有虚假但有效证书的攻击者,例如由被入侵或被胁迫的 CA 签发的证书(2011 年导致伪造 Google 证书出现的 DigiNotar 和 Comodo 事件正是这一经典动机)。
浏览器 HPKP 与应用固定
Web 曾尝试通过 HTTP 公钥固定(HPKP,RFC 7469,2015)来实现固定,即一个 Public-Key-Pins 响应头。它在实践中以失败告终:密钥丢失、常规轮换时未更新固定值,或一次恶意的 "RansomPKP" 注入,都可能在整个 max-age 期间将用户锁在门外。Chrome 于 2017 年弃用了 HPKP,并在 Chrome 72(2018)中将其移除,将这一角色让位给证书透明度日志。固定如今主要存活于与固定后端通信的移动应用中(Android Network Security Config、iOS NSPinnedDomains、OkHttp CertificatePinner)。
flowchart TD
A[Client opens TLS to api.example.com] --> B[Server presents certificate chain]
B --> C{Chain validates against system CAs?}
C -->|No| E[Abort: standard TLS failure]
C -->|Yes| D{SPKI hash matches a pinned key?}
D -->|Yes| F[Connection allowed]
D -->|No| G[Abort: pin mismatch, block MITM/rogue CA]弱点与防御
固定的强度取决于它的备份固定值——务必固定一个轮换密钥。在已 root/越狱的设备上,Frida 和 objection 等工具会挂钩验证例程以剥除固定,因此固定虽然抬高了中间人拦截的门槛,却不能替代设备认证(attestation)。现代指南(OWASP MASVS)推荐采用 SPKI 固定,配合短时证书和经过测试的轮换方案。
● 示例
- 01
某银行应用固定其服务器公钥的 SHA-256 哈希,并拒绝任何其他证书。
- 02
某移动 API 客户端同时固定生产密钥和轮换密钥,后者作为备份。
● 常见问题
证书固定 是什么?
一种技术,应用程序在其中硬编码一个预期的证书或公钥,并拒绝任何不匹配的 TLS 连接,从而挫败恶意或被入侵的 CA。 它属于网络安全的 网络安全 分类。
证书固定 是什么意思?
一种技术,应用程序在其中硬编码一个预期的证书或公钥,并拒绝任何不匹配的 TLS 连接,从而挫败恶意或被入侵的 CA。
如何防御 证书固定?
针对 证书固定 的防御通常结合技术控制与运营实践,详见上方完整定义。
证书固定 还有哪些其他名称?
常见的别称包括: TLS 固定, 公钥固定。