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证书的编码方式和文件扩展名。
PEM 格式(Privacy-Enhanced Mail)
大多数 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-----"语句之间。
CER或CRT格式证书转换为PEM格式:
对于CER或CRT格式的证书,您可通过直接修改证书文件扩展名的方式,将其转换成PEM格式。例如,将server.crt证书文件重命名为server.pem即可。
PKCS#7 格式
PKCS#7格式是一种加密消息语法标准。PKCS#7证书使用Base64 ASCII编码和文件扩展名 .p7b 或 .p7c 。只有证书可以存储在这种格式的文件中,私钥则不可以。P7B证书包含在"-----BEGIN PKCS7-----" 和 "-----END PKCS7-----" 语句之间。
DER 格式(Distinguished Encoding Rules)
DER格式的证书是二进制形式,存储在以 .der 和 .cer 为扩展名的文件中。这些证书大部分使用在基于java的web服务器上。
PKCS#12 格式
PKCS#12格式的证书也是二进制形式,存储在以 .pfx 或 .p12为扩展名的文件中。
PKCS#12文件可以存储服务端证书,中间证书和私钥在一个 .pfx文件中,并且使用密码保护。 这类证书主要使用在Windows平台。
将PFX文件转换为PEM格式时,OpenSSL会将所有证书和私钥放入一个文件中。您需要在文本编辑器中打开该文件,并将每个证书和私钥(包括BEGIN / END语句)复制到其各自的文本文件中,并将它们分别保存为certificate.cer,CACert.cer和privateKey.key。
总结
DER 实际上就是密钥的最原始的二进制格式;而 PEM 是对 DER 的 Base64 的编码,PEM 解码后得到的就是 DER 编码格式。
只要是文本格式的文件,用文本编辑器打开后查看关键语句即可。