SSH(Secure Shell)协议简介

来源:互联网 发布:领航者炒股软件 编辑:程序博客网 时间:2024/06/06 01:08

概念

SSH是指Secure Shell,SSH协议族由IETF(Internet Engineering Task Force)的Network Working Group制定,SSH协议的内容SSH协议是建立在应用层和传输层基础上的安全协议。
传统的网络服务程序,如FTP、Pop和Telnet其本质上都是不安全的;因为它们在网络上用明文传送数据、用户帐号和用户口令,很容易受到中间人(man-in-the-middle)攻击方式的攻击。就是存在另一个人或者一台机器冒充真正的服务器接收用户传给服务器的数据,然后再冒充用户把数据传给真正的服务器。
SSH(Secure Shell)是目前比较可靠的为远程登录会话和其他网络服务提供安全性的协议。利用SSH协议可以有效防止远程管理过程中的信息泄露问题。通过SSH,可以把所有传输的数据进行加密,也能够防止DNS欺骗和IP欺骗。
SSH,还有一个额外的好处就是传输的数据是经过压缩的,所以可以加快传输的速度。SSH有很多功能,它既可以代替Telnet,又可以为FTP、Pop、甚至为PPP提供一个安全的"通道"。


协议历史

最初的SSH协议是由芬兰的一家公司开发的。但是因为受版权和加密算法等等的限制,现在很多人都转而使用OpenSSH。OpenSSH是SSH的替代软件包,而且是免费的。

基本框架

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

1.传输层协议
传输层协议(The Transport Layer Protocol)提供服务器认证,数据机密性,信息完整性 等的支持
2.用户认证协议
用户认证协议(The User Authentication Protocol) 则为服务器提供客户端的身份鉴别;
3.连接协议
连接协议(The Connection Protocol)将加密的信息隧道复用成若干个逻辑通道,提供给更高层的应用协议使用;
4.同时还有为许多高层的网络安全应用协议提供扩展的支持。
各种高层应用协议可以相对地独立于SSH基本体系之外,并依靠这个基本框架,通过连接协议使用SSH的安全机制。


SSH的安全验证

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

SSH(Secure <wbr>Shell)协议简介
第一种级别(基于口令的安全验证),知道帐号和口令,就可以登录到远程主机,并且所有传输的数据都会被加密。但是,可能会有别的服务器在冒充真正的服务器,无法避免被‘中间人’攻击。
第二种级别(基于密匙的安全验证),需要依靠密匙,也就是你必须为自己创建一对密匙,并把公有密匙放在需要访问的服务器上。客户端软件会向服务器发出请求,请求用你的密匙进行安全验证。服务器收到请求之后,先在你在该服务器的用户根目录下寻找你的公有密匙,然后把它和你发送过来的公有密匙进行比较。如果两个密匙一致,服务器就用公有密匙加密"质询"(challenge)并把它发送给客户端软件。从而避免被‘中间人’攻击。
在服务器端,SSH也提供安全验证。
在第一种方案中,主机将自己的公用密钥分发给相关的客户机,客户机在访问主机时则使用该主机的公开密钥来加密数据,主机则使用自己的私有密钥来解密数据,从而实现主机密钥认证,确定客户机的可靠身份。
在第二种方案中,存在一个密钥认证中心,所有提供服务的主机都将自己的公开密钥提交给认证中心,而任何作为客户机的主机则只要保存一份认证中心的公开密钥就可以了。在这种模式下,客户机必须访问认证中心然后才能访问服务器主机。

 

SSH 的工作过程
在整个通讯过程中,为实现 SSH的安全连接,服务器端与客户端要经历如下五个阶段:

1、版本号协商阶段,SSH目前包括 SSH1和SSH2两个版本, 双方通过版本协商确定使用的版本
2、密钥和算法协商阶段,SSH支持多种加密算法, 双方根据本端和对端支持的算法,协商出最终使用的算法
3、认证阶段,SSH客户端向服务器端发起认证请求, 服务器端对客户端进行认证
4、会话请求阶段, 认证通过后,客户端向服务器端发送会话请求
5、交互会话阶段 ,会话请求通过后,服务器端和客户端进行信息的交互 
1 . 版本号协商阶段
1、服务器打开端口 22,等待客户端连接。
2、客户端向服务器端发起 TCP初始连接请求,TCP连接建立后,服务器向客户端发送第一个报文,包括版本标志字符串,格式为“SSH-<主协议版本号>.<次协议版本号>-<软件版本号>”,协议版本号由主版本号和次版本号组成,软件版本号主要是为调试使用。
3、客户端收到报文后,解析该数据包,如果服务器端的协议版本号比自己的低,且客户端能支持服务器端的低版本,就使用服务器端的低版本协议号,否则使用自己的协议版本号。
4、客户端回应服务器一个报文,包含了客户端决定使用的协议版本号。服务器比较客户端发来的版本号,决定是否能同客户端一起工作。
5、如果协商成功,则进入密钥和算法协商阶段,否则服务器端断开 TCP连接。
Note: 版本号协商阶段报文都是采用明文方式传输的。

2. 密钥和算法协商阶段
1、服务器端和客户端分别发送算法协商报文给对端,报文中包含自己支持的公钥算法列表、加密算法列表、MAC(Message Authentication Code,消息验证码)算法列表、压缩算法列表等;
2、服务器端和客户端根据对端和本端支持的算法列表得出最终使用的算法。
3、服务器端和客户端利用 DH交换(Diffie-Hellman Exchange)算法、主机密钥对等参数,生成会话密钥和会话 ID。

通过以上步骤,服务器端和客户端就取得了相同的会话密钥和会话ID。
对于后续传输的数据,两端都会使用会话密钥进行加密和解密,保证了数据传送的安全
在认证阶段,两端会使用会话 ID用于认证过程。 
      Note:

             在协商阶段之前,服务器端已经生成 RSA或 DSA密钥对,他们主要用于参与会话密钥的生成。

3. 认证阶段
1、客户端向服务器端发送认证请求,认证请求中包含用户名、认证方法、与该认证方法相关的内容(如:password认证时,内容为密码)。
2、服务器端对客户端进行认证,如果认证失败,则向客户端发送认证失败消息,其中包含可以再次认证的方法列表。
客户端从认证方法列表中选取一种认证方法再次进行认证。
该过程反复进行, 直到认证成功或者认证次数达到上限, 服务器关闭连接为止。
SSH提供两种认证方式:
password认证:
客户端向服务器发出 password认证请求,将用户名和密码加密后发送给服务器;服务器将该信息解密后得到用户名和密码的明文,与设备上保存的用户名和密码进行比较,并返回认证成功或失败的消息。
publickey 认证:采用数字签名的方法来认证客户端。目前,设备上可以利用RSA和 DSA两种公共密钥算法实现数字签名。客户端发送包含用户名、公共密钥和公共密钥算法的 publickey 认证请求给服务器端。服务器对公钥进行合法性检查,如果不合法,则直接发送失败消息;否则,服务器利用数字签名对客户端进行认证,并返回认证成功或失败的消息
SSH2.0还提供了 password-publickey 认证和 any 认证:
password-publickey 认证:指定该用户的认证方式为 password 和 publickey认证同时满足。客户端版本为 SSH1的用户只要通过其中一种认证即可登录;客户端版本为 SSH2的用户必须两种认证都通过才能登录。
any认证:指定该用户的认证方式可以是 password,也可以是 publickey。
4.会话请求阶段
1、服务器等待客户端的请求;
2、认证通过后,客户端向服务器发送会话请求;
3、服务器处理客户端的请求。请求被成功处理后, 服务器会向客户端回应 SSH_SMSG_SUCCESS包,SSH进入交互会话阶段;否则回应 SSH_SMSG_FAILURE包,表示服务器处理请求失败或者不能识别请求。

 
5.交互会话阶段
在这个模式下,数据被双向传送:

  1. 客户端将要执行的命令加密后传给服务器;
  2. 服务器接收到报文,解密后执行该命令,将执行的结果加密发还给客户端;
  3. 客户端将接收到的结果解密后显示到终端上.


SSH协议的可扩展能力

SSH协议框架中设计了大量可扩展的冗余能力,比如用户自定义算法、客户自定义密钥规则、高层扩展功能性应用协议。这些扩展大多遵循IANA(Internet Assigned Numbers Authority)的有关规定,特别是在重要的部分,象命名规则和消息编码方面。

原创粉丝点击