建立双向信任关系:第一步
让我们详细第检查一下这个双向信任关系是如何建立起来的,首先,客户端必须确定它是否信任服务器,然后,服务器必须确定它是否信任客户端,因此建立双向信任关系的第一步是客户端计算机确定它是否在与一个正确的服务器进行通讯。
SSH客户端应该信任SSH服务器吗?
建立一个安全的SSH传输的第一步是由客户端启动的,客户端需要知道它是否正与正确的服务器进行通讯(而不是一台被劫持了ip地址或主机名的SSH服务器),这是在SSH密钥交换过程完成的。
注意:如果你需要在一台不同的机器上重新使用一个ip地址,并重新配置你为SSH建立的安全配置,你可以通过从旧机器复制SSH密钥文件到新机器来实现。
SSH密钥交换过程
当一个SSH客户端发送一条连接请求到SSH服务器的端口22上时,就启动了SSH密钥交换过程。(如图4-2所示)
|
| 图4-2:SSH客户端连接请求 |
最后一件事情是在diffie-hellman-group1-sha1密钥交换过程结束时SSH服务器将最后一块数据发送回客户端,客户端需要依据它的主机密钥的公共部分算出共享秘密(如图4-3)。
![]() |
| 图4-3:SSH服务器应答 |
|
| 图4-4:SSH客户端在known_hosts数据库中搜索SSH服务器名字 |
(如果SSH服务器上的密钥发生了变化,你需要使用一个文本编辑器如vi从known_hosts数据库文件中移除损坏了的密钥)
一旦用户确定信任SSH服务器,只要存储在known_hosts数据库中的SSH服务器的主机加密密钥不发生改变,未来所有SSH连接将会自动建立。
SSH客户端最后只需要使用SSH服务器主机加密密钥的公共部分(相对于从服务器发出的共享秘密数据的最后一个数据块)执行一个数学计算确定数据来自一个正确的服务器,客户端成功执行后,它与服务器之间就建立起了一个安全的SSH传输(查看图4-5)。
![]() |
| 图4-5:SSH客户端和SSH服务器建立一个SSH传输 |
建立双向信任关系:第二步
我们叙述了一半关于在客户端和服务器之间建立双向信任关系的过程,现在,我们需要讨论另一半,在服务器上会发生什么。
服务器能够信任客户端吗?
前面我们只回答了如何在客户端和服务器之间建立双向信任关系的一半,客户端信任服务器,现在服务器需要决定它是否应该信任客户端。
基于主机的认证
历史上,基于主机的认证是使用客户端源ip地址或主机名实现的,攻击者能够很容易地攻破使用这种信任方法的服务器,他们修改他们的服务器匹配其中一个可接受的主机名,通过嗅探ip地址或劫持用于解析主机名到ip地址的DNS(域名系统)。
然而,系统管理员仍然受基于主机的认证诱惑,因为它很容易配置服务器信任所有客户端机器上的账号(甚至root账号),不幸的是,即使引入了经过改进的SSH,基于主机的认证与其他方法对比起来仍然很脆弱,它不应该被使用。
用户认证
当使用用户认证时,SSH服务器不关心是来自哪个主机的SSH连接请求,只要用户是一个可信任的用户即可。
SSH可以使用用户普通的密码和账号名用于安全的SSH传输认证,如果用户在客户端和服务器上有相同的账号和密码,SSH服务器就认为这个用户是可信任的,然而,这个方法的主要缺点是我们需要直接在SSH客户端shell脚本中输入用户的密码,用于自动连接SSH服务器,因此这种方法也不应该使用(回想我们想在主服务器和备用服务器之间自动数据同步)。
使用SSH加密密钥的用户认证
幸运的是,还有一种比前面两种都好的方法,那就是使用SSH加密密钥的用户认证,我们所要做的就是在SSH服务器上存储用户加密密钥的公共部分,当我们尝试从SSH客户端连接SSH服务器时,服务器将向我们发送一个挑战(一个使用用户加密密钥公共部分加密的随机数),只有一个知道这个加密密钥私有部分的客户端能够解码这个挑战。
SSH客户端上用户加密密钥的私有部分通常由一个密语保护,一个密语就是由用户选择的长密码(它可以包括空格),它用于在存储用户加密密钥的私有部分到磁盘前对其加密,我们将不使用密语,因为密语需要被添加到我们的自动化脚本中。
注意:你可以使用Linux入侵检测系统或LIDS来代替,使用LIDS拒绝所有用户(甚至root)对存储在磁盘上的用户加密密钥私有部分的访问。同时请查看ssh-agent的man手册对ssh-agent守护进程的描述。
这里有一个简单的双节点SSH客户端-服务器方法。
[2]在/etc/ssh目录也也可以看到DSA文件,然而,数字签名算法有一个可疑的历史,可能包含一个安全漏洞,参考Daniel J. Barrett和Richard E. Silverman编写的《SSH权威指南》。
[3]技术上,known_hosts数据库用于Open SSH v1,在Open SSH v2中被重命名为known_hosts2,我们不会用这个特征添加更多麻烦为了避免引起更多笨重的解释。
[4]你可以运行下面的命令校验SSH服务器上的“指纹”:
#ssh-keygen -l -f /etc/ssh/ssh_host_rsa_key.pub
| 回书目 上一节 |
|
· 08年5月软考网管上午真.. · 性能测试从零开始 目录 · 08年5月软考网工上午真.. · 上周拒绝服务攻击(DDo.. · 08年5月各大网上书店及.. · 2008年5月24日软考试题.. |
· 软件设计师专家临考模.. · 上周网络管理员专家自.. · 网络工程师自测获奖名.. · 08年4月各大网上书店及.. · 系统分析师自测获奖名.. · Linux结课考试自测获奖.. |
|
||||
| · 技术人求职简历完备手册 · 开源虚拟化技术Xen · Windows Server 2008专.. · 隐私保护技术探讨 · 绿色IT人健康生存手册 · 网络工程师职业规划与.. · 杀毒软件评测专题 · 访问控制列表(ACL)介绍 |
· Vista SP1对决XP SP3 · 华为员工自杀频频拷问.. · 2008中国互联网大会 · 勇闯IT培训黑色围城 · CISSP认证成长之路 · 解析35岁技术人的价值.. · LAMP技术精解 · AMD Phenom三核处理器.. |
|||
|
||||
| · SOA 面向服务架构 · SQL Server 2008/2005.. · Apache技术专题 · 三层交换技术专题 · SQL Server入门到精通 · Apache技术专题 · 国际文档格式标准开战 · 路由器设置与口令恢复 |
· PHP开发应用手册 · SOA 面向服务架构 · 企业数据恢复指南 · 了解统一威胁管理(UTM).. · 专题:AIX操作系统管理.. · 访问控制列表(ACL)介绍 · 反垃圾邮件技术应用 · ASP.NET 2.0基础开发指.. |
|||
|
||||
| · SQL Server入门到精通 · SQL Server 2008/2005.. · SOA 面向服务架构 · Apache技术专题 · 三层交换技术专题 · Apache技术专题 · 企业数据恢复指南 · 路由器设置与口令恢复 |
· SOA 面向服务架构 · 了解统一威胁管理(UTM).. · 反垃圾邮件技术应用 · 访问控制列表(ACL)介绍 · PHP开发应用手册 · 专题:AIX操作系统管理.. · 交换机故障解决指南 · 三层交换技术专题 |
|||