什么是Pem文件,它与其他OpenSSL生成的密钥文件格式有何区别?


1342

我负责维护两个Debian服务器。每次我必须对安全证书做任何事情时,我都会使用Google进行教学,并最终失败。

然而,在我搜索我经常遇到不同的文件格式(.key.csr.pem),但我从来没有能够找到的每个文件格式的目的是什么一个很好的解释。

我想知道ServerFault的好伙伴是否可以对此事提供一些澄清?


Answers:


1654

SSL已经存在了很长时间,您可能会认为容器格式已经达成共识。你是对的,有。发生的标准太多。这就是我所知道的,而且我敢肯定其他人也会加入。

  • .csr-这是证书签名请求。某些应用程序可以生成这些文件以提交给证书颁发机构。实际格式为PKCS10,它在RFC 2986中定义。它包括所请求证书的一些/全部密钥详细信息,例如主题,组织,状态,诸如此类,以及要签名的证书的公共密钥。这些由CA签名并返回证书。返回的证书是公用证书(包括公用密钥,但不包含专用密钥),其本身可以有两种格式。
  • .pem-在RFC 14211424中定义,这是一种容器格式,可以只包含公共证书(例如Apache安装和CA证书文件/etc/ssl/certs),或者可以包括完整的证书链,包括公共密钥,私钥和根证书。令人困惑的是,由于PKCS10格式可以转换为PEM ,因此它也可能对CSR进行编码(例如,此处使用)。该名称来自“ 隐私增强邮件(PEM)”,这是一种用于保护电子邮件的失败方法,但是其使用的容器格式仍然存在,并且是x509 ASN.1密钥的base64转换。
  • .key-这是PEM格式的文​​件,仅包含特定证书的私钥,仅是常规名称,而不是标准化名称。在Apache安装中,该位置通常位于中/etc/ssl/private。这些文件的权限非常重要,如果设置错误,某些程序将拒绝加载这些证书。
  • .pkcs12 .pfx .p12-最初由RSA在“ 公钥密码标准”(缩写为PKCS)中定义,“ 12”变体最初由Microsoft增强,后来提交为RFC 7292。这是包含公共和私有证书对的密码容器格式。与.pem文件不同,此容器是完全加密的。Openssl可以使用公钥和私钥将其转换为.pem文件:openssl pkcs12 -in file-to-convert.p12 -out converted-file.pem -nodes

不时出现的其他几种格式:

  • .der-一种以二进制形式编码ASN.1语法的方法,.pem文件只是Base64编码的.der文件。OpenSSL可以将它们转换为.pem(openssl x509 -inform der -in to-convert.der -out converted.pem)。Windows将这些视为证书文件。默认情况下,Windows会将证书导出为扩展名为.DER格式的文件。喜欢...
  • .cert .cer .crt-一个.pem(或很少是.der)格式的文件,具有不同的扩展名,Windows Explorer将其识别为证书,而.pem则不是。
  • .p7b .keystore-RFC 2315中定义为PKCS 7,这是Windows用于证书交换的一种格式。Java本身了解这些内容,因此通常将其.keystore用作扩展。与.pem样式证书不同,此格式具有定义的方式来包括证书路径证书。
  • .crl-证书吊销列表。证书颁发机构产生这些证书是作为在到期之前取消对证书进行授权的一种方式。有时您可以从CA网站下载它们。

概括而言,有四种不同的方式来展示证书及其组成部分:

  • PEM -由RFC的管辖,其通过开源软件优先使用。它可以具有各种扩展名(.pem,.key,.cer,.cert等)
  • PKCS7 -Java使用并由Windows支持的开放标准。不包含私钥材料。
  • PKCS12-一种Microsoft专用标准,后来在RFC中定义,与纯文本PEM格式相比,它提供了增强的安全性。它可以包含私钥材料。Windows系统优先使用它,并且可以通过使用openssl将其自由转换为PEM格式。
  • DER -PEM的父格式。将其视为base64编码的PEM文件的二进制版本很有用。在Windows之外,不是经常使用。

我希望这有帮助。


297
标准的
妙处

36
.CRT是.cert和.CER另一种常见的扩展
大卫帕什利

44
PEM是一种文件格式,可以包含证书(又称公钥),私钥或什至两者都串联在一起。不要太注意文件扩展名;这表示“隐私增强邮件”,虽然用途不多,但文件格式却很固定。
丹·卡利

20
很有用的答案,但我认为您没有涵盖由创建的.pub格式ssh-keygen。了解这与其余部分之间的联系将很有用。
耶斯(Jez)2012年

24
不禁注意到“ Privacy Enhanced Email”会以缩写“ PEE”代替“ PEM”。RFC倾向于使用短语“隐私增强邮件”
aidan 2015年

141

PEM本身不是证书,它只是一种编码数据的方式。X.509证书是通常使用PEM编码的一种数据类型。

PEM是X.509证书(其结构是使用ASN.1定义的),使用ASN.1 DER(可区分的编码规则)进行编码,然后通过Base64编码运行,并停留在纯文本锚行之间(BEGIN CERTIFICATE和END CERTIFICATE) )。

您可以使用PKCS#7或PKCS#12表示法表示相同的数据,并且openssl命令行实用程序可用于执行此操作。

PEM的明显好处是可以安全地粘贴到电子邮件的正文中,因为它具有定位线并且是7位纯净的。

RFC1422具有与密钥和证书有关的PEM标准的更多详细信息。


1
您如何“使用openssl命令行”执行此操作?
Samik R

2
要转换DER文件(.CRT .CER .der)到PEM: openssl x509 -inform der -in cert.cer -out cert.pem。到PEM文件转换为DER: openssl x509 -outform der -in cert.pem -out certi.der。要转换PKCS#12文件(.PFX的.p12)包含私钥和证书PEM: openssl pkcs12 -in keyStore.pfx -out keyStore.pem -nodes。要将PEM证书文件和私钥转换为PKCS#12(.pfx .p12),请执行以下操作:openssl pkcs12 -export -out cert.pfx -inkey privateKey.key -in cert.crt -certfile CACert.crt此处
mpeac,2016年

54

有时.crt文件已经是.pem。参见:https : //stackoverflow.com/questions/991758/openssl-pem-key


4
的确如此,我今天才注意到这一点。我必须在机架空间负载平衡器中输入PEM证书,我想知道生成的crt是否采用该格式。但是它是这样工作的,所以这也是我的结论,这些.crt中的大多数似乎都是PEM格式的。
Glenn Plas 2014年

@GlennPlas焦点而不是文件的内容,而不是文件的名称或扩展名。可能需要.foobar考虑所有重要问题……
Patrick Mevzek
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.