如何将私钥转换为RSA私钥?

118

首先让我解释一下我的问题。我从CA购买了证书,并使用以下格式生成csr和私钥:

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 Invalid Private Key(400证书格式错误,私钥无效)”。

有趣的是,在AWS文档页面上,他们展示的示例私钥以“--------Begin RSA Private Key--------”开头。

是否有办法使用openssl将我的私钥转换为RSA私钥?

3个回答

197
较新版本的OpenSSL会显示“BEGIN PRIVATE KEY”,因为它们包含私钥和标识密钥类型的OID(这被称为PKCS8格式)。要获取旧式密钥(也称为PKCS1或传统的OpenSSL格式),您可以执行以下操作:
openssl rsa -in server.key -out server_new.key

如果您正在使用OpenSSL 3,您需要添加-traditional
openssl rsa -in server.key -out server_new.key -traditional

如果你有一个PKCS1密钥并且想要PKCS8,可以选择以下方式:
openssl pkcs8 -topk8 -nocrypt -in privkey.pem

1
这也是解决像Cyberduck这样的工具出现“Invalid PEM structure,'-----BEGIN...' missing.”这样奇怪的错误消息的方法,而使用相同密钥的纯SSH却可以正常工作。 - Daniel
1
谢谢!我在运行时遇到了“发生客户端错误(MalformedCertificate):无法解析证书。请确保证书是PEM格式。”,使用我的私钥进行操作后解决了该问题! - philfreo
4
供参考:请查看 https://dev59.com/tGIj5IYBdhLWcg3wnmXA 获取更完整的解释。 - Blaisorblade
2
我们如何做与此相反的操作?我需要从RSA私钥获取一个私钥 - edthethird
2
openssl pkcs8 -topk8 -nocrypt -in privkey.pem 将会将 PKCS8 写入标准输出。 - Paul Kehrer
显示剩余3条评论

34

这可能会对你有所帮助(不要在命令中直接写出反斜杠'\',它们的作用是表示“所有内容都必须在一行中”):

Which Command to Apply When

看起来所有的命令(灰色)都可以将任何类型的密钥文件(绿色)作为“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

and
openssl rsa -check -in $FF
openssl rsa -text  -in $FF

2
该图像的“graphml”文件(例如可以使用yworks yed进行编辑)可以在此处找到。 - David Tonhofer

29

BEGIN OPENSSH PRIVATE KEY 转换为 BEGIN RSA PRIVATE KEY 的方法:

ssh-keygen -p -m PEM -f ~/.ssh/id_rsa

3
这正是我所需要的。谢谢! - RossD
这种行为在ssh-keygen手册中间接地记录了下来,但实际上除了-i和-o之外的其他操作模式并没有提到-m标志的使用。 - ikrabbe
5
请注意,这将覆盖密钥文件。因此,请先备份。 - Vadzim
有没有办法使用这个命令指定一个新的输出文件? - Eddie

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接