Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

Vinllen Chen


To be a better coder

VPN技术

  上篇文章所说的准入技术保证了只有正确的用户可以访问,剩下的工作就是确保这些用户的访问过程安全、可靠。这个也就是VPN发挥用处的地方。
  VPN具备两个特性--长连接和加密。长连接的意思是每条VPN有状态,通信双方通过类似『三次握手』机制保证通信对端的唯一性以及数据的可靠性。加密则保证数据传输的私密性。
  VPN只是用来描述一种架设在基础网络上的加密通道,至于实现这种效果的技术则是五花八门。比如:VT2P,VPLS,IPsec,EoMPLS等。IPsec和SSL是目前企业市场最常见额两种VPN技术。

1. IPsec

  IPsec是目前部署最广泛的点对点VPN技术之一。IPsec网关设备将发往对端的数据打包加密后在因特网上传输,对端节点收到数据包后解封装发往最终用户,整个过程中用户感觉不到IPsec隧道的存在,类似于专线的体验。
  IPsec是IETF的公开标准。IPsec最初是一项针对分之机构同总部之间通信的技术,隧道的两段是专用的VPN硬件设备。当少量人员的远程办公需求出现后,IT部门在他们的笔记本电脑上安装IPsec客户端,通过软件客户端连接到VPN网关设备上。IPsec的缺点如下:

  1. 管理成本高昂。每台电脑都要安装IPsec客户端,兼容不同OS,不同版本。
  2. 安全隐患。IPsec工作在OSI的三层,协议本身无法附带高层的安全策略。当一个用户通过认证建立VPN连接后,电脑就跟直接上联到内部交换机的物理端口没有什么区别,如果在交换机上没有特定的ACL,那么用户可以访问内网的所有资源。
  3. 网络复杂性。由于IPsec为三层协议,所有网络出口的三层设备都需要跟IPsec流量发生关系,包括NAT,防火墙,广域网加速等。为了保证IPsec的正常接入,在这些设备上都需要针对IPsec做特殊的配置,这增加了网络设计的复杂性。

2. SSL

  SSL比较好的改进了IPsec在终端接入方面的缺陷。优点如下:

  1. 部署简洁。浏览器自动建立SSL隧道,无需客户端软件。
  2. 精细访问控制。SSL VPN能对加密隧道进行细分,使得终端用户能够同时接入因特网和访问内部企业网资源。另外,SSL VPN还能细化接入控制功能,提供用户级别的鉴权,依据安全策略确保只有授权的用户才能够访问特定的内部网络资源。
  3. 防火墙穿越。SSL VPN工作在传输层之上,因而能够遍历所有NAT设备和防火墙设备,这使得用户能够从任何地方远程接入到公司内部网络,部署时无需改动原有网络结构。
  4. 更可靠的安全保护。SSL是一个安全协议,数据时全程加密传输。由于SSL网关隔离了内网服务和客户度,只留下一个WEB浏览接口,客户端的大多数木马病毒无法感染到内网服务器。

  可以将SSL分为握手协议记录协议两部分。握手协议描述建立安全连接的过程,在客户和服务器传送应用层数据之前,完成诸如加密算法和会话秘钥的确定、通信双方的身份验证等功能。记录协议则定义了数据传送的格式,上层数据包括SSL握手协议建立安全连接时所需传送的数据都通过SSL记录协议再往下层传送。简单地说,握手协议定义了建立连接的流程,而记录协议定义了传输数据的方式。当应用层通过SSL协议把数据传给OSI七层模型的底层协议时,已经是被加密后的数据,IP层只需负责传递即可。

2.1. SSL握手协议

  SSL握手协议同时使用了公开密钥和对称密钥两种加密技术。通过使用公开密钥技术实现客户端和服务器之间的身份认证,然后双方协商生成用于加密通信的对称密钥。默认情况下,SSL握手协议过程中只进行服务器端的认证,客户端的认证是可选的。
  加密过程一共可分为以下几步:

  1. 客户端发送Client Hello。在该消息中,包含客户机的SSL协议版本号、随机数、会话标识(由于连接尚未建立,此时标识为空)、密码算法组件配置、压缩算法组件配置,以及其他服务器需要客户端提供的基本SSL协议消息。
  2. 服务器端返回Server Hello。在该消息中,同样包括Client Hello中发送的SSL协议版本号之类的信息。服务器同时会把自己的证书附加在后面发送给客户端。如果服务器没有证书,或者证书仅用于签名,或者使用了FORTEZZA KEA密钥交换,服务器将发送一条服务器密钥交换消息,把服务器密钥交换参数消息发送给客户端。如果服务器要验证客户机的证书,将发送一个客户证书请求。这些内容发送结束后,发出Server Hello Done消息作为Client Hello回应的结束。客户端根据收到的消息验证服务器身份。如果服务器身份无法被证实,那么客户端的使用者将得到警告。通过,则继续下一步握手。
  3. 客户端发送Premaster Secret。根据交互得到的所有消息,客户机为会话生成premaster secret(预置主私钥),使用服务器证书的公钥进行加密,然后将加密后的premaster secret发送给服务器。如果服务器要求认证客户端的身份(可选),那么客户机就对双方都已知且在握手过程中唯一的一段数据进行数字签名,然后把签名后的数据、自己的证书随着签名加密后的premaster secret一同发送给服务器。服务器若验证客户端的身份失败,则当前会话中值。否则,服务器使用自己的私钥来解密得到premaster secret,然后经过一系列步骤生成master secret(主私钥);此时,客户端也执行相同的步骤生成master secret。
      客户机和服务器使用master secret来生成session keys(连接密钥),它是对称密钥,在SSL会话过程中用来进行数据的加密和解密,也用于验证数据的完整性--检查发送时刻和接收时刻之间的数据的变化。
  4. 客户端发送Client Finished。客户机向服务器发送一条消息,声明后面发送的数据将使用session keys加密。接着再单独发出一条消息,表面握手过程中客户机部分的工作已经完成。
  5. 服务器发送Server Finished。同样,服务器也做类似操作。
  6. 加密完成,开始传输。

2.2. SSL记录协议

  在SSL协议中,所有的传输数据都被封装在记录中。记录是由记录头和长度不为0的记录数据组成的。所有的SSL通信包括握手消息、安全空白记录和应用数据都使用SSL记录层。SSL记录协议定义了记录头和记录数据的格式。

3. 几种SSL VPN类型

  目前,SSL可以分为以下几种类型。

3.1 零客户端模式

  该模式是大家最熟悉的模式,使用WEB浏览器访问网络资源的时候,浏览器自动建立SSL连接,整个过程无需特殊设置,用户体验流程。

3.2 瘦客户端模式

  又称TCP端口转发模式。用户一般先访问一共公开的网页,下载一个Java Applet,这个Applet会运行在客户端上,用于中继用户的TCP流量。用户发起的TCP流量从此不再直接发送到外部网络,而是被下载的Java Applet截取,然后封装到SSL VPN内。瘦客户端指的就是这个Java Applet。

3.3 隧道模式

  隧道模式实际上是一个SSL版本的IPsec VPN。在零客户端模式中,用户的流量是在应用层被区分并封装进SSL网络的,而在隧道模式,数据在IP层就被封装到SSL网络。因此,隧道模式的SSL可以支持绝大部分的业务流量,而不受是否是WEB业务的限制,这个效果同IPsec是类似的。隧道模式同样需要客户端的支持。

4. SSL的后续发展--DTLS/TLS

  TLS是SSL的后续版本。DTLS是UDP版本的传输层加密协议,不同于TLS/SSL,DTLS提供了与TLS近似的加密保障,但保留了底层高效的UDP传输机制。

参考

《腾云》

说明

装载请注明出处:http://vinllen.com/vpnji-zhu/


About the author

vinllen chen

Beijing, China

格物致知


Discussions

comments powered by Disqus