结论:证书固定指客户端不再信任系统 CA 的任意证书,只接受预先内置的特定证书/公钥(或签发 CA),用来对抗本地安装恶意 CA 后的中间人攻击(抓包、企业代理、伪基站 Wi-Fi 场景)。HPKP(HTTP 头动态固定)已被浏览器废弃,现在的 pinning 是 App 内置(静态)方案。
展开:实施要点:1)pin 公钥而非证书——证书续期换新但密钥可复用,pin 证书每次换证都要发版;2)必须留 backup pin(备用密钥),否则主密钥丢失/泄露 = 全量用户断联,这是 pinning 最大的运营事故来源;3)pin 中级 CA 的公钥是折中——信任面收窄但换证灵活。该不该做的判断:银行、支付类高价值目标值得做(OWASP MASVS 对 L2 应用要求);一般内容类 App 收益有限——攻击者要过 pinning 得逆 App patch 掉校验,提高了门槛但不挡root/越狱设备的主动攻击,反而给自身运维加风险。配套:证书透明度(CT)监控自家域名是否被误签;Android 用 Network Security Config 声明式配置比代码硬编码易维护。易错点:1)pin 过期证书导致应用自杀式断网;2)只 pin 主域名忘了 CDN/API 域名;3)灰度策略——pinning 校验失败要上报遥测而不是静默失败,否则线上事故无感知。
追问方向:证书透明度日志的工作原理、QUIC/HTTP3 下抓包代理的变化对 pinning 的影响。