术语表

证书锁定 (Certificate Pinning、SSL Pinning)

最后核实

定义

证书锁定是客户端侧的一项检查:只有服务器证书链中包含事先配置好的特定证书或公钥时,客户端才接受这次连接。

证书锁定(也常叫 SSL Pinning)指客户端为某个主机预先保存预期的证书,或者更常见的,保存其公钥信息(SPKI)的哈希;即使对方证书链本身有效且受信任,只要不匹配就拒绝连接。它主要用于移动 App、IoT 设备等访问自家 API 的客户端。浏览器曾通过 HPKP(RFC 7469)支持网站动态声明锁定,但由于配置失误可能让整个网站无法访问,Chrome 72 已将其移除。

为什么重要

锁定把信任范围从信任库里的所有 CA 缩小到你指定的密钥,错误签发的证书或本机安装的企业根证书都无法截获 App 的流量。这也是为什么启用锁定的 App 在企业 SSL 解密检测网关后面会连不上。最大的风险是“锁死”:被锁定的密钥一旦更换而又没有备用 pin,所有已安装的客户端都会断连,直到用户升级 App。证书最长有效期从 2026-03-15 起为 200 天,2029-03-15 起降到 47 天,锁定叶子证书非常脆弱;锁定 CA 的中间证书也不稳妥,Let's Encrypt 在 2026 年就把签发切换到了新的证书层级。建议锁定自己掌控的密钥,并始终附带备用 pin;很多团队也可以改用 证书透明度 监控这种风险更低的方案。

例子

计算 base64 编码的 SHA-256 SPKI pin,Android Network Security Config 和当年的 HPKP 都用这种格式:

openssl x509 -in cert.pem -noout -pubkey \
  | openssl pkey -pubin -outform der \
  | openssl dgst -sha256 -binary | openssl enc -base64

常见误区

  • 锁定叶子证书最安全。 除非续签时沿用同一私钥,否则每次续签都会失效;应锁定公钥而非证书,并保留备用 pin。
  • HPKP 仍能保护网站。 主流浏览器早已不再执行 HPKP 响应头。
  • 有了锁定就不用常规证书校验。 锁定是在证书链和域名校验之上的附加检查,不能替代它们。

延伸阅读