那里。
在这个问题中,我有一个关于公钥和私钥的非常具体的问题。所以公钥应该放在对立面。例如,如果我们有一个服务器,则服务器的公钥应该放在用户的机器中,而用户机器的公钥应该放在服务器机器中,这是用 Alice 和 Bob 的例子说明例子的理论。他们想在对方内部传输文件,但我的问题从这里开始,我看到很多网站通过公钥和私钥设置 SSH(包括 ssh.com、windows 网站、raspberry pi 文档(作为我的服务器))。但我没有看到任何来源说,将服务器的 ssh 公钥放到用户的机器上。
因此我们知道服务器拥有用户的公钥,这样当服务器想要通过 SSH 隧道发送数据时,它将使用公钥加密数据,用户将使用私钥解密数据。但是,用户如何在没有服务器公钥的情况下加密数据并将其发送到服务器?我没有看到任何地方可以设置这个。我按照提到的可信站点的步骤设置了 SSH 密钥身份验证,并且它对我有用,但我不明白如何在没有服务器公钥的情况下建立这种双向连接。这是真的吗?它是否会在第一个连接时在后台传输,或者即使没有服务器的公钥,用户也可以从服务器接收和加密数据?
我知道这个问题有点长,但背后的原理很简单,我觉得这里有些地方不对,或者我误解了。所以如果你能帮我解决这个问题,我将不胜感激。
答案1
my question starts here I saw many, many websites for setting up SSH via a public key and private keys (including ssh.com, windows website, raspberry pi documentation(as my server)). But I didn't see any Source that says, put the ssh public key of the server to the user's machine.
RFC 4251
4. 建筑
4.1 主机密钥
每个服务器主机都应该有一个主机密钥。主机可以有多个使用多种不同算法的主机密钥。多个主机可以共享同一个主机密钥。
[...] 服务器主机密钥用于密钥交换,以验证客户端是否确实在与正确的服务器通信。为了实现这一点,客户端必须事先了解服务器的公共主机密钥。
可以使用两种不同的信任模型:
o 客户端有一个本地数据库,将每个主机名(由用户输入)与相应的公共主机密钥关联起来。此方法不需要集中管理的基础设施,也不需要第三方协调。缺点是名称与密钥关联的数据库可能难以维护。
o 主机名与密钥的关联由受信任的认证机构 (CA) 认证。客户端只知道 CA 根密钥,并且可以验证所有由公认的 CA 认证的主机密钥的有效性。
第二种选择简化了维护问题,因为理想情况下只需要在客户端上安全地存储一个 CA 密钥。另一方面,每个主机密钥都必须经过中央机构的适当认证,然后才能进行授权。此外,中央基础设施也备受信任。
答案2
在公钥/私钥加密中,必须有一种方法来交换彼此的公钥。如果你在使用之前通过同一通道传输公钥,中间人攻击者就可以用自己的密钥交换密钥,从而窃听和修改整个加密通信。
因此,最佳做法是使用其他渠道传输公钥。第二好的方法是只传输一次公钥并永久存储。由于 SSH 客户端需要服务器的公钥,反之亦然,所以这就是要做的事情。
用户如何在没有服务器公钥的情况下加密这些数据并将其发送到服务器?
不能,见上文。如果您的 SSH 客户端在连接时仅接受服务器传输的公钥,那么这可以工作,但方式不安全。