2013-07-18 104 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) –