文章

数字证书格式

数字证书格式

该文主要介绍数字证书格式。

数字证书格式

1. 术语1

  • 数字证书(digital certificate):由国家认可的,具有权威性,可信性和公正性的第三方证书认证机构(CA)进行数字签名的一个可信的数字化文件。
  • 证书撤销列表(certificate revocation list, CRL):CRL 是 CA 对撤销的证书而签发的一个列表文件。
  • CA证书(CA certificate):CA 证书指颁发给数字证书认证机构的证书。
  • 终端实体证书(entity certificat):终端实体也称为用户证书,是由数字证书认证机构签发的个人证书,机构证书、设备证书等。

2. X509

X.509 是密码学里公钥证书的格式标准。X.509 证书已应用在包括 TLS/SSL 在内的众多网络协议里,同时它也用在很多非在线应用场景里,比如电子签名服务。

2.1. 证书组成结构

证书组成结构标准用 ASN.1(一种标准的语言)来进行描述,X.509 v3 数字证书结构如下:

graph LR
    Certificate[数字证书格式] --> tbsCertificate[证书数据主体]
    Certificate --> signatureAlgorithm[签名算法]
    Certificate --> signatureValue[签名值]
    tbsCertificate --> version[版本]
    tbsCertificate --> serialNumber[序列号]
    tbsCertificate --> signature[签名算法]
    tbsCertificate --> issuer[颁发者]
    tbsCertificate --> validity[有效期]
    tbsCertificate --> subject[主体]
    tbsCertificate --> subjectPublicKeyInfo[主体公钥信息]
    tbsCertificate --> issuerUniqueID[颁发者唯一标识符]
    tbsCertificate --> subjectUniqueID[主题唯一标识符]
    tbsCertificate --> extensions[扩展项]
    signature --> tbs_algorithm[算法标识]
    signature --> tbs_parameters[参数]
    issuer --> type[类型]
    issuer --> value[值]
    validity --> notbefore[起始时间]
    validity --> notafter[终止时间]
    subject --> sub_type[类型]
    subject --> sub_value[值]
    signatureAlgorithm --> algorithm[算法标识]
    signatureAlgorithm --> parameters[参数]
  • 如果签名算法为 SM2,无参数
  • 其中颁发者唯一 ID 和主体唯一 ID 在遵循国密时不应生成。

2.2. TBSCertificate

字段名称描述
Version证书版本,X.509 v1、v2 或 v3
Serial Number证书的唯一标识符
Signature Algorithm签名算法标识符
Issuer颁发者的名称
Validity证书的有效期,包括 NotBefore 和 NotAfter
Subject证书持有者的名称
Subject Public Key Info证书持有者的公钥信息
Issuer Unique Identifier颁发者唯一标识符(可选)
Subject Unique Identifier主体唯一标识符(可选)
Extensions扩展字段(可选)

2.2.1. 扩展信息

扩展信息(Extensions)是 X.509 v3 证书中的一个重要部分,用于提供额外的信息和功能。这些扩展信息允许证书包含更多的信息,使其更适用于特定的应用场景。每个扩展信息字段由三个部分组成:扩展标识符(extnID)、是否关键(critical)、和扩展值(extnValue)。

名称类型描述
extnID (扩展标识符)OBJECT IDENTIFIER唯一标识扩展类型的对象标识符(OID)。
critical (是否关键)BOOLEAN指示该扩展是否关键。如果是关键扩展(值为 TRUE),表示如果接收方无法识别或处理该扩展,则证书应被视为无效。默认为 FALSE。
extnValue (扩展值)OCTET STRING包含扩展的实际内容,根据 extnID 的不同而不同。
2.2.1.1. 常见的扩展类型
扩展类型OID描述
Authority Key Identifier2.5.29.35标识颁发者的公钥,用于验证证书链。
Subject Key Identifier2.5.29.14标识证书中主体的公钥,通常是公钥的哈希值。
Key Usage2.5.29.15定义公钥的用途,例如签名、加密等。
Extended Key Usage2.5.29.37指定公钥的其他用途,例如服务器身份验证、客户端身份验证等。
Certificate Policies2.5.29.32定义证书所遵循的策略。
Subject Alternative Name2.5.29.17允许一个实体拥有多个名称,例如多个域名或电子邮件地址。
CRL Distribution Points2.5.29.31指示证书吊销列表(CRL)的分发点。
Authority Information Access1.3.6.1.5.5.7.1.1提供有关证书颁发者的信息,如 OCSP 位置和 CA 颁发的证书 URL。
Subject Information Access1.3.6.1.5.5.7.1.11提供有关主体的信息,如时间戳、证书存储库等。

3. 代码实现

https://github.com/august295/EnDeCode

参考

本文由作者按照 CC BY 4.0 进行授权