添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
相关文章推荐
聪明的冰棍  ·  pybind11 + Mingw-w64 ...·  4 月前    · 
重感情的板凳  ·  SonarCloud not ...·  5 月前    · 
很拉风的丝瓜  ·  塔可钟要重回中国 ...·  5 月前    · 
沉着的烈马  ·  How to Set Up, Build, ...·  7 月前    · 


PEM 与 DER是用于存储、传输密钥和证书的标准格式,两者紧密关联,可以互相转换,下面详细介绍两种格式:

  • DER :Distinguished Encoding Rules,可分辩编码规则。DER格式文件后缀通常为 “.der” 和 “.cer”,后缀名并不会影响 DER 格式文件的解析。

  • PEM :Privacy-Enhanced Mail,隐私增强邮件。PEM格式文件后缀通常为".pem"、“.cer”、“.crt”、“.key”,后缀名并不会影响 PEM 格式文件的解析。

1. PEM 与 DER 关系:

ASN.1 ------(序列化)------ DER ------(Base64编码)------ PEM

对 ASN.1 序列化后,就会生成一个二进制串,这个就是 DER 格式,将二进制进行 Base64 编码,再加上 PEM 格式特有的头尾两行,就生成了 PEM 格式,如RSA私钥的PEM格式如下:

-----BEGIN RSA PRIVATE KEY-----
base64_decode(DER二进制)
-----END RSA PRIVATE KEY-----

2. PEM 与 DER 互相转换

上面了解了 PEM 与 DER 格式的关系,那么对它们进行互相转换就简单了。
下面先生成一个 RSA 私钥文件,该文件是 PEM 格式。生成命令如下:

openssl genrsa -out rsa_private.pem 2048

2.1 PEM 转 DER格式

先将 PEM 文件里面首尾的 “----BEGIN xxx----”“----END xxx----” 两行去掉,再将内容合并为一行(去掉换行符),最后将内容进行 Base64 解码,最后结果就是 DER 格式。通过 openssl 命令转换如下:

openssl rsa -in rsa_private.pem -outform DER -out rsa_private.der

2.2 DER 转 PEM 格式

先将 DER 二进制内容进行 Base64 编码,再按每行 64 个字节进行切分,最后在切分后的内容前后加上 “----BEGIN xxx----”“----END xxx----”。通过 openssl 命令转换如下:

openssl rsa -inform DER -in rsa_private.der -outform PEM -out rsa_private2.pem

3. DER 和 PEM 文件内容解析

上面提到过,DER 是对 ASN.1 结构对象序列化的结果,将DER的内容解析出来就是 ASN.1 结构。下面以 RSA 私钥为演示。

3.1 RSA 私钥 ASN.1结构

RSAPrivateKey ::= SEQUENCE {
  version           Version,
  modulus           INTEGER,  -- n
  publicExponent    INTEGER,  -- e
  privateExponent   INTEGER,  -- d
  prime1            INTEGER,  -- p
  prime2            INTEGER,  -- q
  exponent1         INTEGER,  -- d mod (p-1)
  exponent2         INTEGER,  -- d mod (q-1)
  coefficient       INTEGER,  -- (inverse of q) mod p
  otherPrimeInfos   OtherPrimeInfos OPTIONAL

3.2 通过 openssl 命令解析 DER 结构

执行 openssl 命令:

openssl rsa -inform der -in rsa_private.der -text -noout

结果详情(有删减):

RSA Private-Key: (2048 bit, 2 primes)
modulus:
    00:da:d7:8c:0a:86:b4:cc:34:b5:b0:3a:64:00:13:
publicExponent: 65537 (0x10001)
privateExponent:
    15:56:6a:eb:23:d3:41:0d:ea:a1:32:30:49:e9:99:
prime1:
    00:f2:4f:63:7a:d3:cb:fb:ca:9d:77:2f:ba:88:0a:
prime2:
    00:e7:34:bb:28:ab:c1:c8:10:74:19:a4:45:04:b5:
exponent1:
    1a:95:67:1e:94:99:ee:77:de:2a:b3:4b:cd:9d:07:
exponent2:
    00:d5:d6:99:7b:a6:4f:d6:00:11:c1:5d:83:50:35:
coefficient:
    00:c4:91:79:ab:09:f7:8c:c4:9d:81:1c:54:95:6e:

3.3 通过 openssl 命令解析 PEM 结构

将 PEM 格式文件解析内容,不需要先将其转换成 DER 结构,openssl 命令可以直接将 PEM 格式文件解析出来,命令如下:

openssl rsa -inform pem -in rsa_private.pem -text -noout

解析结果和上面 DER 格式内容是一样的。

PEM是一种常见的证书编码方式,它使用base64编码将二进制的X.509格式证书进行编码,再使用ASCII字符加上起始和结束标记,即 -----BEGIN CERTIFICATE----- 和 -----END CERTIFICATE-----,加入换行符等标记符号来标识证书数据。它是一个基于ASN.1数据格式的证书结构,在PEM格式下,通常以 -----BEGIN CERTIFICATE----- 和 -----END CERTIFICATE----- 对包含在中间的编码数据进行标识。 一个简单的ASN.1格式解析工具,可将ASN.1格式输出。ASN.h(.cpp)包含了ASN.1格式解析类,ASNFileParse.cpp中提供了常用的pem文件、der文件的解析。本源码未使用Openssl库。 开发环境:Windows+VS2010 Der 、Cer、 Pfx、 Pem它们都是扩展名(文件名的后缀,代表格式) .DER:用二进制DER编码的证书;.PEM:用ASCLL(BASE64)编码的证书;.CER:存放公钥,没有私钥;.PFX:存放公钥和私钥(pem 后缀的证书都是base64编码;der 后缀的证书都是二进制格式;crt .cer 后缀的文件都是证书文件(编码方式不一定,有可能是.pem,也有可... Basic Encoding Rules (BER) Canonical Encoding Rules (CER) Distinguished Encoding Rules (DER)... 而CRT, CER,KEY这几种证书和密钥文件,它们都有自己的schema,在存储为物理文件时,既可以是PEM格式,也可以DER格式。 CER:一般用于windows的证书文件格式 CRT:一般用于Linux的证书,包含公钥和主体信息 KEY:一般用于密钥,特别是私钥 打个比方:CE 本文导航1 前言2 PEMDER转换2.1 PEMDER格式2.2 DERPEM格式3 DER解码3.1 初步解码3.2 DER文件结构3.3 解码*关于BIT_STRING和modulus部分数据以0x00开头的说明*Ref 最近在玩CTF,还没入门,做题的时候遇到一道RSA的题,给了一个pubkey.pem文件和一个flag.enc文件。之前对于rsa的认识停留在ssh的时候生成公钥和私钥文件,但是文件里面具体内容没有关注过,所以打开pubkey.pem文件后不知道怎么处理。 看了网上都 实际上,术语X.509证书通常指的是IETF的PKIX证书和X.509 v3证书标准的CRL 文件,即如RFC 5280(通常称为PKIX for Public Key Infrastructure(X.509))中规定的。CER = .crt的替代形式(Microsoft Convention)您可以在微软系统环境下将.crt转换为.cer(.both DER编码的.cer,或base64 [PEM]编码的.cer)。正确的说法是“我有一个DER编码的证书”不是“我有一个DER证书”。 OpenSSL 可以将所有算法(RSA、DSA、EC)的私钥包装在通用和标准的 PKCS#8 结构中,但它也支持单独的 每种算法的“遗留”结构,尽管文档已将 PKCS#8 标记为优越近 20 年,但两者仍被广泛使用;[3] 由于DER产生的是二进制格式数据,在许多系统(如电子邮件)中传输不变,所以需要ASCII表示DER格式的数据,即PEM格式。它包含证书颁发机构为请求者创建和签署证书所需的公钥和通用名称等信息,编码可以是 PEMDER(这是 ASN.1 指定结构的二进制编码); rsync is very popular synchronization tool used in Linux environment. Rsync communication is clear text by default. This makes rsync vulnerable man in the middle attacks. How can we make rsync secure ... DER是一种编码方法,本身可以表示任何类型的数据,但通常用来编码证书。证书的结构使用ASN.1(Abstract Syntax Notation One 一种数据描述语言)描述。 BER和DER都是二进制编码方法。PEM是一种将二进制数据编码为字符串的方法。它包含header和footer,用来指定数据的开始和结束,header和footer中间是base64数据。如果数据是证书,那么会简单的编码DER证书。PEM代表Privacy Enhanced Mail;PEM格式如下 whatever可以是priv