Answers:
您的密钥可能已经是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”命名文件,以帮助您管理与此文件保持的权限。
cat server.crt server.key > server.pem
不要将开放评论置于自己的立场上,这似乎是必要条件。快递信使我死了,花了我几个小时才弄清楚出了什么问题。
server.crt server.key > server.includesprivatekey.pem
碰巧的是,cat 对于haproxy 1.5的SSL很有用。
我需要针对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
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/
一个pem
文件包含证书和私钥。这取决于您的证书/密钥所采用的格式,但是可能就这么简单:
cat server.crt server.key > server.pem
-bash: server.key.pem: Permission denied
我观察到的是:如果使用openssl生成证书,它将捕获crt文件中的文本部分和base64证书部分。严格的pem格式表示(维基定义),该文件应以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 x509
。它将输出有效的PEM证书: cat certificate.crt | openssl x509 > certificate.pem
sed -n '/--BEGIN/,$p' cert.crt
在这种情况下,您需要类似的东西。为了解释这一点:“-n”告诉sed默认不打印任何内容,然后范围表达式/--BEGIN/,$
使p
命令(打印)应用于包含的第一行--BEGIN
和文件结尾($
)之间的行。
我试图从Godaddy转到App Engine。诀窍是使用此行:
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的有关Google Apps自定义域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,并且我使用name.crt代替www_mydomain_com.crt
然后,我将public.pem上传到管理控制台以获取“ PEM编码的X.509证书”,并上传了private.pem来获取“未加密的PEM编码的RSA私钥”。
..终于奏效了。
尝试将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
An error occurred (MalformedCertificate) when calling the UploadServerCertificate operation: Unable to parse certificate. Please ensure the certificate is in PEM format.
运行以下命令:
a)openssl pkcs12 -in Certificates.p12 -out CertificateName.pem -nodes
,
b) openssl pkcs12 -in Certificates.p12 -out pushcert.pem -nodes -clcerts
.pem
为.crt
和.key
。