SSH协议
SSH是Secure Shell的缩写,是由IETF网络工作组开发的基于公钥的安全应用协议。它由三个子协议组成:SSH传输层协议、SSH用户认证协议和SSH连接协议,每个子协议共同实现加密、认证、完整性检查等各种安全服务。
研究目标是通过现代密码技术逐步增强网络安全,并增强网络内的非安全服务。提供服务器认证、用户认证以及FTP、Rlogin、Telnet等安全加密网络连接服务。 SSH 协议有两个主要版本:SSH1 和SSH2。 SSH1因漏洞已被禁用,目前主要使用SSH2。
SSH2协议概述
首先我们展示主要上下文图。
可以看到它包含几个键。
session key: 用作私钥加密的密钥以及每个ssh 连接的标识ID。
主机密钥: 用于服务器身份验证。
known-hosts: 这是客户端上存在的受信任服务器公钥的列表。
user key: 用于客户端认证。
服务器和客户端交换会话密钥后,所有数据都会使用该会话的私钥进行加密。
上图提供了SSH2 协议的高级概述。首先,SSH2协议分为三个子协议:SSH-TRANS、SSH-AUTH、SSH-CONN。
其中,SSH-TRANS是一个出站协议,定义了出站数据包,其他两个协议都建立在该协议之上。
SSH-AUTH 是SSH 用于验证客户端身份的协议。这实际上是您在ssh 命令中输入密码的步骤。您的用户名和密码将发送给您,但该协议是建立在SSH-TRANS 之上的,因此您知道您的内容已加密并且可以安全发送。
SSH-CONN是一个真正的应用协议。这里可以定义多种协议,其中常用的scp、sftp、常规的远程shell都是这里定义的协议实现。这里的各种应用协议在使用之前首先要经过SSH-AUTH的验证。
这三个协议之间的关系可以用下图来说明。
SSH-TRANS 是SSH-AUTH 和SSH-CONN 用于提供安全加密的基本协议。尽管SSH-CONN 按时间顺序发生在SSH-AUTH 之后,但SSH-CONN 并不依赖于SSH-AUTH。
SSH 的工作原理
SSH功能
1) 克服传统网络服务程序的加密弱点
明文传输:FTP、POP、Telnet 等传统网络服务程序使用明文在网络上传输密码和数据,本质上是不安全的。别有用心的人很容易截获这些密码和数据。
安全验证弱点:这些服务程序的安全验证方法也存在弱点。这意味着它们很容易受到“中间人”攻击。所谓“中间人”攻击技术是指“中间人”冒充真实服务器,接收发送到服务器的数据,然后冒充用户并将数据发送到真实服务器。服务器。
当服务器和用户之间的数据传输被“中介”修改时,就会出现严重的问题。 SSH 允许您加密所有发送的数据,从而杜绝“中间人”攻击并防止DNS 和IP 欺骗。
使用SSH 的另一个好处是发送的数据经过压缩,从而提高传输速度。 SSH具有很多特性,不仅可以替代Telnet,还可以为FTP、PoP、甚至PPP提供安全的“通道”。
2)SSH为客户端提供两级安全验证
第一级(基于密码的安全验证)
如果知道账号和密码,就可以登录远程主机。尽管发送的所有数据均已加密,但不能保证您连接的服务器就是您正在连接的服务器。其他服务器可能会伪装成真实服务器,这是一种“中间人”攻击。
第二级(基于密钥的安全认证)
这应该取决于密钥。这意味着您需要为自己创建一个密钥对,并将公钥放在您需要访问的服务器上。当连接到SSH服务器时,客户端软件会要求服务器使用密钥进行安全验证。当服务器收到请求时,它首先在服务器的主目录中查找公钥,并将其与发送的公钥进行比较。
如果两个密钥匹配,则服务器使用公钥来加密“挑战”并将其发送到客户端软件。当客户端软件收到“挑战”时,它可以使用其私钥对其进行解密并将其发送到服务器。这样,您需要知道密钥的密码。然而,与第一级相比,第二级不需要通过网络发送密码。
在第二级,不仅所有发送的数据都是加密的,而且“中间人”攻击也是不可能的(因为中间人没有私钥)。不过,整个登录过程可能需要10秒钟。
SSH应用程序
SSH 是目前最可靠的协议,旨在为远程登录会话和其他网络服务提供安全性。使用SSH协议可以有效防止远程管理过程中的信息泄露。 SSH最初是UNIX系统上的一个程序,但它很快扩展到其他操作平台。如果使用得当,SSH 可以弥补网络中的漏洞。 SSH 客户端可在各种平台上使用。您可以在几乎任何UNIX 平台上运行SSH,包括HP-UX、Linux、AIX、Solaris、Digital UNIX、Irix 等。
身份验证:
身份验证是确定联系人是人还是机器的过程。也就是说,当A想要与B通信时,通常会先交换一些数据。 A如何判断返回的数据确实是B发送的?模仿机器的方法有很多种。
对于SSH,这主要是通过公钥完成的。首先,客户端有一个公钥列表,并将公钥存储在它信任的机器上。当您启动SSH 连接时,服务器会发送其公钥,客户端会查找它。如果公钥在此列表中,则表示该机器是真实的服务器。
当然,真实情况要复杂得多。事实上,服务器实际上并不发送公钥,因为它很容易被第三方窃取。这将在下面详细解释。
SSH如何保证通信安全
简要说明:
1) 客户端向服务器发送连接请求。
2) 服务器将其公钥发送给客户端。
3) 客户端使用服务器的公钥对通信密钥进行加密并发送给服务器。
4)如果通信过程被截获,即使窃听者知道公钥及其加密的内容,如果没有私钥(RSA算法),他也无法解密。
5) 接收到密文的服务器用自己的私钥解密,得到通信密钥。
ssh-keygen命令生成服务器的公钥和私钥对,cp命令将服务器的公钥复制到客户端(注意伪分布式模式下服务器和客户端是同一台机器)。服务器端公钥允许无需密码即可直接访问。
SSH无密码登录原理
1)必须依赖于密钥。即先为自己创建一个密钥对,然后将公钥放在需要访问的服务器上。
2)当连接到SSH服务器时,客户端软件会要求服务器使用密钥进行安全验证。
3)当服务器收到请求时,首先在服务器上的主目录中查找公钥,并将其与发送的公钥进行比较。如果两个密钥匹配,则服务器使用公钥来加密“挑战”并将其发送到客户端软件。
4)客户端软件收到“挑战”后,用自己的私钥解密,用服务器的公钥加密,最后发送给服务器。
5) 服务器使用自己的密钥解密挑战,将发送的“挑战”与原始“挑战”进行比较,如果是,则允许并完成会话建立操作。
版权声明:本文转载于网络,版权归作者所有。如有侵权,请联系本站编辑删除。