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