ASN.1,DER和PEM关系

304 阅读1分钟

基本概念

  • ASN.1 (Abstract Syntax Notation dotone)抽象语法标记1,定义了一种规则用于描述数据类型

  • DER (Distinguished Encoding Rules) 定义一种编码规则用来保存ASN.1 DER和ASN.1

  • PEM (Privacy-Enhanced Mail) 将DER的base64编码后的内容并添加首尾行的ASCII文本

  • X.509 是ITU(International Telecommunication Union)定义了公钥证书体系的格式,规定了如何使用ASN.1来保存体系所用到的数据结构

之间的关系可以用下面的映射来描述

X.509 : Public Key->ASN.1

DER : ASN.1->Binary Data

PEM : Binary Data->String

示例

RSA公钥编码成PEM文件的流程如下

RSA公钥 -> X509规定公钥在ASN.1的描述 -> DER编码 -> PEM编码

可以使用Openssl获取PEM,并且解析DER对应的ASN.1的结构

openssl genrsa -out key.pem 2048 // 生成2048位RSA的私钥

openssl rsa -in key.pem -outform PEM -pubout -out public.pem // 通过私钥生成公钥并保存为PEM格式

openssl rsa -pubin -inform PEM -outform der -in public.pem -out public.der // PEM格式转为DER格式

openssl asn1parse -inform DER  -in public.der // 解析获取ASN.1的数据结构

最后一步输出结果

    0:d=0  hl=4 l= 290 cons: SEQUENCE
    4:d=1  hl=2 l=  13 cons: SEQUENCE
    6:d=2  hl=2 l=   9 prim: OBJECT            :rsaEncryption
   17:d=2  hl=2 l=   0 prim: NULL
   19:d=1  hl=4 l= 271 prim: BIT STRING

X509规定公钥使用下面的ASN.1的结构描述

PublicKeyInfo ::= SEQUENCE {
  algorithm   AlgorithmIdentifier,
  PublicKey   BIT STRING
}

AlgorithmIdentifier ::= SEQUENCE {
  algorithm   OBJECT IDENTIFIER,
  parameters  ANY DEFINED BY algorithm OPTIONAL
}

和上面通过Openssl解析DER文件获取到的ASN.1结构是一致的

参考资料

  1. en.wikipedia.org/wiki/ASN.1
  2. www.itu.int/ITU-T/recom…
  3. stackoverflow.com/questions/2…