ssh 密钥的签名类型是不可更改的,这是否正确?

z.h*_*.h. 2 ssh

使用生成密钥对时ssh-keygen,可以通过-t以下方式指定所需的签名类型ssh-keygen -t ssh-rsa:我想知道,一旦创建密钥对,ssh 私钥的签名类型就不能更改吗?

如果可以更改,我可以使用哪个工具来更改签名类型?如何?

我问这个问题是因为我的一个旧密钥使用ssh-rsa签名类型,现在ssh-rsa签名算法已被弃用。

tel*_*coM 7

如果您使用 创建常规 SSH 密钥对ssh-keygen -t rsa,该密钥将根本不包含任何签名 - 它实际上只是一个 RSA 密钥对,没有其他任何内容,就像以前一样。SSH 密钥没有签名类型;SSH 连接有一个。

对于此类密钥,当连接两端都支持较新的签名算法时,足够现代的 SSH 版本将自动使用rsa-sha2-512或签名。rsa-sha2-256在 SSH 密钥身份验证中,签名是暂时的,仅在连接协商时创建,之后就会被丢弃。因此,无需更改现有的 SSH RSA 密钥即可使用新签名。

(如果运行ssh-keygen -f id_rsa -l,输出通常会显示“SHA256”:这意味着 SHA256 算法用于生成密钥的指纹,该指纹不存储在密钥本身中,而是按需计算。使用ssh-keygen -f id_rsa -l -E md5,您可以计算旧的-来自同一密钥的 MD5 指纹样式。)


但是,如果您使用集中管理的SSH 证书,即如果您有类似的文件id_rsa-cert.pub,那么这些证书中将嵌入长期签名。要摆脱已弃用的签名算法,您需要重新颁发证书,很可能是由您组织自己的 SSH 密钥证书颁发机构重新颁发。

您可以向证书颁发机构提供现有 SSH 公钥的副本(如果他们尚未存档),他们将运行:

ssh-keygen -s /path/to/ca_key -I key_id /path/to/user_key.pub
Run Code Online (Sandbox Code Playgroud)

就像最初颁发证书时一样。

该命令将生成一个新/path/to/user_key-cert.pub文件,如果 CA 使用最新的,该文件将默认ssh-keygen包含使用较新算法的 CA 签名。rsa-sha2-512

您仍将使用与以前相同的私钥,但需要分发重新颁发的证书(本质上是公钥的集中认证副本,具有一些额外的管理功能,例如可选的到期日期和保证 CA 定义的key_id字符串每当此证书用于身份验证时都会被记录)。

当然,CA 可以决定是否接受先前认证的 SSH 公钥副本来重新颁发证书;他们可能会要求您同时创建一个新的私钥,但这将是一个政策问题,而不是技术问题。