我在生成 opensslPEM_read_bio_RSA_PUBKEY()
函数可以使用的公钥时遇到问题。我不断收到错误。
显然我不能简单地在ssh-keygen <>.pub
密钥文件中使用 ASCII 字符串,因为它是 SSH 文件格式,或者我可能是SubjectPublicKeyInfo
结构。
这是密钥生成代码: ssh-keygen -t rsa -b 1024 -C "Test Key"
我在网络上的 php 中找到了一个转换器,它将公钥的内容转换为 base64 PEM ASCII 字符串格式。然而,该功能仍然不喜欢它。
Openssl 文档指出:
如何将我的 OpenSSH 公钥转换为 OpenSSL 函数将使用它的任一格式?
Bri*_*ard 74
好的!
所以我走进了这个想法“很容易,我明白了。” 事实证明,它比我想象的要多得多。
所以第一个问题是(根据 OpenSSL (man 3 pem) 的手册页),OpenSSL 期望 RSA 密钥采用 PKCS#1 格式。显然这不是 ssh-keygen 正在使用的。您有两个选择(通过四处搜索)。
如果你有 OpenSSH v. 5.6 或更高版本(我没有在我的笔记本电脑上),你可以运行这个:
ssh-keygen -f key.pub -e -m pem
Run Code Online (Sandbox Code Playgroud)
这样做的更长的方法是将您的 SSH 密钥分解成它的各种组件(我发现其中的一些博客条目指责 OpenSSH 是“专有的”,我更喜欢称其为“独特的”),然后使用 ASN1 库交换东西。
幸运的是,有人编写了代码来执行此操作:
https://gist.github.com/1024558
小智 28
假设您有 SSH 私钥id_rsa
,您可以像这样从中提取公钥:
openssl rsa -in id_rsa -pubout -out id_rsa.pub.pem
Run Code Online (Sandbox Code Playgroud)
我意识到 OP 询问了转换公钥的问题,所以这并不能完全回答这个问题,但是我认为无论如何它都会对某些人有用。
另请注意,此命令会生成 PEM 公钥格式,这通常是 OpenSSL 所期望的。另一方面,Brian 的回答会生成一个 RSAPublicKey 格式的文件,这不是 OpenSSL 所期望的正常格式(尽管后来的版本显然可以通过-RSAPublicKey_in
标志读取它)。要转换,您可以执行以下操作:
openssl rsa -RSAPublicKey_in -in id_rsa.rsapub.pem -pubout -out id_rsa.pub.pem
Run Code Online (Sandbox Code Playgroud)
小智 21
您想要的格式是ssh-keygen
调用PKCS8
. 因此,以下命令将产生所需的输出:
ssh-keygen -f key.pub -e -m pkcs8
Run Code Online (Sandbox Code Playgroud)
从ssh-keygen
手册页:
-m key_format
Specify a key format for the -i (import) or -e (export) conversion
options. The supported key formats are:
``RFC4716'' (RFC 4716/SSH2 public or private key),
``PKCS8'' (PEM PKCS8 public key) or
``PEM'' (PEM public key).
The default conversion format is ``RFC4716''.
Run Code Online (Sandbox Code Playgroud)
类似于下面 Amal Chaudhuri 的方法,这对我有用。我需要从为 SFTP 客户端 (Cyberduck) 生成的 ssh 公钥创建一个 pem 文件。
openssl rsa -in ~/.ssh/id_rsa -outform pem > id_rsa.pem
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
226674 次 |
最近记录: |