如何将私钥转换为 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 工作时从 Cyberduck 等工具获取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 Key
的Private 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