TLS握手:客户端验证服务器证书序列号及存储相关疑问
TLS证书验证常见问题解答
1. TLS握手时,客户端如何用本地存储的颁发者证书验证服务器证书的序列号?
- TLS握手阶段,服务器会发送自身的证书链,客户端先定位到服务器证书的
Issuer字段,再从本地证书存储中找到对应颁发者的CA证书。 - 第一步完成证书签名验证:用颁发者CA的公钥解密服务器证书的签名值,对比证书内容(不含签名部分)的哈希值,确认证书未被篡改。
- 关于序列号的有效性验证:服务器证书的序列号是CA为其分配的唯一标识,但颁发者证书本身不会存储该序列号的有效性信息。客户端通过吊销校验完成验证:要么检查本地缓存的CRL(证书吊销列表,包含CA已吊销的证书序列号),要么发起OCSP在线查询,确认目标序列号不在吊销名单内。
- 同时需确保服务器证书的
Issuer字段与本地颁发者证书的Subject字段完全匹配,保证使用了正确的CA证书进行验证。
2. 本地存储的颁发者证书里,会包含它签发的所有证书的序列号吗?
- 不会。颁发者CA证书的核心内容是CA的身份信息、公钥、签名算法、有效期等,作用是证明CA的合法身份,以及为其他证书提供签名验证的公钥,不会存储所有已签发证书的序列号。
- 原因很简单:CA可能签发成千上万甚至更多证书,把所有序列号塞进CA证书会导致证书体积异常庞大,完全不具备实用性。
- 若要确认某个证书序列号是否有效(未被吊销),客户端通常采用以下方式:
- 检查本地缓存的CRL,里面记录了CA发布的所有已吊销证书的序列号;
- 向CA指定的在线服务器发起OCSP查询,实时获取目标证书的状态;
- 部分场景下使用OCSP Stapling:服务器在握手时主动发送证书的OCSP响应,客户端无需单独发起查询。
内容的提问来源于stack exchange,提问作者Jijo
相关产品推荐
相关产品推荐

