HTTP 可以与 SSH 一起使用吗?如果是,为什么它不像 HTTP over SSL 那样流行?
为什么http + ssh 不流行?
如果我们忽略这两个服务提供的机密性和完整性服务中涉及的所有密码学,SSH 和 SSL 之间唯一的主要区别在于它们如何使用真实性概念。 真实性是确认通信的另一方确实是他们所说的人的过程。两种协议对此的处理方式不同。
SSL/TLS
SSL/TLS 主要与服务器身份验证有关。SSL/TLS 通信中的客户端很少经过身份验证(在 SSL/TLS 层)。例如,当您通过 HTTPS 连接到您的银行网站时,您的浏览器会收到来自银行的证明银行身份的证书。但是,您或您的浏览器永远不会被迫提供证书来识别客户是谁。
您的银行网站可能会要求您提供用户名和密码,但要了解这是在 HTTP 层发生的,并且在 SSL/TLS 协商已经完成之后。在 SSL/TLS 层,您的银行网站不知道您是谁。
此外,在 SSL/TLS 的传统操作模式中是信任链的概念。也就是说,当您从服务器收到证书时,您只会信任它,因为其他一些实体可以保证该证书的有效性。此“其他实体”称为证书颁发机构 (CA)。如果不是 CA,客户无法真正知道通信中的另一方是否是他们所说的人。
SSH
另一方面,SSH 更关注客户端身份验证,但也提供了一些服务器身份验证的措施,但与 SSL/TLS 的方式不同。
当您使用 SSH 连接到服务器时,服务器要求客户端提供用户名和密码(或 SSH 密钥)以识别客户端是否有权访问特定服务器。此过程内置于 SSH 本身。
连接后,服务器会为您提供 RSA 身份签名,您的客户端可以将其作为所述服务器的指纹在本地存储,以便将来当客户端连接到服务器时,他可以验证签名以确保他是肯定连接到他最初连接的同一台服务器。
但是,请注意差异。在 SSH 中,您可以连接到服务器,然后确保以后的连接都连接到同一台服务器。但该服务器的真实身份从未真正得到证实。没有第三方实体担保服务器的身份。事实上,你只知道你连接到了正确的服务器,因为你自己事先知道服务器上应该有什么。也就是说,当您通过 SSH 连接到服务器时,您事先知道您应该期望在服务器上看到一组特定的文件或软件。
相比之下,这两种模型最适合各自提供的目的。
SSL/TLS 最适合客户端可以是任何人但必须验证服务器身份的世界。在万维网中,这是理想的,因为您希望任何人都能够访问您的 Web 服务器,并且您希望“任何人”在知道他们确实连接到他们想要连接的服务器时感到安全。
SSH 最适合先验已知服务器的世界,并且在提供对资源的访问之前必须验证客户端。从那时起,对客户端来说最重要的是它们始终连接到它们最初连接到的同一台服务器。
本文是从SSH和SSL/TLS典型部署的角度来写的。这两种协议都有扩展,允许附加功能,但很少实现。即,有一种 SSL/TLS 方法也需要客户端身份验证,称为相互身份验证。还有一种提供证书颁发机构验证的 SSH 方法。
TLS/SSL 的目的是在两个应用程序之间提供安全性(通过密钥交换、加密和数字签名)。因此,这两个应用程序用于通信的协议是完全不可知的。它旨在作为一个安全层来支持预先存在的协议。
另一方面,SSH 被认为是一个完整的协议,可以安全地连接到远程服务器上的 shell,并取代不安全的协议,如 telnet、rlogin、rsh。
尽管存在通过 SSH 运行的协议(例如 SCP),但与 SSH 相比,TLS/SSL 更灵活、更完整、更轻巧,可用作安全层。还值得注意的是,HTTPS(即基于 TLS/SSL 的 HTTP)是在 1994 年发明的,比 SSH 早一年。