我想知道ServerFault的优秀人员是否可以对此事提供一些澄清?
#1 楼
SSL已经存在了很长时间,您可能会认为容器格式已经达成共识。你是对的,有。发生的标准太多。因此,这就是我所知道的,并且我相信其他人也会听到。.csr-这是证书签名请求。某些应用程序可以生成这些文件以提交给证书颁发机构。实际格式为RFC 2986中定义的PKCS10。它包括所请求证书的一些/所有关键细节,例如主题,组织,状态,诸如此类,以及要签名的证书的公钥。这些由CA签名并返回证书。返回的证书是公用证书(包括公用密钥但不包含专用密钥),其本身可以采用几种格式。
.pem-在RFC 1421至1424中定义,这是一种容器格式,可能只包含公共证书(例如,与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增强,后来提交为RFC7292。这是一种密码容器格式,包含两种格式公共和私有证书对。与.pem文件不同,此容器是完全加密的。 Openssl可以使用公钥和私钥将其转换为.pem文件:
openssl pkcs12 -in file-to-convert.p12 -out converted-file.pem -nodes
时不时出现的其他几种格式: br />.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之外通常不经常使用。
我希望这会有所帮助。
评论
关于标准的伟大之处在于,有太多可供选择的...
–squillman
09年5月19日下午4:05
.crt是.cert和.cer的另一个常见扩展名
– David Pashley
09年6月6日在8:08
PEM是一种文件格式,可以包含证书(又称公钥),私钥或什至将二者串联在一起。不要太注意文件扩展名;这表示“隐私增强邮件”,虽然用途不多,但文件格式却很固定。
–丹·卡利
09-6-25 at 16:29
很有用的答案,但我认为您没有涵盖ssh-keygen创建的.pub格式。了解这与其余部分之间的联系将很有用。
–杰兹
2012-12-28 20:05:
不禁注意到“ Privacy Enhanced Email”会以缩写“ PEE”代替“ PEM”。 RFC倾向于使用短语“隐私增强邮件”
–aidan
15年1月12日在5:20
#2 楼
PEM本身不是证书,它只是一种编码数据的方式。 X.509证书是通常使用PEM编码的一种数据类型。PEM是X.509证书(其结构使用ASN.1定义),并使用ASN.1 DER(专有的编码规则),然后通过Base64编码运行并停留在纯文本锚行之间(BEGIN CERTIFICATE和END CERTIFICATE)。
您可以使用PKCS#7或PKCS#12表示法表示相同的数据,并且可以使用openssl命令行实用程序来执行此操作。
PEM的明显好处是可以安全地粘贴到电子邮件正文中,因为它具有定位行并且是7位clean。
RFC1422具有与密钥和证书有关的PEM标准的更多详细信息。
评论
您如何“使用openssl命令行”执行此操作?
–Samik R
2013年9月18日,下午3:53
要将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
16年5月5日在23:10
#3 楼
有时一个.crt
文件已经是一个.pem
。参见:https://stackoverflow.com/questions/991758/openssl-pem-key 评论
的确如此,我今天才注意到这一点。我必须在机架空间负载平衡器中输入PEM证书,并且想知道生成的crt是否采用该格式。但是它是这样工作的,所以这也是我的结论,这些.crt中的大多数似乎都是PEM格式的。
– Glen Plas
2014年1月24日10:41
@GlennPlas焦点而不是文件的内容,而不是文件的名称或扩展名。一切都可以称为.foobar ...
–帕特里克·梅夫克(Patrick Mevzek)
19-09-16在14:42
评论
stackoverflow.com/a/45886431/1599699