← 返回题目列表

什么是证书固定(Certificate Pinning)?它有什么风险?

高频 困难 第 14 / 29 题 更新于 2026/07/31
HTTPS证书固定Pinning中间人攻击

简化版

证书固定是客户端内置或保存服务端证书/公钥指纹,连接时除了验证证书链,还要求证书或公钥匹配固定值。它能降低误签发 CA 或本地被植入根证书的风险,但证书轮换、过期和应急替换会变复杂,配置错误可能导致大面积不可用。

详细版

普通 HTTPS 信任系统 CA。只要证书链能连到受信任根 CA,客户端就接受。证书固定进一步要求“必须是我指定的证书或公钥”。

常见做法:

  1. 固定叶子证书指纹:最严格,但证书一换就要更新客户端。
  2. 固定公钥 SPKI 指纹:证书续期但公钥不变时仍可用。
  3. 固定中间 CA 或自有 CA:灵活一些,但安全边界更宽。
  4. 准备 backup pin:避免主证书轮换时客户端全挂。

它常用于移动 App、高安全客户端,不适合随意在 Web 上滥用。现代浏览器已不推荐 HPKP,因为误配置风险太高。

完整版教学

一、证书固定想解决什么问题

普通 HTTPS 的信任基础是系统根证书库。只要某个受信任 CA 给攻击者误签了目标域名证书,或用户设备被安装了恶意根证书,客户端可能仍会认为连接可信。

证书固定增加一道本地约束:不仅证书链要可信,还要匹配客户端预期的证书或公钥。

普通 HTTPS:
  chain trusted + domain match -> accept

Pinning:
  chain trusted + domain match + pin match -> accept

记忆钩子:证书链说“这张证书是可信 CA 签的”,Pinning 说“还必须是我认准的那一把钥匙”。

二、固定证书、固定公钥、固定 CA 的区别

固定粒度越细,安全性越强,但运维越难。固定叶子证书最严格,证书续期就可能失效;固定公钥更常见,因为证书可续期但密钥对保持不变;固定自有 CA 则更灵活。

固定对象安全性运维难度风险
叶子证书证书更新必须发版
SPKI 公钥较高换密钥要提前准备
中间/私有 CA较低信任范围更大

例如 App 固定了叶子证书,证书有效期 90 天,但用户 120 天没更新 App,证书轮换后老 App 全部连不上。

三、为什么要 backup pin

如果只固定一个 pin,一旦私钥泄露或证书需要紧急更换,客户端无法接受新证书。backup pin 是提前把备用公钥指纹放进客户端,平时不用,事故时切换到备用证书。

pins:
  primary_spki = A
  backup_spki  = B

正常:服务器用 A
事故:切到 B,旧客户端仍可连接

没有 backup pin 的固定策略很脆弱。安全机制本来是为了降低风险,但没有应急通道时,它自己会变成可用性风险。

四、HPKP 为什么不推荐了

HPKP 曾允许网站通过 HTTP 响应头告诉浏览器固定公钥。但它风险很高:一旦站点误配置 pin,浏览器会在缓存期内拒绝访问,站点可能把自己锁死;攻击者若能短暂注入恶意 HPKP,也可能造成长期拒绝服务。

Public-Key-Pins: pin-sha256="..."; max-age=5184000

因此现代浏览器不再推荐 HPKP。现在证书固定更常见于 App 内部实现、企业客户端或特定 SDK。

五、Pinning 和抓包代理的冲突

开发测试常用 Charles、Fiddler、mitmproxy 安装本地根证书解密 HTTPS。普通 HTTPS 会信任这个本地根证书,但启用 Pinning 的 App 会发现证书或公钥不匹配,从而拒绝连接。

这既是安全价值,也是测试成本。团队通常需要 debug 包关闭 pinning,或在测试环境使用单独 pin,避免影响线上安全策略。

场景Pinning 行为
公共 CA 正常证书通过
企业代理替换证书可能失败
本机抓包代理通常失败
误签发证书可阻断

六、工程落地如何更稳

证书固定要配套发布节奏和监控。客户端发版周期长时,不应固定短周期叶子证书;应优先固定 SPKI,并准备至少一个 backup pin。服务端证书轮换前,要确认存量客户端都包含新 pin。

稳妥流程:
1. 当前版本内置 pin A + backup pin B
2. 服务端仍使用 A
3. 新版本逐步覆盖
4. 需要轮换时切到 B
5. 下一版本加入新的 backup C

这套流程看似麻烦,但能避免“一换证书,全量客户端断网”的事故。

七、常见误区与追问

  • 误区:证书固定越严格越好。 粒度越严格,证书轮换和应急替换越难,可能牺牲可用性。
  • 误区:Pinning 可以替代证书链校验。 它是额外约束,基础的证书链、域名、有效期仍要验证。
  • 误区:Web 站点都应该开启 HPKP。 HPKP 误配置风险高,现代浏览器已不推荐。
  • 追问:固定证书和固定公钥哪个更常见? 固定 SPKI 公钥更稳,证书续期时可复用同一公钥。
  • 追问:为什么要 backup pin? 为私钥泄露、证书轮换和应急替换预留可用通道。
  • 追问:Pinning 为什么会影响抓包? 抓包代理替换证书后公钥不匹配,客户端会拒绝连接。

八、加强记忆

证书固定是 HTTPS 的“额外白名单”:除了 CA 可信,还必须匹配客户端固定的证书或公钥。它能防误签发和本地恶意根证书,但运维风险很高,必须准备 backup pin、轮换流程和测试策略。