SSL证书本质上是一个X.509证书。X.509是定义证书数据结构的标准,它定义了应该包含在SSL证书中的数据字段。X.509使用一种称为抽象语法 (ASN.1)的正式语言来表示证书的数据结构。
X.509标准下,有各种编码格式的证书,如PEM、DER、PKCS#7和PKCS#12。PEM和PKCS#7格式使用Base64 ASCII编码,而DER和PKCS#12使用二进制编码。根据使用的格式和编码,证书文件具有不同的扩展名。
下图展示了X.509证书的编码格式和文件扩展名。
PEM格式
大多数ca(证书颁发机构)提供PEM格式的证书,保存在Base64 ASCII编码的文件中。证书文件类型可以是.pem
、.crt
、.cer
或.key
。pem文件可以在单个文件中包含服务器证书、中间证书和私钥。服务器证书和中间证书也可以放在单独的.crt
或.cer
文件中,私钥可以放在.key
文件中。
PEM文件使用ASCII编码,所以你可以使用任何文本编辑器打开它们。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平台。