如何从 SSL 证书创建 PEM 文件?
这些是我可用的文件:
.crt
server.csr
server.key
您的密钥可能已经采用 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”命名文件,以帮助您管理您保留在此文件中的权限。
我需要为 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
一个pem
文件包含证书和私钥。这取决于您的证书/密钥的格式,但可能就像这样简单:
cat server.crt server.key > server.pem
此外,如果您不希望它询问密码,则需要运行以下命令:
openssl rsa -in server.key -out server.key
这是创建 .pem 文件的最佳选择
openssl pkcs12 -in MyPushApp.p12 -out MyPushApp.pem -nodes -clcerts
我试图从 Godaddy 到应用引擎。诀窍是使用这条线:
openssl req -new -newkey rsa:2048 -nodes -keyout name.unencrypted.priv.key -out name.csr
完全一样,但是用我的域名替换 name(这甚至不重要)
我回答了所有与通用名称/组织有关的问题,如 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
完全一样,除了我使用 name.unencrypted.priv.key 而不是 privateKey.key,而不是 www_mydomain_com.crt,我使用 name.crt
然后我将 public.pem 上传到管理控制台以获取“PEM 编码的 X.509 证书”,并将 private.pem 上传到“未加密的 PEM 编码的 RSA 私钥”。
..这终于奏效了。
我观察到的是:如果您使用 openssl 生成证书,它会同时捕获 crt 文件中的文本部分和 base64 证书部分。严格的 pem 格式表示(wiki 定义)文件应该以 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
运行以下命令:
一)openssl pkcs12 -in Certificates.p12 -out CertificateName.pem -nodes
,
b)openssl pkcs12 -in Certificates.p12 -out pushcert.pem -nodes -clcerts
尝试将 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
所有文件(*.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 (*) | 德 (**) | 二进制 |
---|---|---|---|
X509 | X | X | |
PKCS#1 | X | X | |
PKCS#7 (***) | X | X | |
PKCS#8 | X | X | |
PKCS#12 (***) | X | ||
JKS (***) | X |
这是一个要点,解释了相同的事情 + 用于转换/验证/检查的命令。
总之,使用密码学/PKI 材料的典型步骤:
openssl pkcs12 -in YOUR_CERTIFICATE.p12 -out YOUR_CERTIFICATE.pem -nodes -clcerts