# ❓ HTTPS 握手过程中,客户端如何验证证书的合法性

# 简单来说

  1. 浏览器从服务器拿到证书。证书上有服务器的公钥和 CA 机构打上的数字签名。

  2. 拿到证书后验证其数字签名。具体就是,根据证书上写的 CA 签发机构,在浏览器内置的根证书里找到对应的公钥,用此公钥解开数字签名,得到摘要(digest,证书内容的 hash 值),据此验证证书的合法性。

    • 验证证书是否在有效期内。
    • 验证证书是否被吊销了。验证吊销有 CRL 和 OCSP 两种方法。
    • 验证证书是否是上级 CA 签发的。

扩展

CRL 即证书吊销列表 证书被吊销后会被记录在 CRL 中,CA 会定期发布 CRL 应用程序可以依靠 CRL 来检查证书是否被吊销了 CRL 有两个缺点,一是有可能会很大,下载很麻烦 针对这种情况有增量 CRL 这种方案 二是有滞后性,就算证书被吊销了,应用也只能等到发布最新的 CRL 后才能知道 增量 CRL 也能解决一部分问题,但没有彻底解决。

Ocsp 全称在线证书状态检查协议 (rfc6960),用来向 CA 站点查询证书状态,比如是否撤销。 通常情况下,浏览器使用 OCSP 协议发起查询请求,CA 返回证书状态内容,然后浏览器接受证书是否可信的状态。

浏览器如何验证 HTTPS 证书的合法性?