数字证书格式
数字证书格式
该文主要介绍数字证书格式。
数字证书格式
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 Identifier | 2.5.29.35 | 标识颁发者的公钥,用于验证证书链。 |
Subject Key Identifier | 2.5.29.14 | 标识证书中主体的公钥,通常是公钥的哈希值。 |
Key Usage | 2.5.29.15 | 定义公钥的用途,例如签名、加密等。 |
Extended Key Usage | 2.5.29.37 | 指定公钥的其他用途,例如服务器身份验证、客户端身份验证等。 |
Certificate Policies | 2.5.29.32 | 定义证书所遵循的策略。 |
Subject Alternative Name | 2.5.29.17 | 允许一个实体拥有多个名称,例如多个域名或电子邮件地址。 |
CRL Distribution Points | 2.5.29.31 | 指示证书吊销列表(CRL)的分发点。 |
Authority Information Access | 1.3.6.1.5.5.7.1.1 | 提供有关证书颁发者的信息,如 OCSP 位置和 CA 颁发的证书 URL。 |
Subject Information Access | 1.3.6.1.5.5.7.1.11 | 提供有关主体的信息,如时间戳、证书存储库等。 |
3. 代码实现
https://github.com/august295/EnDeCode
参考
本文由作者按照 CC BY 4.0 进行授权