首页/安全/加密与证书速查/证书固定失效排查

证书固定失效排查

启用证书固定的客户端在证书轮换后会握手失败:固定值仍是旧证书或旧公钥的指纹。排查关键是对比固定值与当前链的实际指纹,并规划多固定值与备份证书策略。

加密与证书速查安全更新于 2026-10-13

证书固定失效排查

启用了证书固定的客户端只信任预先内置的指纹,一旦证书轮换就会出现握手失败——因为固定值仍是旧证书或旧公钥的哈希。排查的关键动作,是把「客户端内置的固定值」与「当前链上材料的实际指纹」逐项比对,确认失配发生在哪一层;修复方向则是把固定对象从叶证书改为公钥或中间证书、内置多组固定值,并让固定值能通过配置下发更新,而不是每次靠发版。

基本信息

固定对象叶证书指纹、公钥(SPKI)哈希或中间证书指纹
失效触发点证书提前轮换、CA 变更、链上材料变化
缓解策略固定公钥或中间证书、配置多组固定值、支持配置下发
与 HPKP 区别Web 端 HPKP 已被浏览器移除,这里的固定通常指移动 App 或内网客户端
影响面固定失效等于客户端完全无法连接,服务端无法即时修复

典型使用场景

  • App 上线后服务端证书轮换,部分老版本客户端无法连接
  • 排查「同一域名不同客户端表现不一致」:老版本内置了旧指纹
  • 制定证书轮换计划时评估固定带来的发版依赖
  • 安全评审要求做固定,需要同时说明运维与应急成本
  • 事件复盘中区分「固定导致失败」与「网络或 DNS 问题」

核对当前链的指纹

核对当前链的指纹
# 叶证书指纹
openssl s_client -connect api.example.com:443 -servername api.example.com </dev/null 2>/dev/null | openssl x509 -noout -fingerprint -sha256
# 公钥(SPKI)指纹,适合作为固定对象
openssl s_client -connect api.example.com:443 -servername api.example.com </dev/null 2>/dev/null | openssl x509 -noout -pubkey | openssl pkey -pubin -outform DER | openssl dgst -sha256 -binary | openssl base64

固定对象对比

固定对象轮换影响建议
叶证书指纹每次续期都会变化避免长期使用
公钥(SPKI)仅在换密钥时变化续期复用密钥时更稳
中间证书更换 CA 时会变化需先评估 CA 稳定性
根证书变化最少粒度最粗,安全收益最低
当更新固定值必须发版时,证书轮换就要提前规划时间窗:服务端切换与客户端发版要错开或配合,否则会出现「服务端已换、老版本 App 连不上」的线上事故,而且服务端无法补救。

易错点

  • 固定叶证书指纹 → 每次续期都要发版,运维成本高且极易遗漏
  • 未内置备用固定值 → 紧急轮换会造成全量客户端不可用
  • 把固定当成证书链校验的替代 → 固定不能替代链校验与域名校验,两者要同时做
  • 固定值硬编码且无下发通道 → 只能依赖用户升级版本,修复周期不可控

数据来源与参考

  • RFC 7469(HPKP 历史规范,固定概念沿用)
  • OWASP MASVS(移动端证书固定要求)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌