一、名词解释

这里先介绍一下X.690,它是ITU-T标准,规定了几种ASN.1编码格式:
Basic Encoding Rules (BER)
Canonical Encoding Rules (CER)
Distinguished Encoding Rules (DER)
关于X.690知道上面的关系就可以了,在此我不做更多介绍。有兴趣的读者可以自行google。
注意,上面编码格式CER是一种和DER很相似的编码格式,与后文提到的.cer后缀没有任何关系。大家最好忘记它。

这里我们先看看wiki上对于DER和PEM是怎么说的。

1.DER (Distinguished Encoding Rules)

DER是BER的一个受限变体,用于为ASN.1中描述的数据结构生成明确的传输语法。与CER一样,DER编码也是有效的BER编码。DER除了删除了一个发送者选项外,其他的与BER完全相同。
DER是BER的子集,提供了一种准确编码ASN.1值的方法。DER适用于需要唯一编码情况,例如在加密中,确保需要进行数字签名的数据结构产生一个唯一的序列化表示。DER可以被认为是BER的规范形式。例如,在BER中,布尔值true可以编码为255个非零字节值中的任何一个,而在DER中,只有一种方法编码布尔值true。
DER被广泛的用户数字证书,例如X.509。

2.PEM (Privacy-Enhanced Mail)

pem 是一种基于一组定义“隐私增强邮件”的1993 IETF标准的文件格式,用于存储和发送加密密钥,证书和其他数据。虽然原始标准从未被广泛采用,并已经被PGP和S / MIME取代,但它们定义的文本编码方式流行起来了。PEM格式最终由IETF在RFC 7468中正式确定。
许多加密标准使用ASN.1来定义它们的数据结构,使用区分编码规则(Distinguished Encoding Rules,DER)来序列化这些结构。由于DER 产生二进制输出,它在传输结果文件通过只支持ASCII的系统系统时,具有很大的挑战性,比如通过电子邮件系统时。PEM格式则使用Base64编码二进制数据的方式解决了这个问题。PEM还定义了其文件格式

  1. 1. -----BEGIN (label) -----
  2. 2. ...
  3. 3. -----END (label) -----

这个 label 决定了被编码消息的类型,通常这些类型有如下一些:
CERTIFICATE“, “CERTIFICATE REQUEST“, “PRIVATE KEY“ and “X509 CRL“.
PEM 格式的数据通常存储在以 “.pem“,”.cer“,”.crt“(证书)或者”.key“(公钥或私钥)为后缀的文件中。这个PEM文件中的lable字段比文件后缀名更加准确地代表了数据类型,因为许多不同类型的数据都可以保存在”.pem“结尾的文件中。
一个PEM文件可能包含了多个实例。比如,一个操作系统可能提供一个含有一系列信任的”CA证书”,或者web服务器可能配置了一个”证书链”,该证书链包含了一个客户端证书加一系列的中间证书。
例子
一个PEM编码的证书文件:

  1. 1. -----BEGIN CERTIFICATE-----
  2. 2. MIICLDCCAdKgAwIBAgIBADAKBggqhkjOPQQDAjB9MQswCQYDVQQGEwJCRTEPMA0G
  3. 3. A1UEChMGR251VExTMSUwIwYDVQQLExxHbnVUTFMgY2VydGlmaWNhdGUgYXV0aG9y
  4. 4. aXR5MQ8wDQYDVQQIEwZMZXV2ZW4xJTAjBgNVBAMTHEdudVRMUyBjZXJ0aWZpY2F0
  5. 5. ZSBhdXRob3JpdHkwHhcNMTEwNTIzMjAzODIxWhcNMTIxMjIyMDc0MTUxWjB9MQsw
  6. 6. CQYDVQQGEwJCRTEPMA0GA1UEChMGR251VExTMSUwIwYDVQQLExxHbnVUTFMgY2Vy
  7. 7. dGlmaWNhdGUgYXV0aG9yaXR5MQ8wDQYDVQQIEwZMZXV2ZW4xJTAjBgNVBAMTHEdu
  8. 8. dVRMUyBjZXJ0aWZpY2F0ZSBhdXRob3JpdHkwWTATBgcqhkjOPQIBBggqhkjOPQMB
  9. 9. BwNCAARS2I0jiuNn14Y2sSALCX3IybqiIJUvxUpj+oNfzngvj/Niyv2394BWnW4X
  10. 10. uQ4RTEiywK87WRcWMGgJB5kX/t2no0MwQTAPBgNVHRMBAf8EBTADAQH/MA8GA1Ud
  11. 11. DwEB/wQFAwMHBgAwHQYDVR0OBBYEFPC0gf6YEr+1KLlkQAPLzB9mTigDMAoGCCqG
  12. 12. SM49BAMCA0gAMEUCIDGuwD1KPyG+hRf88MeyMQcqOFZD0TbVleF+UsAGQ4enAiEA
  13. 13. l4wOuDwKQa+upc8GftXE2C//4mKANBC6It01gUaTIpo=
  14. 14. -----END CERTIFICATE-----

一个 PEM编码的证书签名请求文件:

  1. 1. -----BEGIN CERTIFICATE REQUEST-----
  2. 2. MIICXTCCAUUCAQAwGDEWMBQGA1UEAwwNaGkgd2lraXBlZGlhITCCASIwDQYJKoZI
  3. 3. hvcNAQEBBQADggEPADCCAQoCggEBAMTwzCYD+iLlDwTu5Y43aQH9q1LF3kgot8I4
  4. 4. 9ZgbFhDmCE4YlLhZKO4hieK6z8z+IfZjfapn01rzuzvTHESj5bSSU6AcEsKSOgTQ
  5. 5. uB+KKn4mgngyBrJwWjr4IZ9XkGsCLAP2/wkyJC2ire6FuTSQ00YGhKf1B3WbIBbn
  6. 6. 5i1rvZXnYxlheWlNSmxx54q4gTwcd/V4nS4BThYA/ypATjHS/gfQ650cOQzRK/Jh
  7. 7. WfAbfnETYUpD6MCgZAIbaBuYvYpQEGqQ4niTvtSd07RHKnewcPFqJhMV86qN4HQY
  8. 8. 4ZBNzQcF/2aCGHYyRniKznSDNijT2kaAz/L7ORqh+90qH/BLnKsCAwEAAaAAMA0G
  9. 9. CSqGSIb3DQEBCwUAA4IBAQAqV5g9AZGXEbM97ouTGDJqFNP2QjO9ZK9J3BOUTrFO
  10. 10. tMUrVWj+ixhC6vXD3o5uVL/fg6OlmK+13gsBpzg2mq72TBrZsNOK4+O0XvltIvSx
  11. 11. 0H5tf1NYwuHxFgHDqgs/fQBOKFTadebJZHbPBtMrqlnenKYJiVb5YSWBZ7JKRCK7
  12. 12. VSgwNxxAMnSCNI0xF3EjZ1bjQkM8xGhnwe+n/RAd5Q2pMLIrquMoGMTUYLOq1xSB
  13. 13. sGTp8iLWbbWPl6gC1hcSMpFsbdyjMCWs+a2R2F8QnahrRfvpgFEndvzA2EvqHIoR
  14. 14. BHE1ChD7l691PxZP1eKA1I4AzZno5sb6SWyd8+pqY0oG
  15. 15. -----END CERTIFICATE REQUEST-----

3.PKCS (Public Key Cryptography Standards)

在密码学里,PKCS代表”Public Key Cryptography Standards”(公开密钥密码学标准)。这些是RSA Security LLC从上世纪90年代初开始设计并发布的一组公钥加密标准。该公司发布这些标准是为了推广使用他们拥有专利的加密技术,比如RSA算法、Schnorr签名算法和其他一些技术。虽然不是行业标准(因为公司保留了对它们的控制),但近年来,一些标准已经开始进入相关标准组织的“标准跟踪”过程,如IETF和PKIX工作组。
PKCS 标准概况

Version Name Comments
PKCS #1 2.2 RSA Cryptography Standard
RSA加密算法标准
See RFC 8017. Defines the mathematical properties and format of RSA public and private keys (ASN.1-encoded in clear-text), and the basic algorithms and encoding/padding schemes for performing RSA encryption, decryption, and producing and verifying signatures.
定义RSA公钥和私钥的数学属性和格式(asn .1以明文编码),以及用于执行RSA加密、解密、生成和验证签名的基本算法和编码/填充方案。
PKCS #2 - Withdrawn
撤销
No longer active as of 2010. Covered RSA encryption of message digests; subsequently merged into PKCS #1.
从2010年起不再活跃。包含RSA加密的消息摘要;随后合并为PKCS #1
PKCS #3 1.4 Diffie–Hellman Key Agreement Standard
DH密钥协议标准
A cryptographic protocol that allows two parties that have no prior knowledge of each other to jointly establish a shared secret key over an insecure communications channel.
一种密码协议,允许双方在不安全的通信信道上共同建立一个共享密钥。
PKCS #4 - Withdrawn
撤销
No longer active as of 2010. Covered RSA key syntax; subsequently merged into PKCS #1.
从2010年起不再活跃。包含RSA密钥语法;随后合并为PKCS #1。
PKCS #5 2.1 Password-based Encryption Standard
基于密码的加密标准
See RFC 8018 and PBKDF2.
PKCS #6 1.5 Extended-Certificate Syntax Standard
扩展证书语法标准
Defines extensions to the old v1 X.509 certificate specification. Obsoleted by v3 of the same.
定义对旧的v1 X.509证书规范的扩展。被v3淘汰了。
PKCS #7 1.5 Cryptographic Message Syntax Standard
密码消息语法标准
See RFC 2315. Used to sign and/or encrypt messages under a PKI. Used also for certificate dissemination (for instance as a response to a PKCS #10 message). Formed the basis for S/MIME, which is as of 2010 based on RFC 5652, an updated Cryptographic Message Syntax Standard (CMS). Often used for single sign-on.
用于在PKI下签名和/或加密消息。还用于证书分发(例如作为对PKCS #10消息的响应)。形成了S/MIME的基础,这是2010年基于RFC 5652,一个更新的加密消息语法标准(CMS)。通常用于单点登录。
PKCS #8 1.2 Private-Key Information Syntax Standard
私钥信息语法标准
See RFC 5958. Used to carry private certificate keypairs (encrypted or unencrypted).
用于携带私有证书密钥对(加密或未加密)。
PKCS #9 2.0 Selected Attribute Types
选择属性类型
See RFC 2985. Defines selected attribute types for use in PKCS #6 extended certificates, PKCS #7 digitally signed messages, PKCS #8 private-key information, and PKCS #10 certificate-signing requests.
定义用于PKCS #6扩展证书、PKCS #7数字签名消息、PKCS #8私有密钥信息和PKCS #10证书签名请求的选定属性类型。
PKCS #10 1.7 Certification Request Standard
证书签名请求标准
See RFC 2986. Format of messages sent to a certification authority to request certification of a public key. See certificate signing request.
发送给认证机构要求认证公钥的消息的格式。
PKCS #11 2.40 Cryptographic Token Interface
加密令牌接口
Also known as “Cryptoki”. An API defining a generic interface to cryptographic tokens (see also hardware security module). Often used in single sign-on, public-key cryptography and disk encryption[10] systems. RSA Security has turned over further development of the PKCS #11 standard to the OASIS PKCS 11 Technical Committee.
也被称为“加密”。定义加密令牌的通用接口的API(请参阅硬件安全模块)。常用于单点登录、公钥加密和磁盘加密系统。RSA安全已经将PKCS #11标准的进一步开发移交给OASIS PKCS 11技术委员会。
PKCS #12 1.1 Personal Information Exchange Syntax Standard
个人信息交换语法标准
See RFC 7292. Defines a file format commonly used to store private keys with accompanying public key certificates, protected with a password-based symmetric key. PFX is a predecessor to PKCS #12.This container format can contain multiple embedded objects, such as multiple certificates. Usually protected/encrypted with a password. Usable as a format for the Java key store and to establish client authentication certificates in Mozilla Firefox. Usable by Apache Tomcat.
定义一种文件格式,通常用于存储带有附带公钥证书的私钥,并使用基于密码的对称密钥进行保护。PFX是PKCS #12的前身。
这种容器格式可以包含多个嵌入式对象,比如多个证书。通常用密码保护/加密。可用作Java密钥存储格式,并可在Mozilla Firefox中建立客户端身份验证证书。可由Apache Tomcat使用。
PKCS #13 Elliptic Curve Cryptography Standard
椭圆曲线密码学标准
(Apparently abandoned, only reference is a proposal from 1998.)
(明确地抛弃了,唯一的参考文献是1998年的一项提议。)
PKCS #14 Pseudo-random Number Generation
伪随机数生成
(Apparently abandoned, no documents exist.)
(明确地抛弃了,没有文件存在。)
PKCS #15 1.1 Cryptographic Token Information Format Standard
密码令牌信息格式标准
Defines a standard allowing users of cryptographic tokens to identify themselves to applications, independent of the application’s Cryptoki implementation (PKCS #11) or other API. RSA has relinquished IC-card-related parts of this standard to ISO/IEC 7816-15.
定义一个标准,允许加密令牌的用户向应用程序标识自己,独立于应用程序的Cryptoki实现(PKCS #11)或其他API。RSA已将本标准ic卡相关部分放弃给ISO/IEC 7816-15。

我们常见的有PKCS#7,PKCS#10和PKCS#12,其他的格式忽略吧。

4.CSR (certificate signing request )

在公钥基础设施(PKI)系统中,证书签名请求(certificate signing request,也称为CSR或certificate request)是申请人向证书颁发机构发送的一条消息,用于申请数字身份证书。它通常包含需要被颁发证书的公钥、标识信息(例如域名)和完整性保护(例如数字签名)。CSR最常见的格式是PKCS#10规范,另一种格式是由一些web浏览器生成的SPKAC(Signed Public Key and Challenge,签名公钥和挑战,哎呀,这个是我直译的,不要打我)格式。
认证请求由三个主要部分组成:认证请求信息、签名算法标识符和认证请求信息上的数字签名。第一部分包含重要信息,包括公钥。请求者的签名防止实体请求他人公钥的伪造证书。因此,生成CSR需要私钥,但私钥不是CSR的一部分。
第一部分,asn.1类型CertificationRequestInfo,包括版本号(对于所有已知版本规范1.0,1.5和1.7,它为0),主题名称、公钥(算法标识符+位串)和一组属性证书的主题提供额外的信息。这些属性可以包含所需的证书扩展名、限制撤销的质询密码,以及关于证书主题的任何附加信息(可能包括本地类型或未来类型)。
PKCS#10标准定义了用于编码CSR的二进制格式,以便与X.509一起使用。 它在ASN.1中进行了阐述。

  1. openssl asn1parse -i -in your_request_file

CSR可以表示为Base64编码的PKCS#10。这里给了一个示例文件

  1. 1. -----BEGIN CERTIFICATE REQUEST-----
  2. 2. MIICzDCCAbQCAQAwgYYxCzAJBgNVBAYTAkVOMQ0wCwYDVQQIDARub25lMQ0wCwYD
  3. 3. VQQHDARub25lMRIwEAYDVQQKDAlXaWtpcGVkaWExDTALBgNVBAsMBG5vbmUxGDAW
  4. 4. BgNVBAMMDyoud2lraXBlZGlhLm9yZzEcMBoGCSqGSIb3DQEJARYNbm9uZUBub25l
  5. 5. LmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMP/U8RlcCD6E8AL
  6. 6. PT8LLUR9ygyygPCaSmIEC8zXGJung3ykElXFRz/Jc/bu0hxCxi2YDz5IjxBBOpB/
  7. 7. kieG83HsSmZZtR+drZIQ6vOsr/ucvpnB9z4XzKuabNGZ5ZiTSQ9L7Mx8FzvUTq5y
  8. 8. /ArIuM+FBeuno/IV8zvwAe/VRa8i0QjFXT9vBBp35aeatdnJ2ds50yKCsHHcjvtr
  9. 9. 9/8zPVqqmhl2XFS3Qdqlsprzbgksom67OobJGjaV+fNHNQ0o/rzP//Pl3i7vvaEG
  10. 10. 7Ff8tQhEwR9nJUR1T6Z7ln7S6cOr23YozgWVkEJ/dSr6LAopb+cZ88FzW5NszU6i
  11. 11. 57HhA7ECAwEAAaAAMA0GCSqGSIb3DQEBBAUAA4IBAQBn8OCVOIx+n0AS6WbEmYDR
  12. 12. SspR9xOCoOwYfamB+2Bpmt82R01zJ/kaqzUtZUjaGvQvAaz5lUwoMdaO0X7I5Xfl
  13. 13. sllMFDaYoGD4Rru4s8gz2qG/QHWA8uPXzJVAj6X0olbIdLTEqTKsnBj4Zr1AJCNy
  14. 14. /YcG4ouLJr140o26MhwBpoCRpPjAgdYMH60BYfnc4/DILxMVqR9xqK1s98d6Ob/+
  15. 15. 3wHFK+S7BRWrJQXcM8veAexXuk9lHQ+FgGfD0eSYGz0kyP26Qa2pLTwumjt+nBPl
  16. 16. rfJxaLHwTQ/1988G0H35ED0f9Md5fzoKi5evU1wG5WRxdEUPyt3QUXxdQ69i0C+7
  17. 17. -----END CERTIFICATE REQUEST-----

上面的证书签名请求ASN.1结构(openssl解析)如下所示,其中第一个数字是字节偏移量,d=深度,hl=当前类型的头文件长度,l=内容长度:

  1. 1. 0:d=0 hl=4 l= 716 cons: SEQUENCE
  2. 2. 4:d=1 hl=4 l= 436 cons: SEQUENCE
  3. 3. 8:d=2 hl=2 l= 1 prim: INTEGER :00
  4. 4. 11:d=2 hl=3 l= 134 cons: SEQUENCE
  5. 5. 14:d=3 hl=2 l= 11 cons: SET
  6. 6. 16:d=4 hl=2 l= 9 cons: SEQUENCE
  7. 7. 18:d=5 hl=2 l= 3 prim: OBJECT :countryName
  8. 8. 23:d=5 hl=2 l= 2 prim: PRINTABLESTRING :EN
  9. 9. 27:d=3 hl=2 l= 13 cons: SET
  10. 10. 29:d=4 hl=2 l= 11 cons: SEQUENCE
  11. 11. 31:d=5 hl=2 l= 3 prim: OBJECT :stateOrProvinceName
  12. 12. 36:d=5 hl=2 l= 4 prim: UTF8STRING :none
  13. 13. 42:d=3 hl=2 l= 13 cons: SET
  14. 14. 44:d=4 hl=2 l= 11 cons: SEQUENCE
  15. 15. 46:d=5 hl=2 l= 3 prim: OBJECT :localityName
  16. 16. 51:d=5 hl=2 l= 4 prim: UTF8STRING :none
  17. 17. 57:d=3 hl=2 l= 18 cons: SET
  18. 18. 59:d=4 hl=2 l= 16 cons: SEQUENCE
  19. 19. 61:d=5 hl=2 l= 3 prim: OBJECT :organizationName
  20. 20. 66:d=5 hl=2 l= 9 prim: UTF8STRING :Wikipedia
  21. 21. 77:d=3 hl=2 l= 13 cons: SET
  22. 22. 79:d=4 hl=2 l= 11 cons: SEQUENCE
  23. 23. 81:d=5 hl=2 l= 3 prim: OBJECT :organizationalUnitName
  24. 24. 86:d=5 hl=2 l= 4 prim: UTF8STRING :none
  25. 25. 92:d=3 hl=2 l= 24 cons: SET
  26. 26. 94:d=4 hl=2 l= 22 cons: SEQUENCE
  27. 27. 96:d=5 hl=2 l= 3 prim: OBJECT :commonName
  28. 28. 101:d=5 hl=2 l= 15 prim: UTF8STRING :*.wikipedia.org
  29. 29. 118:d=3 hl=2 l= 28 cons: SET
  30. 30. 120:d=4 hl=2 l= 26 cons: SEQUENCE
  31. 31. 122:d=5 hl=2 l= 9 prim: OBJECT :emailAddress
  32. 32. 133:d=5 hl=2 l= 13 prim: IA5STRING :none@none.com
  33. 33. 148:d=2 hl=4 l= 290 cons: SEQUENCE
  34. 34. 152:d=3 hl=2 l= 13 cons: SEQUENCE
  35. 35. 154:d=4 hl=2 l= 9 prim: OBJECT :rsaEncryption
  36. 36. 165:d=4 hl=2 l= 0 prim: NULL
  37. 37. 167:d=3 hl=4 l= 271 prim: BIT STRING
  38. 38. 442:d=2 hl=2 l= 0 cons: cont [ 0 ]
  39. 39. 444:d=1 hl=2 l= 13 cons: SEQUENCE
  40. 40. 446:d=2 hl=2 l= 9 prim: OBJECT :md5WithRSAEncryption
  41. 41. 457:d=2 hl=2 l= 0 prim: NULL
  42. 42. 459:d=1 hl=4 l= 257 prim: BIT STRING

这是通过在命令”openssl asn1parse -inform PEM -i -in your_request_file “中提供base64编码生成的,其中PEM代表Privacy-enhanced mail,并描述了base64中ASN.1 DER编码。
有CSR必定有KEY,是成对的,CSR最终变成为证书crt,和私钥key配对使用。
证书下发后,CSR就没有用了,只是在交时候需要。

5. X.509

Public-Key Infrastructure (X.509) (pkix)
在密码学中,X.509是定义公钥证书格式的标准。X.509证书用于许多Internet协议,包括TLS/SSL,它是HTTPS(用于浏览web的安全协议)的基础。它们也用于离线应用程序,比如电子签名。一个X.509证书包含一个公钥和一个标识(主机名、组织或个人),由证书颁发机构签名或自签名。当证书由受信任的证书颁发机构签名时,或者通过其他方法进行验证时,持有该证书的人可以依赖于它包含的公钥来与另一方建立安全通信,或者验证由相应私钥数字签名的文档。
X.509还定义了证书撤销列表,这是一种分发被签名机构认为无效的证书信息的方法,以及认证路径验证算法,该算法允许证书由中间CA证书签名,而中间CA证书又由其他证书签名,最终到达信任锚。
X.509由国际电信联盟标准化部门(ITU-T)定义,并基于ITU-T的另一个标准ASN.1

二、SSL Certificate (编码)格式

SSL Certificate实际上就是X.509 Certificate。X.509是一个定义了certificate结构的标准。它在SSL certificate中定义了一个数据域。X.509使用名为 Abstract Syntax Notation One (ASN.1)的通用语言来描述certificate的数据结构。
X.509 certificate 有几种不同的格式,例如 PEM,DER,PKCS#7 和 PKCS#12。 PEM和PKCS#7格式使用Base64 ASCII编码,而DER和PKCS#12使用二进制编码。certificate文件基于不同的编码格式有不同的文件扩展名。
如下图就展示了X.509证书的编码方式和文件扩展名。
证书 - 图1

PEM 格式

大多数 CA (Certificate Authority) 提供了Base64 ASCII编码的PEM格式的certificate文件。这些证书文件的后缀可以是 .pem, .crt, .cer, .key。 以.pem结尾的文件可以将服务端证书(server certificate),中间证书(intermediate certificate)和私钥(private key)包含在一个文件中。服务端证书和中间证书也可以分别存放在.crt 和 .cer两个文件中。私钥可以单独在一个 .key文件中。
PEM文件使用ASCII编码,所以你可以用文本编辑器打开它,例如notepad,微软的word等等。
每一个PEM文件中的证书都在”—— BEGIN CERTIFICATE—— “ 和 “——END CERTIFICATE——“语句之间。
私钥包括在”—— BEGIN RSA PRIVATE KEY——-“ 和 “——-END RSA PRIVATE KEY——-“语句之间。
而CSR则包含在”——-BEGIN CERTIFICATE REQUEST——- “ 和 “——-END CERTIFICATE REQUEST——-“语句之间。

PKCS#7 格式

PKCS#7格式是一种加密消息语法标准。PKCS#7证书使用Base64 ASCII编码和文件扩展名 .p7b 或 .p7c 。只有证书可以存储在这种格式的文件中,私钥则不可以。P7B证书包含在”——-BEGIN PKCS7——-“ 和 “——-END PKCS7——-“ 语句之间。

DER 格式

DER格式的证书是二进制形式,存储在以 .der 和 .cer 为扩展名的文件中。这些证书大部分使用在基于java的web服务器上。

PKCS#12 格式

PKCS#12格式的证书也是二进制形式,存储在以 .pfx 或 .p12为扩展名的文件中。
PKCS#12文件可以存储服务端证书中间证书私钥在一个 .pfx文件中,并且使用密码保护。 这类证书主要使用在Windows平台

总结

DER 实际上就是密钥的最原始的二进制格式;而 PEM 是对 DER 的 Base64 的编码,PEM 解码后得到的就是 DER 编码格式。
只要是文本格式的文件,用文本编辑器打开后查看关键语句即可。

https://blog.csdn.net/yetugeng/article/details/100629159