我知道客户端需要一个客户端密钥对来进行客户端身份验证;客户端将其公钥发送给服务器以加密挑战,客户端将解密该挑战以验证客户端。
我也知道,在对客户端进行身份验证之前,客户端需要通过将主机公钥存储在 ~/.ssh/known_hosts
但是,为什么服务器需要主机密钥对?似乎只需要主机的公钥,为什么我们需要非对称密钥呢?
我知道客户端需要一个客户端密钥对来进行客户端身份验证;客户端将其公钥发送给服务器以加密挑战,客户端将解密该挑战以验证客户端。
我也知道,在对客户端进行身份验证之前,客户端需要通过将主机公钥存储在 ~/.ssh/known_hosts
但是,为什么服务器需要主机密钥对?似乎只需要主机的公钥,为什么我们需要非对称密钥呢?
您已经非常了解公钥加密的工作原理以及客户端如何使用公钥身份验证向服务器进行身份验证。
另一个方向也需要同样的事情。互联网和计算机网络是邪恶的地方,很容易重定向流量、欺骗 DNS 或以某种方式让您连接到想要捕获您的密码或其他敏感信息的邪恶主机。并且不能确保只使用公钥,因为每个人都可以向您发送此公钥,但只有您要连接的服务器才能向您发送您可以使用主机公钥验证的数据签名。
建立 SSH 连接后,服务器使用其私钥加密会话密钥,客户端使用服务器公钥对其进行解密。此外,为了证明服务器拥有与其声称拥有的公钥相关的私钥,它必须使用私钥加密(签名)某些内容。否则,您可以获得任何服务器的公钥并说它是您的,尽管您不拥有该密钥。它比这更复杂一些,但这是简单的版本。
有关如何建立 SSH 连接,请参阅https://www.digitalocean.com/community/tutorials/understanding-the-ssh-encryption-and-connection-process 。