当前位置: 首页 > 知识库问答 >
问题:

使用OpenSSL和公钥ssh-keygen为ssh生成私钥

颛孙和悌
2023-03-14

我正在尝试使用openssl生成一个安全的私钥和公钥,以便与我的云托管提供商一起使用,但当我这样做时,openssl的公钥输出未被识别。

$ openssl genrsa -out private.pem -passout file:password.txt  2048

生成RSA私钥后,2048位长模,然后

$ openssl rsa -in private.pem -passin file:password.txt   -pubout -out public.pem

它编写了RSA公钥。输出如下所示:

-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAuefPvX5Bih6GYbr1eTNf
Fa++DvhHg4nxcXZAor7gNEM1+XPY2wxG2r2g/Jub6OWHd8GDAf6SBCCld+alC9WS
KnAd2qz34yBzG4pJ5/tLux1yX5k45BPTcTHfZGmFlAxsSNTZVh5Zh9KYUpsklKOW
2Pb5gwlMvweIoqf0lqrNqX8agDWzAn4bRbW8ZeNKUuNuccx4PlFwMg4lEcPypcCL
HPAHGiQTR1xZ/jlohFMIH1cGCBVC4kuaEtUi3Qer9wzuvh376RQPnKD0jJgraiDM
pSrdMeH+0eJfqckM8pJ99F/kfKWcGtk6l1AJX511xsPLDTHxaP/ry8zlaAJ1vH9o
3wIDAQAB
-----END PUBLIC KEY-----

这是标准格式,它非常适合其他用途,但所有云和托管服务提供商都需要这样的公钥:

ssh-rsa XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX==

这是他们识别的唯一有效格式。

我知道ssh-keygen可以轻松完成所有这些,但我正在使用当前最新的openssl版本1.0.2h,其中针对Google和Red Hat员工指出的一些漏洞进行了安全修复。

那么,如何使用从openssl生成的密钥获取ssh keygen公钥格式呢?

共有1个答案

冯玮
2023-03-14

在做了一些研究和实验后,我找到了最简单的解决方案。

使用密码长度为32个或更多字符的openssl生成安全私钥,然后使用ssh-keygen命令获得所需的输出。

ssh-keygen  -y -f private.pem > public_key.pub

它工作准确!

 类似资料:
  • 我使用命令“ssh-keygen-t rsa”创建了一个没有密码的公钥,我打算将其用于github,但我错误地发送了公钥和私钥...... 这到底意味着什么?

  • ssh-keygen和openssl是否可能从同一个私钥生成两个不同的公钥?命令与命令生成的公钥(和之间的内容)不同。

  • 如前所述,许多 Git 服务器都使用 SSH 公钥进行认证。 为了向 Git 服务器提供 SSH 公钥,如果某系统用户尚未拥有密钥,必须事先为其生成一份。 这个过程在所有操作系统上都是相似的。 首先,你需要确认自己是否已经拥有密钥。 默认情况下,用户的 SSH 密钥存储在其 ~/.ssh 目录下。 进入该目录并列出其中内容,你便可以快速确认自己是否已拥有密钥: $ cd ~/.ssh $ ls a

  • 主要的问题是,我对C相当陌生,OpenSSL留档对我来说不够清晰,我尝试过使用读和写rsa键到C中的pem文件,但我不太明白。例如,函数如何创建私有和公共?而从何而来?pcszPassphrase的意义是什么? 我会解释,好像这是某种伪代码,这就是我想做的,粗体部分是我不知道如何做的: 生成私钥和公钥作为十六进制缓冲区(客户端) 基本上,我知道如何处理AES加密/解密和通信协议,反正他们已经实现了

  • 我在将包含RSA公钥的字符串转换为java.security公钥类型时遇到了麻烦,该RSA公钥是我在cygwin中使用SSh-keygen生成的。 那么,我假设我的问题是两个密钥之间有什么区别,以及我如何才能成功地将第一个转换为可用的PublicKey对象?

  • 我正在尝试使用Java的runtime.getruntime().exec()使用ssh-keygen linux实用工具从私钥中提取公钥。 当我在终端上运行这个命令时,它完美无缺地工作,我能够从RSA私钥中提取公钥