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

Posted

技术标签:

【中文标题】如何将私钥转换为 RSA 私钥?【英文标题】:How to convert a private key to an RSA private key? 【发布时间】:2013-07-17 23:57:21 【问题描述】:

让我先解释一下我的问题。我从 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 doc 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。”

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

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

【问题讨论】:

【参考方案1】:

较新版本的 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

【讨论】:

这也是在使用相同密钥的纯 SSH 工作时从 Cyber​​duck 等工具获取 Invalid PEM structure, '-----BEGIN...' missing. 等奇怪错误消息的解决方案。 谢谢!我得到了A client error (MalformedCertificate) occurred when calling the UploadServerCertificate operation: Unable to parse certificate. Please ensure the certificate is in PEM format. 并在我的私钥上运行它修复了它! 供参考:更完整的解释见***.com/q/20065304/53974。 我们如何反其道而行之?我需要来自RSA Private KeyPrivate Key openssl pkcs8 -topk8 -nocrypt -in privkey.pem 会将 PKCS8 写入 STDOUT【参考方案2】:

这可能会有所帮助(不要在命令中逐字写出反斜杠“\”,它们的意思是“所有内容都必须在一行上”):

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

【讨论】:

图片的“graphml”文件(比如可以用yworks yed编辑)可以在here找到【参考方案3】:

BEGIN OPENSSH PRIVATE KEY 转换为BEGIN RSA PRIVATE KEY

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

【讨论】:

这正是我所需要的。谢谢! 此行为在 ssh-keygen 手册页中间接记录,但对于除 -i 和 -o 之外的其他操作模式,实际上并未提及 -m 标志的使用 注意这会覆盖密钥文件。所以先做好备份。

以上是关于如何将私钥转换为 RSA 私钥?的主要内容,如果未能解决你的问题,请参考以下文章

使用 RSA SHA 256 对字符串进行签名,仅将私钥作为字符串 .NET

ruby 以太坊将私钥转换为地址(公钥)

libsodium PHP将私钥存储在文件中

如何在 Java 中将 OpenSSH 私钥转换为 RSA 私钥?

将私钥放入带有变量的 application.yml

将私钥存储在数据库中