SSH的体系结构图如下: 传输层协议(The Transport Layer Protocol)提供服务器认证,数据机密性,信息完整性 等的支持; 用户认证协议(The User Authentication Protocol) 则为服务器提供客户端的身份鉴别; 连接协议(The Connection Protocol) 将加密的信息隧道复用成若干个逻辑通道,提供给更高层的应用协议使用; 各种高层应用协议可以相对地独立于SSH基本体系之外,并依靠这个基本框架,通过连接协议使用SSH的安全机制 。
第一种级别(基于口令的安全验证) 只要知道自己帐号和口令,就可以登录到远程主机。所有传输的数据都会被加密,但是不能保证正在连接的服务器就是想连接的服务器。可能会有别的服务器在冒充真正的服务器,也就是受到“中间人”这种方式的攻击。 第二种级别(基于密匙的安全验证)需要依靠密匙 采用数字签名的方法来认证客户端。目前,设备上可以利用RSA和 DSA两种公共密钥算法实现数字签名。
前提 Ac:客户端公钥,Bc:客户端密钥,As:服务器公钥,Bs :服务器密钥。在认证之前,客户端需要通过某种方法将公钥 Ac 登录到服务器上。 认证过程分为两个步骤: 1. 会话密钥(session key)生成 1). 客户端请求连接服务器,服务器将 As 发送给客户端。 2). 服务器生成会话ID(session id),设为 p,发送给客户端。 3). 客户端生成会话密钥(session key),设为 q,并计算 r = p xor q。 4). 客户端将 r 用 As 进行加密,结果发送给服务器。 5). 服务器用 Bs 进行解密,获得 r。 6). 服务器进行 r xor p 的运算,获得 q。 7). 至此服务器和客户端都知道了会话密钥q,以后的传输都将被 q 加密。 2. 认证 1) 服务器生成随机数 x,并用 Ac 加密后生成结果 S(x),发送给客户端 2) 客户端使用 Bc 解密 S(x) 得到 x 3) 客户端计算 q + x 的 md5 值 n(q+x),q为上一步得到的会话密钥 4) 服务器计算 q + x 的 md5 值 m(q+x) 5) 客户端将 n(q+x) 发送给服务器 6) 服务器比较 m(q+x) 和 n(q+x),两者相同则认证成功