如何确保 HTTPS 证书的信任?

讨论了通过数字签名、CA 信任链和浏览器预装根证书来保证 HTTPS 证书的可信任性的方法。

网络协议 中等 HTTPS 安全 安全性

HTTPS 通过数字证书实现服务器的身份认证和保证证书的可信性,核心基于证书颁发机构 (Certificate Authority,CA) 的信任链、签名验证机制、预先安装的信任根证书和其他安全措施来确保信任。以下是整个验证过程的详细步骤:

  1. 证书来源的受信任性
    • HTTPS 服务器的证书是由权威 CA 签发。CA 是公认的可信机构 (如 Let’s Encrypt、Symantec),浏览器和操作系统预先存储了这些顶级 CA 的根证书列表。如果在系统信任列表中找不到签发该证书的 CA(包括间接信任关系),证书就视为无效。这一机制避免中间人或恶意实体伪造证书。
  2. 签名验证过程:
    • 证书包含一个数字签名(由签发者使用私钥加密生成),使用基于非对称加密机制的验证:
      • CA 对证书持有者的信息(如域名、公钥、有效期)生成哈希值。
      • 加密哈希值(即签名)附在证书中,客户端用证书中 CA 的公钥(从本地存储的根证书获得)来解密该签名,还原原始哈希值。
      • 客户端计算接收证书内容的哈希值:
        // 伪代码示例哈希计算(假设使用SHA-256)
        const hashCalculate = (certInfo) => { 
          return sha256(certInfo);
        };
        
      • 两个哈希值对比:若相同,证明证书内容未被篡改且签发者可信。此步骤确保证书的完整性和合法性。
  3. 证书链验证:
    • 许多证书涉及多层信任机制:
      • SSL / TLS 握手时,服务器响应时发送一个证书链,包括:
        • 末端服务器证书(具体域名级别)。
        • 中级 CA 证书。
        • 最终链接到顶级 CA 的根证书。
      • 客户端逐层向上验证签名:例如,检查末端证书的签名是否能被其母公司证书公钥验证。只有验证无误的证书链(根 CA 在预安装信任列表中)才视为可信任。此过程防止中间证书的妥协。
  4. 附加验证步骤:
    • 域名和有效期检查:验证证书包含的确切域名(需与访问域名匹配)和有效期未过期,如果发现不一致,浏览器抛出警告。
    • 吊销状态检查:为防止已撤销证书继续使用,定期检查:
      • CRL(证书吊销列表):本地缓存或在线查询的列表。
      • OCSP(在线证书状态协议):减少交互延迟,确保实时验证证书状态有效性。

综上,证书可信性的核心在于:

  1. CA 权威机构的根证书预置信任;
  2. 签名保证证书数据和来源有效;
  3. 完整的证书链验证覆盖每一层;
  4. 完整性检测机制阻止篡改或失效证书。