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

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

这些是我可用的文件:

  • .crt
  • server.csr
  • server.key
1388228 次浏览

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

cat server.crt server.key > server.pem

您的密钥可能已经是PEM格式,但只是以. crt或. key命名。

如果文件的内容以-----BEGIN开头,并且您可以在文本编辑器中读取它:

该文件使用bas64,它以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

我建议使用“包含私有密钥”命名文件,以帮助您管理此文件的权限。

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

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

我需要为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

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

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

因此,对于一些期望严格pem格式的库(我在java中遇到了这一点),生成的crt将作为“无效pem格式”无法验证。

即使您使用BEGIN/END CERTIFICATE复制或grep行,并将其粘贴到cert.pem文件中,它也应该可以工作。

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

Grep-A 1000 BEGINcert.crt>cert.pem

  1. 通过AppleId从临时门户下载证书,
  2. 从钥匙串导出证书并给出名称(证书. p12),
  3. 打开终端和goto文件夹,您保存上述证书. p12文件,
  4. 运行以下命令:

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

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

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

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

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

我试图从戈迪迪转向应用引擎。诀窍是使用这条线:

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

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

我回答了所有关于通用名称/组织的问题www.name.com

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

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

然后我使用了Google Apps自定义域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证书”的管理控制台,并上传了“未加密的PEM编码的RSA私钥”的private.pem。

…这终于奏效了。

尝试将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
  • 打开终端。
  • 转到证书所在的文件夹。
  • 通过用您的证书替换名称来执行以下命令。

pkcs12-YOUR_CERTIFICATE. p12-YOUR_CERTIFICATE.pem-节点-clcerts

  • 希望它能奏效!!!

所有文件(*. crt,server.csr,server.key)可能已经是PEM格式,下一步如何处理这些文件取决于您要如何使用它们,或者使用什么工具以及需要哪种格式。

我将在这里进一步解释用于存储密码学材料的不同格式是什么,以及如何识别它们以及将它们相互转换。

标准

标准 内容格式 文件编码 可能的内容
X509 X 证书
PKCS#1 X RSA密钥(公共/私有)
PKCS#7 X 证书,CRL
PKCS#8 X 私钥,加密的私钥
PKCS#12 X 证书、CRL、私钥
JKS X 证书、私钥
PEM X
DER X

常见组合

内容\编码 PEM(*) DER(**) 二进制
X509 X X
PKCS#1 X X
PKCS#7(***) X X
PKCS#8 X X
PKCS#12(***) X
JKS(***) X

这是一个要点解释了同样的事情+用于转换/验证/检查的命令。

总之,使用密码学/PKI材料的典型步骤:

  • 了解它们的格式(使用验证/检查命令)
  • 了解它们需要哪种格式(阅读文档)
  • 使用转换命令转换文件
  • 可选:使用验证/检查命令来验证转换的文件

在Windows上,您可以使用certutil工具:

certutil -encode server.crt cert.pem
certutil -encode server.key key.pem

您可以像这样在PowerShell中将两个文件合并为一个:

Get-Content cert.pem, key.pem | Set-Content cert-and-key.pem

在CMD中,像这样:

copy cert.pem+key.pem cert-and-key.pem /b