术语表

证书序列号 (Serial Number)

最后核实

定义

证书序列号是 CA 为每张证书分配的正整数,与颁发者名称一起唯一标识一张证书,吊销列表和 OCSP 都靠它定位证书。

序列号是每张 X.509 证书中的一个字段。RFC 5280 要求它是不超过 20 字节的正整数,并在同一个 CA 签发的所有证书中唯一,因此“颁发者 + 序列号”可以精确指向一张证书。吊销机制正是基于这一点:CRL 列出被吊销证书的序列号,OCSP 请求查询的也是某个颁发者下的某个序列号。

为什么重要

Baseline Requirements 要求序列号非顺序递增、大于零,并且至少包含 64 位来自密码学安全随机数生成器的输出。不可预测的序列号让攻击者难以控制 CA 实际签名的数据,2008 年利用 MD5 碰撞伪造 CA 证书的攻击正是利用了可预测的序列号。曾有 CA 因序列号生成不符合这条规则而不得不批量替换证书,所以序列号是实实在在的合规项,不只是个编号。排查问题或申请吊销时,向 CA 或云厂商客服提供序列号,比只提供域名更能准确定位到具体哪一张证书。

例子

openssl x509 -in cert.pem -noout -serial -issuer

OpenSSL 以十六进制输出序列号,浏览器和 CT 查询工具常用冒号分隔显示同一个值。

常见误区

  • 序列号全球唯一。 它只在同一颁发者内唯一,不同 CA 可能用到相同的序列号。
  • 续期后的证书序列号不变。 每次签发都会分配新的序列号,即使密钥和域名都没变。
  • 序列号就是指纹。 序列号由 CA 写在证书里,指纹是对整张证书计算出的哈希值。

延伸阅读