如何快速识别SSH私钥文件格式?

遠程桌面管理器在今天引發,該工具的SSH金鑰生成器提供了將私鑰保存為OpenSSH格式的選項,但實際上將其存儲為PKCS#1 / OpenSSL格式,同時還使用了相同的隨機*.pri文件擴展名來表示兩種提供的格式。

save as

我只是想连接到一个AWS EC2实例,但WinSCP、FileZilla和PuTTY都使用不同的私钥格式。 欢迎提供更多见解,这只是我目前的不完全理解。
1个回答

文件扩展名通常是随机的或者不足以识别格式。 广泛的类别包括:
  • PEM 文件,其中包含 ASN.1 数据,使用 DER 编码
  • PEM 文件,其中包含其他格式编码的数据
  • 非 PEM 格式
PEM 文件在 -----BEGIN----------END----- "标签"之间包装了 Base64。它们也常用于同时包含私钥和 SSL 证书(-chain)。使用 在线 ASN.1 解码器 检查 PEM 文件中 Base64 的内容。

PEM 文件

PKCS#1 / OpenSSL:id_rsa,*.pem,*.der,*.key,... -----BEGIN RSA PRIVATE KEY----- PuTTY密钥生成器将其称为“OpenSSH SSH-2私钥(旧PEM格式)”(?)。根据此答案,“SSLeay”或“传统”格式。Base64以MII...开头。ASN.1内容更多信息PKCS#8:*.pem,*.der,*.key,... -----BEGIN PRIVATE KEY----------BEGIN ENCRYPTED PRIVATE KEY----- 未加密版本的Base64以MII...IBADAN开头。 ASN.1内容,基本上是PKCS#1加上版本信息。 了解更多信息OpenSSH:*.???(不知道典型的文件扩展名是什么) -----BEGIN OPENSSH PRIVATE KEY----- 外部为PEM格式,但非ASN.1内容。 显然是一种文档中有限描述的格式

非PEM文件

PuTTY Private Key:*.ppk 内容还包含用于识别其为PuTTY私钥的可读文字。 PKCS#12 / PFX:*.p12,*.pfx PFX是一种由Microsoft开发的格式,后来以PKCS#12的形式发布。其内容是二进制的,不仅可以包含私钥,还可以包含SSL证书(-chain)。

OpenSSH格式不使用DER,但它确实使用标准的SSHv2数据包数据类型(例如,32位长度,<...>正是SSHv2数据包中“字符串”类型的标准格式)。因此,PROTOCOL.keydraft-miller-ssh-agent上的文档应该足够了,再结合RFC 4251上的数据类型定义。 - user1686
对于OpenSSH的“新”格式,请参考https://github.com/openssh/openssh-portable/blob/master/PROTOCOL.key。小提示:PKCS12可以(并且几乎总是)包含_X.509v3/PKIX_证书,这些证书不仅用于SSL/TLS,还用于S/MIME、XMLdsig/enc、某些代码签名、PDF签名等等。(但不包括SSH。) - dave_thompson_085
1请不要使用在线解码器来处理您的私人PEM文件。它们是私密的。 - Rich Remer