您的位置:首页 >更新记录 > 正文
发布时间:2020-04-13 17:14
SSLVPN中HTTP代理服务器的实现

  SSL是用来保障数据安全传输的协议,目前已成为事实上的工业标准,基于SSL的VPN正成为市场上的一个热点。SSL VPN一个主要的功能是代理远程客户端访问企业内部网上的服务器,在内部网络中最常见的服务器是Web Server。


  SSL VPN代理外部网络上的主机访问内部网络上Web Server称为HTTP代理服务器,本文介绍了SSL VPN中安全HTTP代理服务器的设计与实现。


  1 SSL VPN简介


  SSL VPN是一种基于SSL[1]/TSL协议,利用数据封装技术,以WebServer架构为依托的VPN实现。它通过SSL加密隧道和身份认证相结合来保护通信双方的数据。


  SSL VPN一般的实现方式[1][2][3]是在企业的防火墙后面放置一个SSL VPN网关。如图1所示。其中远程客户端和SSL VPN网关服务器位于不同的网络中,因此两者之间要形成一个安全通道,需要用SSL进行数据加密通信,从而在INTERNET上形成了远程客户端到SSL VPN网关之间的加密隧道。SSL VPN网关服务器和其它服务器位于同一内部网络中的不同主机上,从功能上说,VPN网关服务器相当于内部网络中的安全代理,由于与其它各种服务器处于同一内部网中,因此它们之间的数据可以用明文进行传输。SSL VPN充当了两种角色,当远程客户端与SSL VPN进行通信时,SSL VPN是服务器端,负责处理远程客户端的请求;而当SSL VPN与内网服务器进行通信时,它充当的是客户端的角色,负责把远程客户端的请求转发到内网服务器上。


  企业内部的服务器是多种多样的,常见的有Web Server、


  图1 SSL VPN架构


  FTP服务器、TELNET服务器等。SSL VPN需要能代理远程客户端访问内部网络上的服务器,这样的技术也称为反向代理技术,它是一种服务器负载均衡技术,也是一种保护内部网络的预防攻击技术。在内部网络中,最常见的服务器是Web Server。本文把SSL VPN代理外部网络上的主机访问内部网络上Web应用服务器的功能称为HTTP代理服务器,下面介绍SSL VPN中安全HTTP代理服务器的设计与实现。


  2 SSL VPN中安全HTTP代理服务器的总体设计为了避免内部服务器遭受攻击,SSL VPN中的HTTP代理服务器采取了访问控制、加密内网URL信息等多项安全保护措施保护内网资源的安全,具体工作流程为:


  (1)HTTP代理服务器在某个固定端口,监听远程客户端的连接,并接受客户端的HTTP请求。(2)对远程客户端发送的HTTP请求进行解析,通过解析得到远程客户端真正要访问的内网服务器URL,查看访问控制列表,判断当前用户是否有权访问该内网服务器,通过权限检查后,建立与内网服务器的连接,将请求转发给内网


  Web Server。


  (3)内网服务器向HTTP代理服务器发送响应信息。


  ·62·计算机与信息技术网络天地(4)HTTP代理服务器对响应信息进行修改,传送给远程客户端。如图2所示。


  图2 HTTP代理服务器处理过程


  3系统实现的关键技术


  3.1系统架构目前大部分SSL VPN系统使用Web Server作为其底层平台,本系统中SSL VPN网关基于Tomcat[4]这个Web Server实现。从图2中可以看到远程浏览器和VPN之间通过SSL协议进行安全通信,目前浏览器大多支持SSL,不需要额外配置,主要需要为Tomcat服务器配置SSL。为Tomcat配置SSL,包含两个步骤:准备安全证书以及配置Tomcat的SSL连接器(Connector)。具体配置方法可参照参考资料[4]。


  远程客户端通过浏览器访问SSL VPN,为了保证两者通


  信的安全性,在HTTP协议下采用了SSL协议,如图1所示,采用了SSL机制的HTTP称为HTTPS协议,HTTP使用的默认端口为80,而HTTPS使用的默认端口为443,HTTP代理服务器在端口侦听远程客户端的连接请求。


  本系统中,SSL VPN网关中用于实现HTTP代理服务器的是一个名为HTTPProxyServlet的Servlet。为了访问HTTPProxyServlet,需要在Tomcat的配置文件Web.xml中为该Servlet通过servlet-mapping元素配置访问该Servlet的URL模式。


  <servlet-mapping>


  <servlet-name>HTTPProxyServlet</servlet-name>


  <url-pattern>/proxy/*</url-pattern></servlet-mapping>


  通过上面的配置,假设SSL VPN的IP地址为222.1.1.3,所有形如https://222.1.1.3:443/proxy/*的URL请求都将由该Servlet处理。


  3.2请求信息的处理


  为了完成代理功能,HTTP代理服务器接收到的远程客户端的请求中应该包含远程用户真正想要访问的内网Web Server的URL信息,但是,如果直接暴露内网服务器的URL地址可能会遭到网络攻击,本系统采用的方案是对内网资源的URL地址信息进行加密,并作为远程客户请求的一部分发送给HTTP代理服务器。


  远程客户端的访问请求被Tomcat封装成HttpRequest对象发送给HTTP代理服务器,HTTP代理服务器在接受到请求后首先要进行解析,得到真正要访问的内网服务器的URL,并判断该用户是否有权访问该内网服务器,通过权限检查后,利用HTTP客户端工具例如HTTPClient[6]向内网Web服务器发出访问请求,内网Web服务器收到请求后,向HTTP代理服务器返回应答信息。


  3.3应答信息的处理


  HTTP规范1.1[RFC 2616]定义了HTTP消息的格式。


  HTTP协议的应答信息格式如下所示:


  图4 HTTP应答信息格式


  HTTP响应消息分为3部分:状态行(Status Line),头器端使用的HTTP协议版本号、本次请求执行的状态(正确部行(header line)、附属体。其中状态行有3个字段:协议或错误)、如发生错误,给出错误原因。头部行包含了有关服版本字段、状态码字段、原因短语字段,分别用来告知服务务器端环境以及应答正文的有用信息,比如正文字节数、发


  网络天地计算机与信息技术·63·


  送时间,包含在附属体中对象的类型(HTML文档、图像、声音等)等。附属体中包含的是应答正文信息。


  如果应答对象为HTML文档,由于HTML文档中包含了超级链接以及其它引用对象的URL,为了使得基于该URL的后续访问请求还能通过HTTP代理服务器转发,需要对应答信息(主要是头部行和附属体)进行修改后才能发送给远程客户端,修改主要包括URL的加密以及重定向到HTTP代理服务器,这样后续的对于内网服务器的URL请求均能经过HTTP代理服务器转发。而对于图像、声音等这些类型的对象则不需要做处理。


  对于HTTP应答信息中的某些应答头(Location、Content-Length等)也需要进行修改。如果应答中出现Location这个应答头,表明要访问资源已经改变了位置,新的位置由Location这个应答头的值给出,也就是该头部信息中包含了URL信息,所以也需要进行加密修改。


  Content-Length这个应答头指明了附属体中正文的大小,当我们对正文进行修改后,该应答头的值同样也要作修改。除此之外,还需要对Set-Cookie,Transfer-Encoding等头部行根据其含义作相应的修改。


  所有信息修改完成后,Web转发功能模块把修改后的应答信息发送给外网用户,这样就实现了信息转发。


  该SSL VPN系统已经在Tomcat 2.0.28上实现。经过测试,系统中的Web转发模块能代理访问内网中包括Exchange Server在内的各种Web Server。并且所有内网的URL信息都是经过加密的,在一定程度上提高了系统的安全性,但是由于需要通过代理访问,远程客户访问内网Web Server的效率不可避免地降低了,为了提高系统的效率,可采用CACHE


  等手段,这是下一步研究的内容。


  4小结


  SSL是一种保证在网络上的两个节点之间进行安全通信的机制。SSL VPN是指采用SSL协议实现远程介入的一种新型VPN技术。SSL VPN需要能代理外部网络上的主机访问内部网络上的服务器,这样的功能称为HTTP代理服务器,本文详细介绍了一种SSL VPN中HTTP代理服务器的设计与


  实现。


上一篇 基于HTTP的隐藏型代理服务器实现 下一篇 HTTP代理服务器中的透明代理机制