DER编码过程
1. 编码内容
- countryName = “CN”
- organizationName = "20211412"
- commoaName = "laijiayi"
2. 编码过程
- 得出编码内容的ASCII十六进制
- CN 43 4e
- laijiayi 6c 61 69 6a 69 61 79 69
- 20211412 32 30 32 31 31 34 31 32
2.1 attributeType编码
- 定长模式
- 标识串:低位标识编码,1个字节。
- 长度串:短型编码,1个字节
- 内容串:二个类型有对应的OID,对应不同的内容串,3个字节
| attributeType | OID | 标识串 | 长度串 | 内容串 |
| ---------------- | -------- | ------ | ------ | -------- |
| countryName | 2.5.4.6 | 06 | 03 | 55 04 06 |
| organizationName | 2.5.4.10 | 06 | 03 | 55 04 0A |
| commoaName | 2.5.4.3 | 06 | 03 | 55 04 03 |
2.2 attributeValue编码
- 长度串——短型编码,1个字节
- 内容串——对应内容的ASCII码
attributeVaule |
标识串 |
长度串 |
内容串 |
"CN" |
13 |
02 |
43 4E |
"20211412" |
13 |
08 |
32 30 32 31 31 34 31 32 |
"laijiayi" |
13 |
08 |
6c 61 69 6a 69 61 79 69 |
2.3 attributeValueAssertion编码
- 标识串——低标识编码方式,1个字节
- 长度串——短型编码,1个字节
- 内容串——由attributeType和attributeValue的DER编码组成
attributeValueAssertion |
标识串 |
长度串 |
内容串 |
countryName = “CN” |
30 |
09 |
06 03 55 04 06 13 02 43 4E |
organizationName = "20211412" |
30 |
0F |
06 03 55 04 0A 13 08 32 30 32 31 31 34 31 32 |
commoaName = "laijiayi" |
30 |
11 |
06 03 55 04 03 13 0A 6A 69 61 6E 67 6A 69 61 79 75 |
2.4 RelativeDistinguishedName编码
- 标识串——低标识编码方式,1个字节
- 长度串——短型编码,1个字节
- 内容串——由attributeValueAssertion的DER编码组成
RelativeDistinguishedName |
标识串 |
长度串 |
内容串 |
countryName = “CN” |
31 |
0B |
30 09 06 03 55 04 06 13 02 43 4E |
organizationName = "20181318" |
31 |
11 |
30 0F 06 03 55 04 0A 13 08 32 30 31 38 31 33 31 38 |
commoaName = "jiangjiayu" |
31 |
13 |
30 11 06 03 55 04 03 13 0A 6A 69 61 6E 67 6A 69 61 79 75 |
2.5 RDNSequence编码
- RDNSequence是SEQUENCE OF结构类型,编码规则采用结构类型定长模式。
- 标识串——低标识编码方式,1个字节
- 长度串——短型编码,1个字节
- 内容串——由3个RelativeDistinguishedName的DER编码拼接而成
RDNSequence |
标识串 |
长度串 |
内容串 |
countryName = “CN” |
30 |
35 |
31 0B 30 09 06 03 55 04 06 13 02 43 4E 31 11 30 0F 06 03 55 04 0A 13 08 32 30 31 38 31 33 31 38 31 13 30 11 06 03 55 04 03 13 0A 6A 69 61 6E 67 6A 69 61 79 75 |
2.6 Name编码
- Name为CHOICE类型,其DER编码值与RDNSequence相同
- 最终编码值如下:
30 35 31 0B 30 09 06 03 55 04 06 13 02 43 4E 31 11 30 0F 06 03 55 04 0A 13 08 32 30 31 38 31 33 31 38 31 13 30 11 06 03 55 04 03 13 0A 6A 69 61 6E 67 6A 69 61 79 75
用OpenSSL asn1parse 分析编码的正确性
openssl asn1parse [-inform PEM|DER] [-in filename] [-out filename] [-noout] [-offset number] [-length number] [-i] [- structure filename] [-strparse offset]
openssl asn1parse -inform DER -in 20211412.der