Skip to content

模块导航: 总入口 · 总纲与方法 · 后端场景 · AI与算法工程 · 国企与金融 · 网络问答


12. 浏览器如何校验证书(热度 432 · 高频选考) ​

Q: 浏览器怎么验证 HTTPS 证书是否合法?验证失败有哪些原因?

A:

校验内容(完整清单) ​

  1. 证书链: 从叶子证书逐级向上到受信任根 CA(系统/浏览器内置信任库)。中间证书应由服务器下发(fullchain)。
  2. 签名完整性: 用上级 CA 公钥验证本级证书签名,确保证书未被篡改。
  3. 有效期: 当前时间是否在 notBefore/notAfter 之间。
  4. 域名匹配: CN/SAN 是否覆盖当前域名(通配符 *.example.com 不跨多级)。
  5. 吊销状态: CRL 或 OCSP;生产常用 OCSP Stapling 降延迟。
  6. 策略: 密钥长度/签名算法是否仍在信任策略内;扩展约束(CA 位、EKU)。

证书里有什么: 域名/SAN、公钥、有效期、签发者、序列号、签名算法、CA 签名。不含私钥。

常见失败原因 ​

证书过期(ERR_CERT_DATE_INVALID);域名不匹配(SAN/CN);自签名未受信任;中间证书缺失(fullchain 事故高发);系统时间错误;根证书不在信任库;证书被吊销;弱算法/过短密钥。

HTTPS 站点仍提示「不安全」的深层原因: 混合内容(页面混入 HTTP 资源)、弱套件、吊销信息不可用时的策略差异等。

加分: OCSP Stapling——服务器代查吊销状态并装订在握手里,降低客户端实时 OCSP 的延迟与隐私泄露;CAA DNS 记录限制可签发的 CA。

常见追问 ​

追问 1:证书链具体怎么验证?根证书谁来信任?

  • 答题要点: 叶子 → 中间 CA → 根 CA。根 CA 不通过「再往上签」验证,而是命中操作系统/浏览器内置信任锚(trust store)。中间证书缺失是生产事故高频原因——应用必须配置 fullchain。

追问 2:证书过期和域名不匹配,客户端表现一样吗?

  • 答题要点: 都会导致连接警告/失败,但错误码与文案不同(日期无效 vs 域名不匹配)。排障先看证书 notAfter 与 SAN 列表。

追问 3:CRL 和 OCSP 有什么区别?为什么还要 Stapling?

  • 答题要点: CRL 是整份吊销列表,体积大、更新粒度粗;OCSP 按证书单次查询。OCSP 实时查询增加 RTT 且泄露「谁访问了哪站」;Stapling 让服务器代查并装订,客户端一次握手拿到吊销证明。

易错点 ​

易错说法纠正
「证书链到服务器私钥」链验证公钥与 CA 签名,不涉及传输私钥
「浏览器只看域名」还要链、有效期、吊销、信任库
「自签证书=加密失效」仍可加密,但身份认证失败,公共站点不可用
「有 HTTPS 就一定锁标」混合内容/无效证书可能锁标打叉或「不安全」
「SAN 不重要,有 CN 就行」现代浏览器以 SAN 为准

与选择题对照 ​

  • 主库 150: 第 116 题(数字证书正确叙述)、第 101/102 题(数字签名)、第 114/115 题(TLS/握手)、第 99/100 题(非对称)、第 98/103/104/105 题(安全威胁与中间人)。
  • 补题 16: 无直接证书选择题。
  • 口述联动: 选择题考「证书里有什么/签名用什么钥」;面试要讲清校验六项(链、签名、有效期、域名、吊销、密钥用法/策略约束)+失败原因+OCSP Stapling。

工程 / 抓包背景 ​

  • 命令行:
    bash
    openssl s_client -connect example.com:443 -servername example.com -showcerts
    openssl x509 -noout -subject -issuer -dates -ext subjectAltName
  • curl: curl -v 看 SSL certificate problem;测试时勿在生产关闭校验(-k 仅排障)。
  • Nginx: 必须 ssl_certificate 指向包含叶子+中间的 fullchain;日志见 SSL handshake failure。
  • Wireshark: Certificate 消息中的链长度;Alert 协议可见 handshake_failure。
  • 线上事故模式: 上线忘续期、只部署了叶子证书、SNI 与证书不一致、CDN 回源证书错误。

持续学习,持续积累。