SSH如何保证通信安全

SSH的通信步骤主要包括建立加密通道、认证和通信三个阶段。分析下来风险主要是在建立加密通道阶段,分析和应对总结如下。
阶段一:协商加密通信连接。即通过非对称加密方式先在Client和Server之间安全的协商对称密钥(即会话密钥):
1)双方协商SSH版本、采用的非对称加密算法等信息;
2)Server发送公钥给Client;
3)Client生成对称密钥(即会话密钥)的相关参数,并用公钥加密后发给Server;
4)Server基于私钥解密信息获取参数,并基于密钥交换算法生成同样的会话密钥。
5)双方后续通信均基于此会话密钥进行加密,从而避免密钥被窃取风险。会话密钥定期更新。
本阶段的主要风险在于:SSH不具备CA证书机制,可能会被链路中间人伪造Server并发送自己的公钥给Client,而Client无法确定其真实性。
解决方案:本阶段(协商)完成后,Client使用的客户端会计算并显示公钥的SHA1值,用户可以用这个值与Server服务方在公开渠道(如网站)提供的公钥的SHA1值对比,以确保其真实性。
SSH如何保证通信安全_第1张图片
阶段二:登录认证、。在会话密钥建立的安全加密连接上,Client向Server发出登录请求,Server进行认证。认证主要包括两种方式:
**1)登录用户名和密码认证,即对称密钥方式认证。**这个很简单,Server根据信息生成SHA1值进行比对即可。
2)SSH密钥对认证,即使用客户端的非对称密钥进行认证。在前期(如用户注册阶段)以安全的方式生成一个客户端的非对称密钥对,并将公钥信息配置到Server端(不同登录账户应放到不同账户目录下,具体参考:https://blog.csdn.net/nahancy/article/details/79059135)。 随后使用Linux命令行或者Windows SSH客户端配置需要使用的证书路径,即发送密钥对登录请求到Server。Server端获取需要登录的账号信息后,基于非对称密钥启动认证流程,确认请求的私钥签名正确即可成功登录。
阶段三:通信阶段。
理论上阶段二、三因为都是在阶段一的会话密钥加密后进行通信,因此除非暴力破解否则没有安全问题。

上面过程涉及到三种密钥:
1、建立安全信道密钥:对称密钥或者非对称密钥。
2、真正用于会话加密的密钥:建立安全信道的密钥不适合用于加密。如果是非对称密钥,则由于性能较低不适合加密;而如果是对称密钥如果直接用于会话加密就会导致该密钥一直不变,非常容易被破解(哪怕是事后破解也是暴露了密钥信息)。因此,真正用于会话的密钥是由第一步建立安全信道时协商交换生成的,通常做法是增加一个随机数作为计算会话密钥的因子,同时周期性更新。
3、最终登录密钥:对称密钥或者非对称密钥,均要事先配置。

最后一点思考:
SSH和VPN通信建立其实是有很大共同点,核心目标都是在传输关键内容前建立好安全信道,确保数据的机密性和完整性。那么建立安全信道要考虑的关键点就是协商好用于加密会话的对称密钥。如果基于对称密钥,必须进行事先的配置且确保用于建立安全信道的密钥分发绝对安全。因此,绝大部分场景下都是采用非对称密钥方案,不需要提前协商即可建立密钥安全交换信道。因此,从上面的分析来看,若场景中没有的对称密钥而必须采用非对称密钥机制,最大的威胁就来自于中间人攻击。
避免中间人攻击只有两种方案:
1)在能够控制链路的情况下,避免链路上的节点处于不可信任状态,确保节点都可信。但这个往往很难做到。
2)采用有权威可信机构的认证方案。比如非对称密钥领域,需要通信双方有可信CA颁发的证书,从而确保双发的公钥都是未经中间人伪造的。

参考:
SSH 协议原理:https://www.jianshu.com/p/8e5b7aea52b5
SSH协议认证详解:https://www.cnblogs.com/alexyuyu/articles/7740213.html
SSH密钥对登录方式:https://blog.csdn.net/zyboy2000/article/details/53057330

你可能感兴趣的:(学习总结)