2013-07-18 77 views
67

让我先解释我的问题。我买了一个CA证书,并使用以下格式生成CSR和私钥:如何将私钥转换为RSA私钥?

openssl req -new -newkey rsa:2048 -nodes -keyout server.key -out server.csr 

当我打开server.key文件,我看到它开始“----- BEGIN PRIVATE KEY -----“

我在我的服务器上使用SSL证书,一切都很正常。

现在我想将相同的证书上传到AWS IAM,以便我可以将它用于beanstalk负载平衡器。我用下面的命令从该AWS文档http://docs.aws.amazon.com/IAM/latest/UserGuide/InstallCert.html#SubmitCSRCertAuth

iam-servercertupload -b public_key_certificate_file -k privatekey.pem -s certificate_object_name 

我改变证书文件名作为必需的,但不断收到此错误:“400 MalformedCertificate私有密钥无效。”

有趣的是,在AWS文档页面上,样品私钥,他们表现出与开始“-------开始RSA私钥--------”

是有一种方法可以使用openssl将我的私钥转换为RSA私钥?

回答

105

较新版本的OpenSSL说BEGIN PRIVATE KEY,因为它们包含私钥+标识密钥类型的OID(这被称为PKCS8格式)。为了让老式键(被称为无论是PKCS1或传统的OpenSSL格式),你可以这样做:

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

或者,如果你有一个PKCS1关键,并希望PKCS8:

openssl pkcs8 -topk8 -nocrypt -in privkey.pem 
+0

完美!像魅力一样工作。非常感谢! –

+1

这也是解决方案来获取奇怪的错误信息,如'无效的PEM结构', - BEGIN ...'丢失.'从像Cyber​​duck这样的工具,而纯SSH使用相同的密钥工作。 – Daniel

+0

这对我有用。 Windows用户可以在这里获得OpenSSL:http://slproweb.com/products/Win32OpenSSL.html – ben

14

这可能是有一定的帮助(不要随便写出来的反斜杠命令“\”,他们是为了表明,“一切都必须在一行”):

Which Command to Apply When

IT方面eems所有的命令(灰色)以任何类型的密钥文件(绿色)作为“in”参数。这很好。

下面是命令再次,方便的复制粘贴:

openssl rsa            -in $FF -out $TF 
openssl rsa -aes256          -in $FF -out $TF 
openssl pkcs8 -topk8 -nocrypt        -in $FF -out $TF 
openssl pkcs8 -topk8 -v2 aes-256-cbc -v2prf hmacWithSHA256 -in $FF -out $TF 

openssl rsa -check -in $FF 
openssl rsa -text -in $FF 
+0

图像的“graphml”文件(可以用[yworks yed](https://www.yworks.com/products/yed)编辑)例如)可以在这里找到[这里](https://s3-eu-west-1.amazonaws.com/lohlxadsvl/openssl_commands.graphml) –