我们如何确保这不是中间人?
第一次,您可以检查 RSA 指纹。有人需要事先与您沟通,或者您需要以某种方式安全地接收它(即通过 https 站点发布,或通过签名的电子邮件接收)。例如,许多托管服务提供商会向您发送您的主机 SSH 指纹。
在 Ubuntu 上,您可以使用以下命令找到自己的 RSA 指纹:
ssh-keygen -lf /etc/ssh/ssh_host_rsa_key.pub
请注意,还有其他使用中的指纹格式(dsa 和 ecdsa),具体取决于服务器和客户端配置。在您的 known_hosts 文件中,您可以看到每个指纹的存储格式。
它是如何编码的?
known_hosts 文件是一个主机名列表(或者通常是主机名的散列)、指纹的类型以及 base64 编码的指纹本身(加密信息)。可以在OpenSSH 手册页的SSH_KNOWN_HOSTS FILE FORMAT部分下找到格式详细信息。
这种所谓的“主机密钥”是不对称的。这是什么意思?
这些非对称机制意味着,虽然指纹允许您验证服务器的身份,但您不能使用它来生成有效的标识(以模拟)该服务器。
必须注意,指纹(和相应的私钥)用作密码操作的秘密:从客户端向服务器发送随机挑战。拥有私钥的服务器可以对该挑战进行签名并将其发送回,然后客户端可以验证签名是否有效,因为指纹是适当的。
换句话说,密码秘密是双重的,私钥可以加密或签名,公钥可以用于解密或验证签名。其中一个密钥可以毫无风险地公开,用于验证签名和加密文本,只有私钥的所有者才能解码。这大致就是密码学中非对称的含义。