1 什么是数字证书
数字证书是指在互联网通讯中标志通讯各方身份信息的一个数字认证,人们可以在网上用它来识别对方的身份。
因此数字证书又称为数字标识。数字证书对网络用户在计算机网络交流中的信息和数据等以加密或解密的形式保证了信息和数据的完整性和安全性。
2 数字证书长什么样
标准的证书格式如下:
dart
Certificate:
Data:
Version: 3 (0x2)
Serial Number: 1 (0x1)
Signature Algorithm: sha256WithRSAEncryption
Issuer: C=CN, ST=GuangDong, L=ShenZhen, O=TangTring, CN=SubCA
Validity
Not Before: Sep 24 08:22:57 2024 GMT
Not After : Sep 23 08:22:57 2029 GMT
Subject: C=CN, ST=GuangDong, L=ShenZhen, O=TangTring, CN=SPNM04_CN
Subject Public Key Info:
Public Key Algorithm: rsaEncryption
Public-Key: (2048 bit)
Modulus:
00:e4:5c:fd:94:01:11:47:8e:25:6a:76:42:1d:65:
bc:68:dd:52:ba:1b:0e:43:98:c9:f2:27:a9:bb:13:
a1:e9:76:43:e3:ac:c7:7e:ab:2e:cf:fc:e6:72:0a:
1f:b4:0d:6c:dc:f1:c7:09:b2:09:72:d2:8f:53:6f:
65:bf:1a:4d:dc:80:ca:5c:c0:66:be:4c:8a:77:e5:
47:95:b6:96:eb:75:83:13:09:95:d6:e8:3c:ac:bf:
e3:96:54:b7:c6:16:ea:5c:84:15:9a:c7:9a:22:c5:
33:60:97:30:63:1d:37:c0:8a:6d:b4:50:1f:86:99:
86:1c:88:0e:bf:9e:db:c6:03:e2:85:90:32:53:2a:
7c:72:7c:40:1f:d7:ba:46:88:56:d8:5d:7c:c1:0c:
4f:95:4a:ec:53:5f:63:cf:fc:aa:43:b9:f0:23:e2:
f9:4c:29:30:95:4f:3b:57:af:51:ff:27:05:f9:4f:
15:63:2f:34:92:c6:b3:ad:fd:21:3b:9d:36:b0:c1:
6b:12:9c:60:d9:15:85:8f:d2:f1:ee:3c:1e:d3:c9:
f0:86:ee:57:36:0c:07:2a:c6:d6:85:aa:96:a2:a4:
7b:5c:8f:c1:22:3c:d5:4e:23:47:fa:99:87:fc:5c:
90:3d:5f:3d:f4:57:e6:40:c2:a9:7d:6b:47:09:87:
10:ef
Exponent: 65537 (0x10001)
X509v3 extensions:
X509v3 Basic Constraints:
CA:FALSE
X509v3 Subject Alternative Name:
DNS:SPNM04_CN.cn, DNS:bbs.SPNM04_CN.cn
X509v3 Subject Key Identifier:
C1:B6:B5:FC:8A:8D:8A:21:E9:60:DE:5B:8C:C1:AB:CA:59:44:57:D4
X509v3 Authority Key Identifier:
B6:CC:8A:AD:75:53:3A:5A:95:3D:53:20:7B:87:2E:E4:8A:90:63:F9
Signature Algorithm: sha256WithRSAEncryption
Signature Value:
24:2c:17:dc:80:0b:a4:61:20:18:f6:70:0b:72:26:a5:44:41:
af:8c:76:be:d3:a9:25:e1:26:95:a2:5c:2c:5d:bd:7b:26:00:
91:29:69:5b:20:4c:09:4a:4d:7a:b6:41:8e:d3:b7:df:7e:05:
26:af:7f:4a:d4:97:88:10:d9:61:1b:03:1a:b4:48:db:0c:c8:
fc:ec:58:49:dc:50:c5:8a:1c:22:7e:4a:40:a2:b3:43:b8:f9:
f6:32:98:6e:31:46:2e:bd:2a:7e:ca:ba:07:2d:c3:9b:5f:14:
33:2e:99:64:c0:dc:74:d3:a3:10:4c:7d:9f:26:59:5e:d5:a4:
c7:1a:c2:08:9a:fd:eb:4d:7e:9a:23:78:94:7c:f0:1b:a5:2d:
81:35:71:84:b1:66:dd:4e:b7:78:f6:79:ed:b6:37:e2:e8:9d:
89:25:3e:94:76:78:00:20:d7:3f:9d:e1:71:ea:e1:5a:2d:da:
c5:20:70:65:e5:9d:48:06:91:3a:5f:d3:92:0a:68:f2:84:de:
a3:3f:11:10:f3:61:be:a8:eb:85:88:a1:95:f8:a5:c7:bf:d9:
85:a7:8e:5e:38:3f:3c:dc:e3:41:0d:9d:94:c8:d5:3f:c3:33:
59:21:da:47:03:10:49:78:12:5f:ca:55:9b:e2:54:b9:bd:75:
92:0d:d7:79
简化版的如下:

3 证书字段介绍
3.1 Version
该字段描述了证书的版本,当证书使用了extension,version值必须为3(值为2)。如果没有使用extension,但使用了UniqueIdentifier,version为2(值为1)或3,如果仅存在基本字段时,version可以为1,2,3。
dart
Version: 3 (0x2)
3.2 Serial Number
CA分配给证书的serial number必须是一个正整数。CA分配的证书中的serial number必须是唯一的(使用issuer name和serial number来确定一个唯一的 证书)。serial number最大20字节。
dart
Serial Number:
0e:54:02:f5:ea:9a:7a:8b:9d:ea:26:48:ae:06:74:3f
3.3 signatureAlgorithm
signatureAlgorithm字段包含了CA用来签署该证书的识别码。[RFC3279], [RFC4055]和[RFC4491]给出了支持的签名算法,但也可能采用其他签名算法。
dart
Signature Algorithm: sha256WithRSAEncryption
3.4 Issuer
issuer字段表示签名并颁发证书的实体。该字段必须包含非空的DN(distinguished name)。issuer字段为X.501格式的Name[X.501]
dart
Issuer: C=CN, ST=GuangDong, L=ShenZhen, O=TangTring, CN=SubCA
3.5 Validity
CA会维护其授权的证书的有效周期。该字段包含2个SEQUENCE的时间数据,一个为起始时间(notBefore),一个为结束时间(notAfter)。两个时间均使用UTCTime或GeneralizedTime编码。
dart
Validity
Not Before: Sep 24 08:22:57 2024 GMT
Not After : Sep 23 08:22:57 2029 GMT
3.6 Subject
subject字段表示与存储在subject的public key字段的public key相关的实体。subject可能存在于subject字段和/或 subjectAltName扩展字段中。如果subject为一个CA(即X509v3 Basic Constraints值为TRUE),则subject字段必须为一个与该CA颁发的证书的issuer字段相匹配的非空DN。如果subject为一个CRL issuer(即key usage扩展中cRLSign为TRUE),则subject字段必须为一个与该CRL颁发的CRLs的issuer字段相匹配的非空DN。如果subject的信息仅存在于subjectAltName扩展中(仅于Email地址或URI相关),则subject name必须为非空结构且subjectAltName扩展必须为critical。
dart
Subject: C=CN, ST=GuangDong, L=ShenZhen, O=TangTring, CN=SPNM04_CN
3.7 Subject Public Key Info
该字段包含了public key以及key使用的算法。具体可以参见[RFC3279], [RFC4055]以及[RFC4491].
3.8 Extensions
仅在版本为3的时候出现。若出现,该字段为SEQUENCE类型的一个或多个证书扩展。
3.9 signatureValue
signatureValue包含对(ASN.1 DER编码的)tbsCertificate字段的数字签名,此时tbsCertificate作为签名函数的输入。该签名值使用BIT STRING编码。各个签名算法的细节可以参见[RFC3279], [RFC4055]和[RFC4491]。
为了生成该签名,CA需要对tbsCertificate中的字段进行有效性判断。特别地,CA需要对证书中的public key与subject的关联性进行有效性判断。
signatureValue位于证书的末尾,由CA签署生成
4 证书请求过程

1 生成证书签名请求CSR