如何转换ssh主机密钥?


17

我正在尝试将ssh服务器从2048位RSA密钥升级到更大的密钥,因为建议尽快淘汰2048位密钥。

我生成了一个新密钥,然后将其添加到sshd配置中,如下所示:

HostKey / etc / ssh / ssh_host_rsa_key             (旧的2k位密钥在前) 
HostKey / etc / ssh / ssh_host_rsa4096_key         (新的较大键2nd

重新启动后sshd,我将切换到主机,没有收到标识更改警告,但是新的标识也未缓存在中~/.ssh/known_hosts。如果我以相反的顺序放置这些行,则会收到标识更改警告。同样,当我添加ed25519密钥时,无论我按什么顺序输入,客户端都不会将新密钥添加到已知主机文件中。

这似乎使SSH主机密钥无法翻转-很难相信确实如此,但是,考虑到常规的安全性需要升级密钥。

我知道您可以交换密钥,然后每个客户端都需要运行ssh-keygen -R以删除旧密钥,然后手动验证并接受新密钥,但这确实很麻烦,特别是如果您有许多客户端连接或不进行管理所有的客户。更不用说,如果您不管理客户,那么他们很有可能不会实际检查主机密钥,而是直接点击Y,因此提高安全性的尝试实际上可能会让您接触到中间攻击。

有什么方法可以使SSH主机密钥升级起作用?也就是说,客户应该学习新的更安全的密钥(并希望也不要学习过时的密钥)。并且在没有提供主机密钥的情况下更改了中间人警告。


请看看这个。尽管它不能为您现在想要的解决方案提供解决方案,但它可能会帮助您将来实现最终目标。
rda

Answers:


14

自OpenSSH 6.8起支持主机密钥旋转(客户端和服务器均在此版本中添加了支持)。

因此该过程应如下所示:

  • 生成新密钥并将其选项HostKey newkey(在现有密钥之后)添加到/etc/ssh/sshd_config
  • 重新开始 sshd
  • 客户端必须设置UpdateHostKeys yes其配置(全局或按主机)
  • 连接的客户端将获取所有新密钥
  • 一段时间(几个月?)后,您可以从中删除旧密钥sshd_config并重新启动sshd
  • 客户端(在过渡期间连接的客户端)将已经具有新密钥(不会删除旧密钥,这是这里唯一的问题),并且它们不会显示MitM攻击警告。

新的足够的客户端将能够提取新的密钥。默认情况下,此功能未启用,可能是因为它是一个相当新的功能,很快就显示出一些安全方面的考虑。但是这些天,使用它应该很好。


-4

sshd始终使用第一行,因此将其删除,然后重新启动sshd。


1
...这导致可怕的主机密钥已更改警告。为了避免这种情况,请让客户学习新密钥(并逐步淘汰旧密钥)。
derobert

你是对的。您不能一次使用2个不同的键。ssl不是tls。没有密钥添加功能只是在更改。
Ipor Sircer '17

4
它既不是SSL也不是TLS。该协议支持多个主机密钥,例如,曾经每个人都拥有RSA和DSA密钥。现在通常是ED25519,ECDSA和RSA密钥。
derobert
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.