pem 文件差异 - ssh-keygen 与 openssl

pem 文件差异 - ssh-keygen 与 openssl

我使用生成了我的公钥/私钥对

ssh-keygen -t rsa -b 2048 -v

然后需要一个 .pem 文件并按照此操作https://serverfault.com/questions/706336/how-to-get-a-pem-file-from-ssh-key-pair

ssh-keygen -f id_rsa -e -m pem   
-----BEGIN RSA PUBLIC KEY-----

但后来我发现了这个https://gist.github.com/mingfang/4aba327add0807fa5e7f

openssl rsa -in ~/.ssh/id_rsa -outform pem
-----BEGIN RSA PRIVATE KEY-----

为什么输出不同?

答案1

它们就是这样写的; OpenSSH 通过调用函数PEM_write_RSAPublicKey(stdout, k->rsa)来发出公钥材料,而 OpenSSL 则对给定的私钥进行操作。使用 OpenSSH,我想大多数情况是将公钥转换为可在某些外部服务器上使用的形式,而私钥在客户端系统上保持私有,因此对密钥对的公钥进行操作是有意义的。使用 OpenSSL,就不存在“将公钥转换为适合其他 SSH 服务器的形式”的问题,因此代码可以直接对私钥进行操作。不同的代码,不同的意图,不同的结果。do_convert_to_pemssh-keygen.c

答案2

对于该openssl rsa命令,您需要该-pubout标志来输出公钥而不是私钥。要将其输出为 RSA 公钥(按照这种方式ssh-keygen -e),请改用该-RSAPublicKey_out标志:

openssl rsa -in id_rsa -outform PEM -RSAPublicKey_out
-----BEGIN RSA PUBLIC KEY-----

这给出了相同的输出

ssh-keygen -e -f id_rsa -m pem
-----BEGIN RSA PUBLIC KEY-----

仅当我创建密钥的原始命令包含该标志时,该openssl命令才适用于我。ssh-keygen-m PKCS8

相关内容