我可以使用 导出公钥gpg2 --export-ssh-key 15EDA5801C8D18FF。如何获取私有 SSH 子密钥?
在这里问这个问题也太复杂了
首先,私钥使用的格式有数十种甚至数百种,而且你没有说出你想要哪种格式。gpg --export-ssh-key生成由 OpenSSH 定义的公钥格式,并且也被许多与 OpenSSH 兼容的东西(如 Putty、Jsch、paramiko)使用,并且您似乎对此感到满意,所以我会武断地猜测您想要 OpenSSH 可以使用的格式。如果没有,这可能不起作用,你就输了。
忽略 SSHv1 密钥(它们是不同的,但现在已经过时了),OpenSSH历史上对 SSHv2 使用与 OpenSSL 相同的私钥格式,因为它使用 OpenSSL 库代码来处理这些密钥和相关的加密操作。OpenSSL 反过来支持多种 DER 格式(此处不相关)和 8 种 PEM 格式:2 种特定于每种密钥类型(又名算法)的“传统”格式(RSA、DSA/DSS、EC[DSA])和 2 种适用于任何(支持)密钥类型。ssh-keygen只会写入旧格式,但它和 ssh 和 sshd 都可以读取旧格式或 PKCS8。(由于 PKCS8 的加密形式使用了比传统加密形式更强大的 PBE 方法,因此您可以找到许多 Stack Qs/As 和其他从这一时期开始的网站,建议您将用于 OpenSSH 的传统私钥转换或替换为PKCS8 以获得更好的安全性。)
然后 OpenSSH 添加了 ed25519,这是 OpenSSL 尚未实现的密钥类型/算法,因此他们创建了自己的私钥格式,简称为“新”格式,使用比 OpenSSL PKCS8 更强大的 PBE 方法,并且能够支持所有密钥类型。最初从 2014 年的 6.5 开始,默认情况下仅用于 ed25519,但可以通过指定 来请求其他类型-o,并且您会再次找到 Qs/As 和网站推荐此以提高安全性。然后从 2018 年 7.8 开始,所有类型默认使用新格式,但您可以使用 请求旧格式(ed25519 除外)-m pem。
gpg,支持 PGP 消息传递的程序不支持其中任何一个。然而,GnuPG 软件包还包含一个不同的程序gpgsm,它支持 S/MIME 消息传递,并且支持 PKCS8 格式。(还有 PKCS12 格式,OpenSSL 支持,但 OpenSSH 不支持。)仅对于 RSA,有一个令人惊奇的 hack,通过它您可以将为 PGP 定义的密钥传输到gpg名义上gpgsm用于 S/MIME 的密钥。按照此答案中的过程进行操作,但使用或等效于此处的--export-secret-key-p8 --armor|-a注释,但在步骤 3 处停止。PKCS8(私钥)PEM 文件可与 OpenSSH 一起使用。如果您希望对其进行加密,您可以使用或转换为 PKCS8 加密,或转换为 OpenSSH 新格式。openssl pkey -$algopenssl pkcs8 -topk8ssh-keygen -p
或者,正如我在后一个答案中所说,您可以使用 BouncyCastle 库编写一个非常简单的程序来在 Java 中执行此操作,该库支持 PGP/gpg 格式和OpenSSL/PKIX/S/MIME 格式(以及其他格式)。几乎可以肯定,JS/nodejs、python 和 perl 中有一些库可以做同样的事情,可能还有一些我什至不知道的其他语言,但我对它们并不熟悉。然而,编写程序通常被认为属于 StackOverflow 而不是 SU。
| 归档时间: |
|
| 查看次数: |
8609 次 |
| 最近记录: |