SSH和SSL的区别—基于原理和协议
“SSH 和 SSL 的区别?”“难道不是苹果和橙子的区别?”“这种比较有什么意义吗?”80%的人会有这样的疑问,这明明是两种不同的东西嘛。是的,这看似不是一个合理的比较。普遍的认知是:
他们差别很大。但仔细想想,他们功能相似,加密方式相似,这是上天的安排,还是冥冥中的巧合?看似风马牛不相及,你真的认真对比过他们吗?工作中,你又是否偶尔会混淆他们呢?下面让我们基于原理和协议一起来一探究竟……
一、SSL
SSL,即安全套接层(Secure Sockets Layer),它是一种安全协议,是Netscape公司在推出Web浏览器首版时一起提出的。
SSL证书主要是部署在网站服务器中,通过SSL协议实现浏览器客户端与网站服务器通信链路上的数据加密,并认证网站服务器身份,防止钓鱼网站。它用来保障你的浏览器和网站服务器之间安全通信,免受网络“中间人”窃取信息。
传统的HTTP协议采用明文传输数据,用户数据存在被窃取和篡改的风险。而部署了SSL证书的网站,可以采用安全的HTTPS协议进行访问。当浏览器访问以“https://”开头的URL时,浏览器通过SSL连接使用HTTP。SSL协议会在数据传输之前对数据进行加密再进行网络传输,保证了用户数据在传输链路上的安全。
SSL协议包含两个子协议:
二、SSH
SSH,也就是Security Shell,由 IETF 的网络小组(Network Working Group)所制定,是目前较可靠,专为远程登录会话和其他网络服务提供安全性的协议。
SSH最初是UNIX系统上的一个程序,后来又迅速扩展到其他操作平台。SSH相当于一个隧道,数据通过的时候保护它不被泄露和篡改,为shell提供安全的传输和运用环境。具体来说,通过它可以安全的远程实行另一台UNIX体系上机器的指令。
SSH只是一种协议,它有很多实现方法。在Linux中SSH几乎是标配,其中用的最多的实现是OpenSSH。在Windows系统中使用SSH,会用到另一种软件PuTTY。这就相当于用QQ远程在别的电脑上登录一样,是一种安全地远程登录服务器的方法。
在互联网层次中,SSH与HTTP,FTP类似,归于OSI七层参考模型中的应用层协议,它是使用TCP协议的应用层服务中的一员。
三、SSH和SSL之间的区别和关联是什么?
1. 在OSI七层模型中的位置
看完前面的介绍,我们了解到 SSL 是保护网络传输数据的协议,是安全地在互联网中传输的基石。而 SSH 只是一种用于主机用户登录,安全共享数据的网络应用程序。它们在OSI七层模型中位于不同的位置:
2. 功能的关联与差异
(1) 差异
从功能上来讲,他们差异很大。SSH 代表了“Secure Shell”。我们关心它是因为,它使联网的计算机1能够访问联网计算机2上的shell,以计算机1的身份登录主机,并对他进行操作。SSL 代表“安全套接字层”。我们之所以关注它,是因为它使浏览器能够以一种安全的加密方式在web服务器之间传输数据,从而使监视所有internet流量的第三方间谍难以生存。SSL和主机用户名登录没有任何关系,它本身并不实现主机登录的功能,它只是一个单纯的加密功能。
(2) 关系
SSL和SSH都必须提供在不安全通道上加密和解密数据的系统。SSH有自己独立于SSL的传输协议,所以这意味着SSH在底层不使用SSL。为了方便理解,可以简单的认为功能上:SSH = SSL + 用户登录功能等应用层协议。
3. 加密方式的关联与差异
从严格密码学角度来看,他们身份验证的加密方式不同。SSL 和 SSH 都提供加密元素,以便为检查完整性的机密数据传输构建隧道。
两种加密方式它们都有潜在的理论弱点。最强的方法是Encrypt-then-MAC,它在IPsec ESP中实现。
4. 安全性比较
从安全性上来讲,Secure Shell和SSL各有千秋。
SSL有证书中心(CA)公正,可以确定发送者的身份。而SSH没有,可能会被“中间人攻击”,它相当于现代版的窃听。如果攻击者插在用户与远程主机之间(比如在公共wifi区域),用伪造的公钥,获取用户的登录密码。再用这个密码登录远程主机,那么SSH的安全机制就荡然无存了。不过确保禁用了不安全的SSL/TLS协议,且所访问的网址前面有HTTPS作为开头,可以避免大多数的中间人攻击。
SSL终止代理可以处理传入的SSL连接,解密SSL并将未加密的请求传递给其他服务器。SSL允许您通过签名证书使用PKI(公钥基础设施)。而使用SSH,您必须通过ftp等其他协议手动交换密钥指纹。
SSH有一个用户身份验证层,这是SSL所缺乏的(不过是因为它并不需要验证功能)。在使用utf 8编码时,SSH协议使用了更多的协议。考虑到有更多的潜在攻击,SSH的攻击面似乎更大。但这只是因为SSH内建了一个完整的应用程序。安全性和SSL其实相差无几。
从概念上讲,我们可以使用SSH并将隧道部分替换为SSL中的隧道部分,甚至还可以使用HTTPS并使用SSH-with-data-transport替换SSL事务,并使用钩子从其证书中提取服务器公钥。没有科学上的不可能性,如果做得恰当,它们的安全性将保持不变。
(文/老王谈运维)