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


我负责维护两台Debian服务器。每次我必须对安全证书做任何事情时,我都会谷歌进行教程并一直打败,直到最终有效。

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

我想知道ServerFault的优秀人员是否可以对此事做出一些澄清?


1173
2018-05-19 02:24




stackoverflow.com/a/45886431/1599699 - Andrew


答案:


SSL已经存在了足够长的时间,您认为会有就容器格式达成一致意见。你是对的,有。发生的标准太多了。所以这就是我所知道的,我相信其他人也会参与其中。

  • 的.csr  - 这是证书签名请求。某些应用程序可以生成这些文件以提交给证书颁发机构实际格式是PKCS10,定义于 RFC 2986。它包括所请求证书的部分/全部关键细节,例如主题,组织,状态,诸如此类,以及 公钥 要签名的证书这些由CA签名并返回证书。返回的证书是公开的 证书 (包括公钥但不包括私钥),它本身可以是几种格式。
  • .PEM  - 在RFC中定义 1421 通过 1424,这是一种容器格式,可能只包含公共证书(例如Apache安装和CA证书文件) /etc/ssl/certs),或者可以包括整个证书链,包括公钥,私钥和根证书。令人困惑的是,它也可以编码CSR(例如使用的) 这里)因为PKCS10格式可以翻译成PEM。这个名字来自 隐私增强邮件(PEM),一种安全电子邮件的失败方法,但它使用的容器格式仍然存在,并且是x509 ASN.1密钥的base64转换。
  • 。键  - 这是一个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资源管理器将其识别为证书,但.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之外并不经常使用。

我希望这有帮助。


1449
2018-05-19 02:49



关于标准的好处是有很多可供选择...... - squillman
.crt是.cert和.cer的另一个常见扩展 - David Pashley
PEM是一种文件格式,可以包含证书(也称为公钥),私钥或者实际上都连接在一起。不要太注意文件扩展名;它意味着隐私增强邮件,一个使用它没有看到太多用途,但文件格式陷入困境。 - Dan Carley
非常有用的答案,但我不认为你已经涵盖了由.pub格式创建的 ssh-keygen。知道如何与其他人联系起来会很有用。 - Jez
不禁注意到“隐私增强电子邮件”会给出首字母缩略词“PEE”而不是“PEM”。 RFC倾向于使用短语“Privacy Enhanced Mail” - aidan


它自己的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标准的更多详细信息,因为它与密钥和证书相关。


123
2018-06-06 15:19



你如何“使用openssl命令行”? - Samik R
要将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


有时一个 .crt 文件已经是了 .pem。看到: https://stackoverflow.com/questions/991758/openssl-pem-key


51
2018-03-15 00:24



确实如此,我今天才注意到这一点。我必须在rackspace loadbalancer中输入PEM证书,我想知道生成的crt是否采用该格式。但它就是这样的,所以这也是我的结论,大多数这些.crt似乎都是以PEM格式出现的。 - Glenn Plas