数字证书编码
1. 对Extension进行DER编码
Extension为 SEQUENCE结构类型,不同扩展项DER编码值包含在OCTET STRING类型extn Value 中,编码规则采用结构类型定长模式。各扩展项DER编码值用括号分隔。其中,对于 BIT STRING类型,编码后第1个字节表示填充位数或未使用位数。
2. 对TBSCertificate 进行DER编码
序列号=1174(0x0496),证书签发者 DN="CN=Virtual CA,C=CN",证书持有者DN="CN=你的名字拼音, OU=Person,C=CN",证书有效期=20200222000000-20220222000000,参考表13-3进行更改。
TBSCertificate | 标识符 | 长度串 | 内容串 |
---|---|---|---|
version [0] EXPLICIT |
A0 | 03 | 02 01 02 |
serialNumber | 02 | 02 | 04 96 |
signature | 30 | 0D | 06 09 2A 86 48 86 F7 0D 01 01 05 05 00 |
issuer | 30 | 22 | 31 0B 30 09 06 03 55 04 06 13 02 43 4E 31 13 30 11 06 03 55 04 03 13 0A 56 69 72 74 75 61 6C 20 43 41 |
validity | 30 | 1E | 17 0D 32 30 30 32 32 31 31 36 30 30 30 30 5A(2020) 17 0D 32 32 30 32 32 31 31 36 30 30 30 30 5A(2022) |
subjeet | 30 | 32 | 31 0B 30 09 06 03 55 04 06 13 02 43 4E(CN) 31 0F 30 0D 06 03 55 04 0B 13 06 50 65 72 73 6F 6E(Person) 31 12 30 10 06 03 55 04 03 13 09 7A 68 75 79 6F 75 6D 69 6E(zhuyoumin) |
subjectPublicKeylnfo | 30 | 81 9F | 30 0D 06 09 2A 86 48 86 F7 0D 01 01 01 05 00 03 81 8D 00 30 81 89 02 81 81 00 B4 F6 CF 18 3D 5E 8E 1D 46 7A 90 7D 8E 41 D2 E3 C8 F1 A3 AE F3 6D 8A 24 FF 55 23 25 BD EB 0C D0 7B 87 36 5D 1F 73 98 65 3E 57 97 F6 65 7D 13 E0 E1 B5 FC BC 38 6F 56 3E 57 4E D6 51 1D 13 12 7C 33 B3 60 31 79 32 07 97 F3 3C 8B 29 0D B5 78 38 93 CE 84 E4 A3 DD FB F9 25 47 1C 72 A6 5E 78 02 CF F3 48 9D CA D9 00 73 DE 4B 16 07 52 48 20 06 F3 4F CA A5 2D 66 88 95 C6 6C D6 3F 61 34 F7 E3 02 03 01 00 01 |
extensions[3] EXPLICIT |
A3 | 81 9F | 30 81 9C 30 0C 06 03 55 1D 13 01 01 FF 04 02 30 00 30 1D 06 03 55 1D 0E 04 16 04 14 2C 04 87 10 60 FC 61 F6 2B 64 81 3D FB 66 30 DA F0 73 BC 08 30 0E 06 03 55 1D 0F 01 01 FF 04 04 03 02 03 F8 30 29 06 03 55 1D 25 04 22 30 20 06 08 2B 06 01 05 05 07 03 02 06 0A 2B 06 01 04 01 82 37 14 02 02 06 08 2B 06 01 05 05 07 03 04 30 11 06 09 60 86 48 01 86 F8 42 01 01 04 04 03 02 05 A0 30 1F 06 03 55 1D 23 04 18 30 16 80 14 96 F0 94 F8 49 8D 23 05 86 B0 CA B5 2D 7A 9A 60 32 FB B0 F9 |
TBSCertificate | 30 | 82 01 D4 | A0 03---0102:version 02 02---04 96:serialNumber 30 0D---05 00: signature 30 22---43 41: issuer 30 1E--30 5A: validity 30 32---61 6E: subject 30 81---00 01: subjectPublicKeyInfo A3 81---BO F9:extensions |
3. 对Certificate 进行DER编码
对于标识串,采用低标识编码方式,只需1个字节。SEQUENCE的 tag 为0x10;class选择universal,则位8和位7为0,SEQUENCE为结构类型,则位6为1。因此,标识串=0x30。
对于长度串,采用短型编码方式,只需1个字节。
对于内容串,由AttributeType和 AttributeValue的 DER编码值组成。
Certificate | 标识符 | 长度串 | 内容串 |
---|---|---|---|
tbsCertificatc | 30 | 82 01 D4 | A0 03---B0 F9 |
signatureAlgorithm | 30 | 0d | 06 09 2A 86 48 86 F7 0D 01 01 05 05 00 |
signaturevalue | 30 | 82 01 01 | 00 8d 42---CC 81 |
Certificate | 30 | 82 02 EC | 30 82---B0 F9: tbsCertificatc 30 0D---05 00: signatureAlgorithm 03 82---CC 81: signatureVaiue |
4. Name编码
最终编码为:
\xA0\x03\x02\x01\x02\x02\x02\x04\x96\x30\x0D\x06\x09\x2A\x86\x48\x86\xF7\x0D\x01\x01\x05\x05\x00\x30\x22\x31\x0B\x30\x09\x06\x03\x55\x04\x06\x13\x02\x43\x4E\x31\x13\x30\x11\x06\x03\x55\x04\x03\x13\x0A\x56\x69\x72\x74\x75\x61\x6C\x20\x43\x41\x30\x20\x17\x0E\x32\x30\x32\x30\x30\x32\x32\x32\x30\x30\x30\x30\x30\x30\x17\x0E\x32\x30\x32\x32\x30\x32\x32\x32\x30\x30\x30\x30\x30\x30\x30\x32\x31\x0B\x30\x09\x06\x03\x55\x04\x06\x13\x02\x43\x4E\x31\x0F\x30\x0D\x06\x03\x55\x04\x0B\x13\x06\x50\x65\x72\x73\x6F\x6E\x31\x12\x30\x10\x06\x03\x55\x04\x03\x13\x09\x7A\x68\x61\x6E\x67\x79\x61\x6F\x79\x75\x61\x6E