SSH 和 SSL/TLS 的异同

SSh SSL

提出这个问题的原因是因为netconf 是over SSH 的, 而我去找Java 关于SSH 的实现, 包括jsch,SSHD, 还有一些SSL的实现(PLAY)。 

这里主要是摘录并且翻译了一些材料。


问题

1 什么是SSL, SSH


解决

1 什么是SSL, SSH 以及关系

1)SSH

ssh只是加密的shell,最初是用来替代telnet的。通过port forward,也可以让其他协议通过ssh的隧道而起到加密的效果。

SSH 的英文全称是Secure SHell。通过使用SSH,你可以把所有传输的数据进行加密,这样“中间人”这种攻击方式就不可能实现了,而且也能够防止DNS和IP欺骗。还有一个额 外的好处就是传输的数据是经过压缩的,所以可以加快传输的速度。SSH有很多功能,它既可以代替telnet,又可以为ftp、pop、甚至ppp提供一 个安全的“通道”。SSH是由客户端和服务端的软件组成的,有两个不兼容的版本分别是:1.x和2.x。

从 客户端来看,SSH提供两种级别的安全验证。第一种级别(基于口令的安全验证)只要你知道自己帐号和口令,就可以登录到远程主机。所有传输的数据都会被加 密,但是不能保证你正在连接的服务器就是你想连接的服务器。可能会有别的服务器在冒充真正的服务器,也就是受到“中间人”这种方式的攻击。第二种级别(基 于密匙的安全验证)需要依靠密匙,也就是你必须为自己创建一对密匙,并把公用密匙放在需要访问的服务器上。如果你要连接到SSH服务器上,客户端软件就会 向服务器发出请求,请求用你的密匙进行安全验证。服务器收到请求之后,先在你在该服务器的家目录下寻找你的公用密匙,然后把它和你发送过来的公用密匙进行 比较。


最初的SSH协议是由芬兰的一家公司的研究员Tatu Ylönen于1995年设计开发的,但是因为受版权和加密算法等等的限制,现在很多人都转而使用OpenSSH。OpenSSH是SSH的替代软件包,而且是開放源代碼且自由的。


SSH协议框架中最主要的部分是三个协议:

传输层协议(The Transport Layer Protocol):传输层协议提供服务器认证,数据机密性,信息完整性等的支持。

用户认证协议(The User Authentication Protocol):用户认证协议为服务器提供客户端的身份鉴别。

连接协议(The Connection Protocol):连接协议将加密的信息隧道复用成若干个逻辑通道,提供给更高层的应用协议使用。

在客户端来看,SSH提供两种级别的安全验证。

第一种级别(基于密碼的安全验证),知道帐号和密碼,就可以登录到远程主机,并且所有传输的数据都会被加密。但是,可能会有别的伺服器在冒充真正的伺服器,无法避免被「中间人」攻击。

第二种级别(基于密钥的安全验证),需要依靠密钥,也就是你必须为自己创建一对密钥,并把公有密钥放在需要访问的伺服器上。客户端软件会向伺服器发出请求,请求用你的密钥进行安全验证。服务器收到请求之后,先在你在该伺服器的用户根目录下寻找你的公有密钥,然后把它和你发送过来的公有密钥进行比较。如果两个密钥一致,伺服器就用公有密钥加密「质询」(challenge)并把它发送给客户端软件。从而避免被「中间人」攻击。


2)SSL

SSL TLS    SSL在服务器和客户机两端可同时被支持,目前已成为互联网上保密通讯的工业标准。现行的Web浏览器亦普遍将HTTP和SSL相结合,从而实现安全通信。

SSL协议的优势在于它是与应用层协议独立无关的。高层的应用层协议(例如:HTTPFTPTelnet等等)能透明的建立于SSL协议之上。


    1. 发送一个“ClientHello”消息,内容包括:支持的协议版本,比如TLS1.0版,一个客户端生成的随机数(稍后用户生成“会话密钥”),支持的加密算法(如RSA公钥加密)和支持的压缩算法。

    2. 然后收到一个“ServerHello”消息,内容包括:确认使用的加密通信协议版本,比如TLS 1.0版本。如果浏览器与服务器支持的版本不一致,服务器关闭加密通信,一个服务器生成的随机数,稍后用于生成"对话密钥",确认使用的加密方法,比如RSA公钥加密,服务器证书。

    3. 当双方知道了连接参数,客户端与服务器交换证书(依靠被选择的公钥系统)。这些证书通常基于X.509,不过已有草案支持以OpenPGP为基础的证书。

    4. 服务器请求客户端公钥。客户端有证书即双向身份认证,没证书时随机生成公钥。

    5. 客户端与服务器通过公钥保密协商共同的主私钥(双方随机协商),这通过精心谨慎设计的伪随机数功能实现。结果可能使用Diffie-Hellman交换,或简化的公钥加密,双方各自用私钥解密。所有其他关键数据的加密均使用这个“主密钥”

TLS 是SSL 的高级版本。 IETF将其进行了标准化,并改名为TLS。



3)关系


在最初的设计意图中,SSL(Secure Sockets Layer (SSL) and Transport Layer Security (TLS))被设计为加强Web安全传输(HTTP/HTTPS/)的协议(事实上还有SMTP/NNTP等),SSH(Secure Shell)更多的则被设计为加强Telnet/FTP安全的传输协议,默认地,它使用22端口.


They differ on the things which are around the tunnel. SSL traditionally uses X.509 certificates for announcing server and client public keys; SSH has its own format. Also, SSH comes with a set of protocols for what goes inside the tunnel (multiplexing several transfers, performing password-based authentication within the tunnel, terminal management...) while there is no such thing in SSL, or, more accurately, when such things are used in SSL they are not considered to be part of SSL (for instance, when doing password-based HTTP authentication in a SSL tunnel, we say that it is part of "HTTPS", but it really works in a way similar to what happens with SSH).

他们在处理trnnel上有些不同。 SSL 使用X.509认证 来声明服务器和客户端的public key。 SSh 有自己的格式。 

而且, SSh包含一系列的协议(具体是三个协议 RFC4254 RFC4252 RFC4253 ) 而SSL 中则没有。 或者更精确的说, 那些部分 没有被考虑到SSL的一部分 (比如说, 当在SSL tunnel做基于密码的HTTP认证的时候, 我们说这个是HTTPS的一部分, 但是它确实很像SSH user authernticate 的部分)* 这个点需要验证。 


Conceptually, you could take SSH and replace the tunnel part with the one from SSL. You could also take HTTPS and replace the SSL thing with SSH-with-data-transport and a hook to extract the server public key from its certificate. There is no scientific impossibility and, if done properly, security would remain the same. However, there is no widespread set of conventions or existing tools for that.

So we do not use SSL and SSH for the same things, but that's because of what tools historically came with the implementations of those protocols, not due to a security related difference. And whoever implements SSL or SSH would be well advised to look at what kind of attacks were tried on both protocols.

理论上讲, 你可以用SSH整体, 而只是替换tunnel部分用SSL。 你也可以使用HTTPS, 但是替换SSL 用SSH 的数据传送部分。 并且加上一个钩子从他的认证中抽取公共密码。 这并不是技术上的障碍, 而且, 如果处理合理, 安全性也是一致的。 只不过, 目前没有广泛使用的这种转换存在。

 *貌似 SSH 可以使用SSL 作为数据传送的。 


Good job. And in fact, since SSH is easier to set up than SSL, many people tunnel http (not https) inside SSH, e.g. to do remote system administration with a web GUI tool like ebox or webmin.

Just to point out, it's not quite true that the SSH guys "should" have used SSL: SSH was designed very specifically to have a small attack surface, and be very secure. SSHv2 has none of the problems and pitfalls in SSL/TLS, so going with a smaller thing that they understood well, with less complexity, they came out with something much better suited to their situation. It depends how paranoid you are: SSL isn't unusable, depending on the application, but SSH's design makes it acceptable in situations/security communities where SSL simply is not trusted. –

Well, SSH 2.0 was a complete rewrite of the protocol and appeared some time around 1999, so that one could have reused SSL 3.0 or even TLS 1.0. But, of course, TLS appears to be tied with X.509, which frightens developers away.


重要

      SSL              SSH
+-------------+ +-----------------+
| Nothing     | | RFC4254         | Connection multiplexing
+-------------+ +-----------------+
| Nothing     | | RFC4252         | User authentication
+-------------+ +-----------------+
| RFC5246     | | RFC4253         | Encrypted data transport
+-------------+ +-----------------+


小结

1 简单理解区别SSL 只是数据加密, 而SSH则包括三部分, 连接, 认证和加密。 而两者加密目前看起来是不同的。 

2 关于谁更安全应该看加密的方式,但不是我现在关注的。 


进一步的讨论。 

1 可以阅读以下SSL, SSH 的具体协议的定义。如果从事协议开发, 应该是必须的。 

2 可以在后面具体应用的时候具体体会一下SSH和SSL的不同。 



参考材料

What's the difference between SSH and SSL/TLS?

http://www.snailbook.com/faq/ssl.auto.html

SSH 协议与OpenSSH详解

http://freeloda.blog.51cto.com/2033581/1216374

What is the difference between SSL vs SSH? Which is more secure?

http://security.stackexchange.com/questions/1599/what-is-the-difference-between-ssl-vs-ssh-which-is-more-secure






你可能感兴趣的:(ssh,ssl)