1. 概述

本文我们将探讨 SSL 证书的验证机制。简而言之,SSL 证书验证就是验证其真实性。所谓真实性,是指证书中包含的所有信息都是有效的。

我们会先回顾非对称加密的基本原理,以及数字签名的使用方式。然后介绍公钥证书的用途,最后引出 SSL 证书及其验证流程。

2. 非对称加密

在非对称加密中,每个用户拥有一对密钥:公钥(public key)私钥(private key)。例如,用户 A 拥有一个公开的公钥 K_A,所有人都可以知道;而私钥 K_A⁻¹ 只有 A 自己知道。这种机制可以用于加密通信和数字签名。

2.1 加密与解密

假设 Alice 想给 Bob 发送一条私密消息 m。如果直接发送,中间人(如 Eve)可以监听并读取内容。因此,Alice 使用 Bob 的公钥 K_B 加密消息,得到密文 c = e_{K_B}(m)。即使 Eve 截获了 c,也无法解密。只有 Bob 拥有私钥 K_B⁻¹ 才能解密。

✅ 这种方式保证了信息的保密性:任何人都可以使用公钥加密,但只有拥有私钥的人才能解密。

2.2 签名与验证

如果 Alice 想签署一个数字文档,她可以使用私钥 K_A⁻¹ 生成签名 sgn_A(m)。接收方(如银行)使用 Alice 的公钥 K_A 来验证签名是否有效,以及文档是否被篡改。

2.3 数字签名流程

签名过程如下:

  1. Alice 生成签名:sgn_A(m) = sign(K_A⁻¹, m)
  2. Alice 发送 m 和 sgn_A(m) 给接收方
  3. 接收方使用 K_A 验证签名:verify(K_A, m, sgn_A(m)) = Yes/No

2.4 签名验证逻辑

验证算法接收三个参数:

  • 公钥 K_A
  • 消息 m'
  • 签名 sgn_X(m)

返回验证结果:

verify(K_A, m', sgn_X(m)) = 
    Yes, 如果 X=A 且 m'=m
    No, 否则

⚠️ 注意:接收方不能假设收到的消息 m' 没有被篡改,也不能确定签名者是 Alice。因此,验证过程必须同时检查签名者身份和数据完整性。

3. 公钥证书

为了安全地获取他人的公钥,我们需要一种机制来绑定公钥与其拥有者身份。这就是公钥证书(Public Key Certificate)的作用。

3.1 密钥生成与发布

用户使用算法(如 RSA)生成密钥对,并将公钥与身份信息(如姓名、邮箱、域名)一起发布。例如:

<Alice, K_Alice>

这些信息通常存储在 LDAP 等目录服务中,供他人查询。

❌ 但这种方式存在风险:中间人可以篡改目录服务中的数据,将 Alice 的公钥替换成自己的。

3.2 证书的签发

为了解决上述问题,引入了认证机构(CA)。CA 为用户签发证书,内容包括:

<Alice, K_Alice, sgn_CA(Alice, K_Alice)>

接收方可以使用 CA 的公钥验证证书签名,从而确认该证书未被篡改。

3.3 证书验证流程

用户验证证书时,需要验证 CA 的签名。为此,他们需要获取 CA 的证书,通常是一个自签名证书(self-signed certificate),即 CA 自己为自己签发的证书。

⚠️ 自签名证书容易伪造,因此不能通过公共渠道传输。现代操作系统和浏览器会预装一批可信 CA 的根证书

3.4 实际考虑因素

构建公钥证书系统(即 PKI)时,需要考虑以下几个关键问题:

  • 证书中应包含哪些信息(如主体名称、有效期、用途等)?
  • 谁来担任 CA?
  • 如何确保证书申请者身份的真实性?
  • 证书的格式应如何定义?

这些问题直接影响证书的安全性和可用性。

4. SSL 证书

SSL(Secure Sockets Layer)协议使用证书来建立客户端与服务器之间的安全连接。现代 TLS 协议继承了 SSL 的证书机制。

4.1 SSL 握手流程

SSL 握手过程如下:

  1. 客户端发起连接请求
  2. 服务器响应并发送其证书
  3. 客户端验证证书
  4. 双方协商加密算法并交换密钥
  5. 建立加密通道

服务器的证书中包含域名、公钥等信息,并由可信 CA 签名。

4.2 SSL 证书验证流程

客户端验证 SSL 证书的过程如下:

  1. 从证书中提取颁发机构(CA)名称
  2. 在本地根证书库中查找对应的 CA 证书
  3. 使用 CA 的公钥验证服务器证书的签名
  4. 校验证书是否在有效期内
  5. 检查证书是否被吊销(如通过 CRL 或 OCSP)

下图展示的是 Firefox 浏览器内置的根证书列表:

root certificates
CAs certificates

5. 总结

SSL 证书是现代互联网安全通信的基础。通过非对称加密、数字签名和公钥证书机制,SSL 实现了身份验证和数据加密。验证证书是确保通信安全的关键步骤,任何疏漏都可能导致中间人攻击。

✅ 在开发或运维过程中,务必确保:

  • 证书由可信 CA 签发
  • 证书未过期
  • 证书域名与访问地址匹配
  • 客户端正确配置信任库

否则,将面临严重的安全风险,尤其是在涉及金融、支付等敏感场景时。


原始标题:Verification of SSL Certificates

« 上一篇: Off-by-One 错误详解
» 下一篇: 边缘计算简介