|
<<全系列VPN技术集锦>>第三卷(SSL VPN)
发贴: 2007年10月30日 9:40:53 回帖
[nobr]
SSL 介绍
安全套接致层(Secure Socket Layer,SSL)是一种在二台机器之间提供安全通道的协议.它具有保护传输数据以及识别通信机器的功能.安全通道
是透明的,意思就是说它对传输的数据不加变更.客户与服务器之间的数据是经过加密的,一端写入的数据完全是另外一端读取的内容.透明性使
得几乎所有基于TCP的协议稍加改动就可以在SSL上运行,非常方便.
SSL历经多次修订,从开始的版本1到IETF最终所采纳的传输层安全(Transport Layer Security,TLS)标准.所有IETF版本之前的SSL版本都怯赏?lt;/P>
景通信公司(Netscape Communications)的工程师们设计的.版本1从未经过广泛的部署,所以讨论将从版本2(SSLv2)开始.
SSLv2的设计目标
SSL原先是为WEB设计的.网景公司的意图是针对其所有的通信安全问题,包括WEB,电子邮件及新闻组通信提供一种单一的解决方案.因为他们当时
所面临的问题只是WEB通信,所以SSL就是为了满足WEB通信的需要而设计的.也就是说SSL必须能够与WEB所使用的主要协议--超文本传输协议
(HTTP)一起很好的工作.
SSLv3的设计目标
SSLv2的广泛流行大体保证了SSLv2原先所有的设计目标得以在SSLv3中保留下来.SSLv3设计者的首要工作就是修正SSLv2中的多处安全问题.也就
是说,设计一种更加强壮而且更易分析的系统.需要SSLv3比SSLv2支持的算法数据多得多.最终,这些要求使SSLv3与SSLv2完全不同,只保留了一些
基本的协议特色.
SSL的历史
最早的版本(SSLv2)位于该树的顶端,而最新近的版本(WTLS)位于树的底部.原先的SSLv2规范于1994年11月首次公开发表.中间经历了SSLv3,TLS.
用于WEB的SSL
SSL的首要用途就是保护使用HTTP的WEB通信.过程很简单.当在HTTP中建立了TCP连接后,客户端先发送一个请求,服务器具随即回应一个文档.而
在使用SSL的时候,客户端先创建一个TCP连接,并在其上建立一条SSL通道.然后再在SSL通道上发送同样的请求,而服务器则以相同的方式沿SSL连
接予以响应.
对普通的HTTP服务器来说,SSL握手就像是垃圾信息,因为并不是所有的服务器都是支持SSL,所以为了使该过程能够正确的工作,客户端需要某种
了解服务器已准备好接受SSL连接的方法.使用以HTTPS而不是HTTP开头的WEB地址(技术上被称做统一资源定位符(URL))来指示应当使用SSL.
如:https://secure.example.com
因此,这种在SSL上运行HTTP的组合常常被称做HTTPS.
SSL握手
SSl握手有三个目的.
第一,客户端与服务器需要就一组用于保护数据算法达成一致.
第二,它们需要确立一组由那些算法所使用的加密密钥.
第三,握手还可以选择对客户端进行认证
具体表现为:
(1)客户端将它所支持的算法列表连同一个密钥产生过程用作输入的随机数发送给服务器.
(2)服务器根据从列表的内容中选择一种加密算法,并将其连同一份包含服务器公用密钥的证书发回给客户端.该证书还包含了用于认证目的服务
器标识,服务器同时还提供了一个作为密钥产生过程部分输入的随机数.
(3)客户端对服务器的证书进行验证,并抽取服务器的公用密钥.然后,再产生一个称做pre_master_secret的随机密码串,并使用服务器的公用密
码对其进行加密.最后,客户端将加密后的信息发送给服务器.
(4)客户端与服务器端根据pre_master_secret以及客户端与服务器的随机数值独立计算出加密和MAC密钥.
(5)客户端将所有握手消息的MAC值发送给服务器.
(6)服务器将所有握手消息的MAC值发送给客户端.
那么,该过程达到了怎样的效果呢?还记得我们的二个目标是什么吗?第一,就一组算法达成一致.第二,确立一组加密密钥.第一和第二步实现了第
一个目标.客户端收到了服务器在第二步所发的消息时,它也会知道这种算法,所以双方现在就都知道要使用什么算法了.
第二个目标,确立一组加密密钥是通过第二和第三步来实现的.在第二步服务器向客户端提供其证书,这样就可以允许客户端给服务器传送密码.
经过第3步后,客户端与服务器端就都知道了pre_master_secret.客户端知道pre_master_secret是因为这是它产生的,而服务器则是通过解密而
得到pre_master_secret的.
注意,第3步是握手过程中的关键一步.所有要被保护的数据都依赖于pre_master_secret的安全.原理非常简单:客户端使用服务器的公用密钥(从
证书中抽取的)来加密共享密钥,而服务器使用其私用密钥对共享密钥进行解密.握手的其余步骤主要用于确保这种交换过程的安全进行.然后在
第四步,客户与服务器分别使用相同的密钥导出函数来产生master_secret,最后再次通过KDF使用master_secret来产生加密密钥.
第5步和第6步用以防止握手本身遭受篡改.设想一个攻击者想要控制客户端与服务器所使用的算法.客户端提供多种算法的情况下当常见,某些强
度弱而某些强度强,以便能够与仅支持弱强度算法的服务器进行通信.攻击者可以删除客户端在第1步所提供的所有高强度算法,于是就迫使服务
器选择一种弱强度的算法.第5步与第6步的MAC交换就能阻止这种攻击,因为客户端的MAC是根据原始消息计算得出的,而服务器的MAC是根据攻击
者修改过的消息计算得出的,这样经过检查就会发现不匹配.由于客户端与服务器所提供的随机数为密钥产生过程的输入,所以握手不会受到重放
攻击的影响.这些消息是首个在新的加密算法与密钥下加密的消息.
因此,在此过程结束时,客户端与服务器已就使用的加密算法达成一致,并拥有了一组与那些算法一起使用的密钥.更重要的是,它们可以确信攻击
者没有干扰握手过程,所以磋商过程反映了双方的真实意图.
握手消息
刚才所描述的每一步都需要通过一条或多条握手消息来实现.在此先简要地描述哪些消息与哪几步对应.
第一步对应一条单一的握手消息,ClientHello.
第二步对应一系列SSL握手消息,服务器发送的第一条消息为ServerHello,其中包含了它所选择的算法,接着再在Certificate消息中发送其证书.
最后,服务器发送ServerHelloDone消息以表示这一握手阶段的完成.需要ServerHelloDone的原因是一些更为复杂的握手变种还要在Certificate
这后发送其它一些消息。当客户端接收到ServerHelloDone的原因是一些更为复杂的握手变种还要在Certificate这后发送其它一些消息.当客
户端接收到ServerHelloDone复杂的握手变种还要在Certificate之后发送其它一些消息.当客户端接收到ServerHelloDone消息时,它就知道不会
再有其它类似的消息过来了,于是就可以继续它这一方面的握手.
第三步对应ClientKeyExchange消息.
第五步与第六步对应Finished消息.该消息是第一条使用刚刚磋商过的算法加以保护的消息.为了防步握手过程遭到篡改,该消息的内容是前一阶
段所有握手消息的MAC值.然而,由于Finished消息是以磋商好的算法加以保护的,所以也要与新磋商的MAC密钥一起计算消息本身的MAC值.
SSL配置实例
有三种方法来利用SSL VPN技术:Clientless SSL VPN, Thin-Client SSL VPN (Port Forwarding)和SSL VPN Client (SVC Tunnel Mode)
每一种都有自己的优势和独特的访问方法
1. Clientless SSL VPN
公司内部启用了http或https的资源,远程用户只需要使用基于web browser来访问.浏览带有Common Internet File System (CIFS)的文件也是可以的.一个好的例子是基于WEB的Outlook Access client.
2. Thin-Client SSL VPN (Port Forwarding)
远程用户必须下载一个小的,基于JAVA的小应用程序.以便能访问到使用静态端口的TCP应用,UDP不被支持.包括的例子如OP3, SMTP, IMAP, SSH, and Telnet.用户需要本地管理员特权,因为对文件的修改是在本地机器中进行.这种VPN技术不能让使用动态端口的应用正常工作.如,个别的FTP服务器.
3. SSL VPN Client (SVC-Tunnel Mode)
在这种技术中,远程工作站需要下载一个小的客户端软件,对公司内部资源的全部安全访问.这个小的客户端软件可以永久地被下载到远程工作站或者安全会话结束后就被删除.
关于第2,第3种SSL VPN技术的配置,这里暂不给出,如果有朋友感兴趣请在论坛中反馈给我.
Clientless SSL VPN 配置步骤(前央是图形化配置,后面是命令行配置)
(1)启用WebVPN在ASA的接口
(2)对WebVPN访问创建一个SERVER或URLS列表
(3)对WebVPN用户创建一个组策略
(4)对隧道组应用一个组策略 |
|