使用 生成密钥对时ssh-keygen
,可以通过 指定所需的签名类型-t
,例如ssh-keygen -t ssh-rsa
。我想知道,一旦创建了密钥对,ssh 私钥的签名类型是否不可更改?
如果可以更改,我可以使用哪个工具来更改签名类型?如何?
我问这个问题是因为我的一个旧密钥使用ssh-rsa
签名类型,现在ssh-rsa
签名算法已被弃用。
使用 生成密钥对时ssh-keygen
,可以通过 指定所需的签名类型-t
,例如ssh-keygen -t ssh-rsa
。我想知道,一旦创建了密钥对,ssh 私钥的签名类型是否不可更改?
如果可以更改,我可以使用哪个工具来更改签名类型?如何?
我问这个问题是因为我的一个旧密钥使用ssh-rsa
签名类型,现在ssh-rsa
签名算法已被弃用。
如果您使用创建常规 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
,你可以计算一个旧的-style MD5 指纹来自同一个键。)但是,如果您使用集中管理的SSH 证书,即如果您有类似的文件
id_rsa-cert.pub
,那么这些文件中将嵌入长期签名。要摆脱不推荐使用的签名算法,您需要重新颁发证书,很可能由您组织自己的 SSH 密钥证书颁发机构颁发。您可以向证书颁发机构提供现有 SSH 公钥的副本(如果他们还没有存档),他们将运行:
就像最初颁发证书时一样。
该命令将生成一个新
/path/to/user_key-cert.pub
文件,如果 CA 使用 up-to-date ,该文件将默认ssh-keygen
包含使用较新算法的 CA 签名。rsa-sha2-512
您仍将使用与以前相同的私钥,但需要分发重新颁发的证书(本质上是公钥的中央认证副本,具有一些额外的管理功能,例如可选的到期日期和 CA 定义
key_id
的保证字符串每当此证书用于身份验证时都会被记录)。当然,CA 可以决定是否接受以前经过认证的 SSH 公钥的副本来重新颁发证书;他们可能会要求您同时创建一个新的私钥,但这将是一个政策问题,而不是技术问题。
我想你不能。RSA 密钥和(比方说)DSA 密钥的生成方式不同。然后,这些算法之一的给定密钥对不是其他算法的密钥对。
如果您担心 RSA 的强度,我想您应该担心共享相同密钥对的每个算法。
那么你能做的最好的事情就是重新生成密钥对并再次分发公钥(你可以通过受 RSA 保护的 scp 来完成,直到你切换)。