Telnet采用明文传输,传输过程容易被窃取,除管理以外 还可用于端口扫描、测试目标端口可达、是否开放。
SSH 简单来说采用SSL加密传输,创建会话会产生一个非对称秘钥对(RSA、DSA、DH算法),服务端拥有私钥,客户端会提示接收/保存公钥,公钥加密的数据只有私钥才能解密。
然后再协商交换一个对称秘钥来加密之间的数据(DES、3DES、AES处理速度快),这样就可以防止信息泄露。
SSH不仅可以用来远程管理,还可以扩展SFTP、SCP、SLogin等等。
至于SSHv1和SSHv2(也有叫v1.5和 v1.9),前者稍有缺陷,v2进行算法修复。
最近在研究 GitHub 多账号管理 的问题,这其中就涉及到了 SSH 的连接方式,因此不得不了解一下 SSH 的工作原理。
一番搜索和实践后发现,这里面的水其实很深,真要理解透彻可能需要去读几本关于密码学的书。本人并没有多大兴趣去研究这个,所以只是浅谈,但对于只是使用 SSH 工具的人来说,这完全够用了。
几年前我了解到的是 SSH 使用非对称加密算法(RSA)来完成对称加密算法的密钥交换,最后使用对称加密算法实现数据安全传输。现在网上查到的却是先使用 Diffie-Hellman(DH)算法完成对称加密算法的密钥交换,再通过客户端的公钥识别身份。这让我丈二和尚摸不着头脑。
直到写这篇文章,在搜索了 SSH1 和 SSH2 的区别后,我才找到答案。原来这里面说的其实是两个不同的东西,一个是 SSH1,一个是 SSH2。现在都流行使用 SSH2,所以网上搜到的大多都是 SSH2 方面的东西。
如果你直接在网上搜索 “ SSH 实现原理 ”,那么搜到的大多都只是在谈 SSH 的身份认证部分而非整一个工作原理。试着搜索 “ SSH 协商会话加密 ”,你将会看到不一样的内容。
SSH2 的整一个连接过程大体上可分为两个部分: 协商会话加密 和 身份认证 。
这其中还用到了 对称加密 、 非对称加密 和 哈希 算法( MD5 )。
协商会话加密 使用 Diffie-Hellman 算法生成会话密钥,具体流程如下。(大概流程)
注意这里的公钥、私钥和下面要讲的非对称加密的公钥、私钥是不一样的,不是同一个东西。
共享密钥 确定后,接下来的通信都使用 共享密钥 进行加密和解密,因此是安全的,但我们还没有确认双方的身份。
客户端识别服务端是通过人工进行确认的。我们在第一次连接服务器时,都会弹出一个警告,让用户确定是否进行连接。警告的内容包含了服务器的 公钥指纹 ,如下图。
既然 公钥 是公开的,那中间人是不是也可以伪造这样的信息,让我们误以为是真实的服务器发出来的?答案是“是的”,所以我们还需要确定服务端是否拥有对应的私钥。不过查阅相关的文章,好像没有这样一个过程,都是在用户确定服务端公钥(回复yes)后就进行下一步操作(确认客户端身份)。个人感觉不合理,应该是要有的,具体我也没有深究,毕竟这篇文章是 浅谈 嘛!(好像被发现为什么要用这个做标题了
欢迎分享,转载请注明来源:夏雨云
评论列表(0条)