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

Ser*_*uez 561 ssl openssl asn.1 pem der

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

这些是我提供的文件:

  • .crt
  • server.csr
  • server.key

max*_*llb 746

您的密钥可能已经采用PEM格式,但只能使用.crt或.key命名.

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

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

如果文件是二进制文件:

对于server.crt,您可以使用

openssl x509 -inform DER -outform PEM -in server.crt -out server.crt.pem
Run Code Online (Sandbox Code Playgroud)

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

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

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

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

cat server.crt server.key > server.includesprivatekey.pem
Run Code Online (Sandbox Code Playgroud)

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

  • 只是提醒一下`cat server.crt server.key> server.pem`不会将开放注释放在自己的行上,这似乎是一个要求.快递邮件给了我地狱,我花了几个小时才弄清楚出了什么问题. (7认同)
  • 检查server.key的格式.我只假设它是RSA.但阅读文件的第一行可能会告诉你. (2认同)
  • 碰巧的是,cat`server.crt server.key> server.includesprivatekey.pem`对于具有haproxy 1.5的SSL很有用。 (2认同)

slf*_*slf 214

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

openssl rsa -in server.key -text > private.pem
openssl x509 -inform PEM -in server.crt > public.pem
Run Code Online (Sandbox Code Playgroud)

谢谢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/
Run Code Online (Sandbox Code Playgroud)

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

  • 使用AWS,不要忘记使用`file://`前缀文件名.所以它看起来像:`aws iam upload-server-certificate --server-certificate-name blah --certificate-body file://〜/Desktop/server.crt --private-key file://~/Desktop/private.key --path/cloudfront/static /` (17认同)

sth*_*sth 78

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

cat server.crt server.key > server.pem
Run Code Online (Sandbox Code Playgroud)

  • @tq:cat server.crt server.key | sudo tee server.pem (8认同)
  • @tq:这意味着您不能读取或写入该文件. (2认同)
  • 注意缺少换行符我们你的pem文件可能会出现像----- END CERTIFICATE ---------- BEGIN CERTIFICATE ----- (2认同)

小智 22

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

openssl rsa -in server.key -out server.key
Run Code Online (Sandbox Code Playgroud)

  • 如果你想要一个以`----- BEGIN RSA PRIVATE KEY -----`开头的文件,并且有一个以`----- BEGIN ENCRYPTED PRIVATE KEY -----`开头的文件,这就是命令你想用. (8认同)

GOr*_*o58 18

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

openssl pkcs12 -in MyPushApp.p12 -out MyPushApp.pem -nodes -clcerts
Run Code Online (Sandbox Code Playgroud)


max*_*mus 13

所有文件(*.crt、server.csr、server.key)可能已经是 PEM 格式,接下来如何处理这些文件取决于您想要如何使用它们,或者使用它们的工具以及格式这个需要。

我将在这里进一步解释用于存储加密材料的不同格式以及如何识别它们以及如何将一种格式转换为另一种格式。

标准

标准 内容格式 文件编码 可能的内容
X509 X 证书
PKCS#1 X RSA 密钥(公共/私有)
PKCS#7 X 证书、CRL
PKCS#8 X 私钥、加密私钥
PKCS#12 X 证书、CRL、私钥
健康 X 证书、私钥
质子交换膜 X
X

常见组合

内容\编码 质子交换膜 (*) 德(**) 二进制
X509 X X
PKCS#1 X X
PKCS#7 (***) X X
PKCS#8 X X
PKCS#12 (***) X
张根硕 (***) X

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

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

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


小智 6

我试图从godaddy 转到应用程序引擎。使用这一行的诀窍是什么:

openssl req -new -newkey rsa:2048 -nodes -keyout name.unencrypted.priv.key -out name.csr
Run Code Online (Sandbox Code Playgroud)

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

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

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

cat otherfilegodaddygivesyou.crt gd_bundle-g2-g1.crt > name.crt
Run Code Online (Sandbox Code Playgroud)

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

openssl rsa -in privateKey.key -text > private.pem
openssl x509 -inform PEM -in www_mydomain_com.crt > public.pem
Run Code Online (Sandbox Code Playgroud)

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

然后我将 public.pem 上传到“PEM 编码的 X.509 证书”的管理控制台,并上传了“未加密的 PEM 编码的 RSA 私钥”的 private.pem。

..这终于奏效了。


sta*_*tor 6

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

certutil -encode server.crt cert.pem
certutil -encode server.key key.pem
Run Code Online (Sandbox Code Playgroud)

您可以在 PowerShell 中将这两个文件合并为一个,如下所示:

Get-Content cert.pem, key.pem | Set-Content cert-and-key.pem
Run Code Online (Sandbox Code Playgroud)

在 CMD 中是这样的:

copy cert.pem+key.pem cert-and-key.pem /b
Run Code Online (Sandbox Code Playgroud)


小智 5

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

\n\n
\n

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

\n
\n\n

因此,对于某些需要严格 pem 格式的库(我在 java 中遇到过这种情况),生成的 crt 将因“无效的 pem 格式”而无法通过验证。

\n\n

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

\n\n

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

\n\n
\n

grep -A 1000 开始 cert.crt > cert.pem

\n
\n


Ash*_*iya 5

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

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

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

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