根据http://en.wikipedia.org/wiki/Secure_Shell#Key_management,ssh 在与服务器建立第一个连接时容易受到“中间人”攻击。
SSH 还支持由自动生成的密钥加密的基于密码的身份验证。在这种情况下,攻击者可以模仿合法方,询问密码并获取密码(中间人攻击)。然而,这只有在双方以前从未进行过身份验证的情况下才有可能,因为 SSH 会记住远程端曾经使用过的密钥。
VPN是否有同样的“弱点”?
根据http://en.wikipedia.org/wiki/Secure_Shell#Key_management,ssh 在与服务器建立第一个连接时容易受到“中间人”攻击。
SSH 还支持由自动生成的密钥加密的基于密码的身份验证。在这种情况下,攻击者可以模仿合法方,询问密码并获取密码(中间人攻击)。然而,这只有在双方以前从未进行过身份验证的情况下才有可能,因为 SSH 会记住远程端曾经使用过的密钥。
VPN是否有同样的“弱点”?
如果 VPN 服务器使用客户端已知的密钥进行身份验证,那么就没有问题 - 密钥是已知的(并且据说是受信任的)并且客户端可以确定它已连接到合法服务器。
这同样适用于 SSH。维基百科中的措辞并不完全正确——为了使第一个连接可靠,客户端应该知道有效的服务器密钥。“他们之前已经过身份验证”并不重要。客户信任密钥很重要。
客户端如何信任密钥?在 SSL/TLS 中使用 X.509 证书时,它会根据复杂的规则进行验证,并且证书链会构建到受信任的根证书。如果无法构建链,则最终实体证书不可信。在 SSH 中没有证书链,客户端可以信任服务器的唯一方法是客户端使用其他机制(语音呼叫或纸质或 USB 记忆棒或单独的 SSL/TLS 连接等)传输服务器的密钥。