如何从.key和.crt文件获取.pem文件?

时间:2009-06-13 23:23:35

标签: ssl openssl pem asn.1 der

如何从SSL证书创建PEM文件?

这些是我提供的文件:

  • .crt
  • server.csr
  • server.key

10 个答案:

答案 0 :(得分:703)

您的密钥可能已采用PEM格式,但仅以.crt或.key命名。

如果文件的内容以-----BEGIN开头,您可以在文字编辑器中阅读

该文件使用base64,它以ASCII格式读取,而不是二进制格式。证书已采用PEM格式。只需将扩展名更改为.pem。

如果文件是二进制文件:

对于server.crt,您可以使用

openssl x509 -inform DER -outform PEM -in server.crt -out server.crt.pem

对于server.key,请使用openssl rsa代替openssl x509

server.key可能是您的私钥,.crt文件是返回的,签名的x509证书。

如果这是针对Web服务器而您无法指定加载单独的私钥和公钥:

您可能需要连接这两个文件。用于此用途:

cat server.crt server.key > server.includesprivatekey.pem

我建议使用“includesprivatekey”命名文件,以帮助您管理对此文件保留的权限。

答案 1 :(得分:203)

我需要为AWS ELB执行此操作。经过对话多次殴打后,最终这对我有用:

openssl rsa -in server.key -text > private.pem
openssl x509 -inform PEM -in server.crt > public.pem

感谢NCZ

编辑:正如@floatingrock所说

使用AWS,不要忘记在file://前加上文件名。所以它看起来像:

 aws iam upload-server-certificate --server-certificate-name blah --certificate-body file://path/to/server.crt --private-key file://path/to/private.key --path /cloudfront/static/

http://docs.aws.amazon.com/cli/latest/reference/iam/upload-server-certificate.html

答案 2 :(得分:76)

pem文件包含证书和私钥。这取决于您的证书/密钥的格式,但可能就像这样简单:

cat server.crt server.key > server.pem

答案 3 :(得分:21)

此外,如果您不希望它要求密码,则需要运行以下命令:

openssl rsa -in server.key -out server.key

答案 4 :(得分:15)

这是创建.pem文件的最佳选择

openssl pkcs12 -in MyPushApp.p12 -out MyPushApp.pem -nodes -clcerts

答案 5 :(得分:3)

我观察到的是:如果使用openssl生成证书,它会捕获crt文件中的text部分和base64证书部分。严格的pem格式说(wiki definition)文件应该以BEGIN和END开头和结尾。

  

.pem - (隐私增强邮件)Base64编码的DER证书,   包含在“----- BEGIN CERTIFICATE -----”和“----- END”之间   CERTIFICATE -----“

因此对于一些期望严格的pem格式的库(我在java中遇到过这种情况),生成的crt会使验证失败为“无效的pem格式”。

即使您使用BEGIN / END CERTIFICATE复制或grep这些行,并将其粘贴到cert.pem文件中,它也应该有效。

这是我做的,不是很干净,但对我有用,基本上它从BEGIN行开始过滤文本:

  

grep -A 1000 BEGIN cert.crt> cert.pem

答案 6 :(得分:3)

  1. 通过appleId从临时门户网站下载证书,
  2. 从密钥链导出证书并提供名称(Certificates.p12),
  3. 打开保存在Certificates.p12文件
  4. 上方的终端和转到文件夹
  5. 运行以下命令:

    a)openssl pkcs12 -in Certificates.p12 -out CertificateName.pem -nodes

    b)openssl pkcs12 -in Certificates.p12 -out pushcert.pem -nodes -clcerts

  6. 您的.pem文件已准备好“pushcert.pem”。

答案 7 :(得分:3)

我试图从godaddy转到app引擎。诀窍是使用这条线:

openssl req -new -newkey rsa:2048 -nodes -keyout name.unencrypted.priv.key -out name.csr

完全一样,但用我的域名替换名称(不是说它真的很重要)

我回答了有关公共名称/组织的所有问题,如www.name.com

然后我打开csr,复制它,粘贴在go daddy中,然后下载它,解压缩它,导航到终端的解压缩文件夹并输入:

cat otherfilegodaddygivesyou.crt gd_bundle-g2-g1.crt > name.crt

然后我使用了Trouble with Google Apps Custom Domain SSL中的这些说明,这些说明是:

openssl rsa -in privateKey.key -text > private.pem
openssl x509 -inform PEM -in www_mydomain_com.crt > public.pem

完全一样,除了privateKey.key,我使用了name.unencrypted.priv.key,而不是www_mydomain_com.crt,我使用了name.crt

然后我将public.pem上传到管理控制台以获取" PEM编码的X.509证书",并上传了private.pem以用于"未加密的PEM编码的RSA私钥" ; ..

..这终于奏效了。

答案 8 :(得分:3)

尝试将GoDaddy证书上传到AWS我失败了好几次,但最后却非常简单。无需将任何内容转换为.pem。您只需确保在链参数中包含GoDaddy捆绑证书,例如

aws iam upload-server-certificate
    --server-certificate-name mycert
    --certificate-body file://try2/40271b1b25236fd1.crt
    --private-key file://server.key
    --path /cloudfront/production/
    --certificate-chain file://try2/gdig2_bundle.crt

要删除之前失败的上传,您可以

aws iam delete-server-certificate --server-certificate-name mypreviouscert

答案 9 :(得分:0)

  • 打开终端。
  • 转到证书所在的文件夹。
  • 通过将名称替换为您的证书来执行以下命令。
  

openssl pkcs12 -in YOUR_CERTIFICATE.p12 -out YOUR_CERTIFICATE.pem -nodes -clcerts

  • 希望它能起作用!!