SSH 如何建立安全通信
当我们发送敏感信息/信件时,我们希望它对外界保密。因此,我们确保它受到保护,方法是将其密封在信封中,然后使用美国邮政服务 (USPS) 将其发送到目的地。至少,这是我们过去发送信息的方式。我甚至没有参与有关加密和摩尔斯电码的讨论,它们使用了更高级的保密级别。
现在,由于人类已经进化并适应了互联网,我们使用安全连接来交换信息。以前,我们使用 telnet 连接到使用端口 23 的远程服务器。问题是我们通过纯文本发送信息,这意味着任何想要阅读信息的人都可以嗅探网络,信息就会被泄露(相当于他们可以打开通过 USPS 发送的信件并阅读它。)
这个结果并不是我们在发送原始消息时想要的。总得有一种安全的方法将消息发送到远程服务器吧?当然,解决方案是通过安全外壳 (SSH) 发送。
SSH 如何发送加密消息
因此,我希望使用加密消息从客户端到服务器进行安全通信,反之亦然。我使用 SSH 实现此目的,如下所示。SSH 通过端口 22 在两台主机之间建立安全连接:Host-1(服务器)和 Host(客户端)。在相互验证身份后,它们便可以安全地交换消息。
加密类型
SSH 使用三种不同的加密类型:
- 对称加密
- 非对称加密
- 哈希
我将简单解释一下这些类型。
对称加密
对称加密又称为共享密钥加密,通常使用单个密钥或一对密钥来加密和解密消息。此密钥用于加密客户端和服务器之间的整个通信会话。
客户端和服务器都同意使用一种单一方法并生成共享密钥,该密钥当然永远不会向第三方披露,因此它用于发送共享/密钥消息。此方法最有趣的部分是,密钥永远不会在客户端和服务器之间交换。相反,每台机器都使用先前商定的方法独立计算共享密钥。即使第三方机器捕获了数据,也无法解密,因为用于加密数据的方法是未知的。
非对称加密
与上述方法不同,此方法使用一对密钥进行加密和解密。这些密钥称为公钥和私钥。顾名思义,公钥分布广泛。私钥在功能上与公钥密切相关,但不能仅通过知道公钥来计算。
私钥是整个通信过程中的一个重要因素,因为保密性取决于私钥不向任何第三方泄露,并且它是唯一能够解密由其自己的公钥加密的消息的密钥。因此,如果任何一方希望解密和阅读消息,他们必须拥有私钥。
让我们使用两个系统尝试这种方法。我们将从工作站开始,它有两对密钥生成,如下所示:
因此,服务器将工作站的信息存储在其known_hosts
文件中,如下所示:
服务器验证通过后,服务器和客户端使用Diffie-Hellman密钥交换算法协商会话密钥,该共享密钥用于加密和解密。
最后阶段是客户端的身份验证,这是使用 SSH 密钥对完成的。下图显示了此过程如何发生:
当我发出命令时ssh -v student@workstation.lab.example.com
,会发生以下情况:
结论
本文的目的是让用户了解 SSH 如何在两个系统之间建立安全通信。希望我能够对这个过程提供一些见解。
[想要了解有关 SSH 的更多信息?下载高级 SSH 备忘单。]