基于Tomcat的SSL VPN网关服务器的设计与实现
扫描二维码
随时随地手机看文章
1 引言
虚拟专用网络VPN(Virtual Private Network)是使用隧道封装、认证、加密和访问控制等网络安全机制在公共网络中建立专用数据通信网络的技术。目前VPN主要有两种:IPSecVPN和SSL VPN。安全套接层虚拟专网SSL VPN是基于应用层的VPN,而IPSee VPN是基于网络层的VPN。南于IPSecVPN存在通信性能较低、需要安装客户端软件、维护成本高及很难实现防火墙和NAT遍历、无法解决IP地址冲突等问题,因此SSL VPN技术受到广泛关注。
2 SSL VPN简介及其特点
SSL VPN指采用安全套接层SSL(Security Socket Lay-er)协议实现远程接人的一种新型VPN技术。SSL VPN能让企业更多远程用户在不同地点接入,实现更多网络资源访问,且对客户端设备要求低,因而降低了配置和运行支撑成本。SSL VPN通信基于标准TCP/UDP协议传输,因而能遍历所有NAT设备、基于代理的防火墙和状态检测防火墙。SSLVPN是一种利用数据封装技术,基于 SSL/TSL协议,以WebServet架构为依托的VPN实现。
与IPSec VPN相比,SSL VPN具有以下特点:(1)SSLVPN的用户使用标准的浏览器,无需安装客户端程序即可通过SSL VPN隧道接人内部网络;(2)SSL VPN保护基于Web的应用更有优势;(3)SSL VPN用户不受上网方式限制,SSL VPN隧道可穿透防火墙;(4)SSL VPN只需维护中心节点的网关设备,客户端免维护。降低了部署和支持费用;(5)SSL VPN更容易提供细粒度访问控制,可对用户的权限、资源、服务、文件进行更加具体的控制,与第三方认证系统结合更加便捷。
3 SSL VPN网络架构
SSL VPN网关服务器一般位于企业的Internet防火墙之后.如图1所示。
由于远程客户端(如PDA、便携电脑、Mobile User等)和SSL VPN网关服务器位于不同网络中,因此两者之间要形成一个安全通道。需用SSL进行数据加密通信,从而在Internet上形成远程客户端到SSL VPN网关之间的加密隧道。VPN网关服务器相当于内部网络中的安全代理,由于与其他各种服务器处于同一内部网中,因此它们之间的数据可通过明文传输。 SSL VPN充当两种角色:当远程客户端与SSL VPN进行通信时,SSL VPN是服务器端,负责处理远程客户端的请求;而当SSL VPN与网内各服务器进行通信时,它则是客户端,负责把远程客户端的请求转发到内网服务器。
企业内部的服务器多种多样,常见的有Web服务器、Mail服务器、FTP服务器、Telnet服务器等。SSL VPN需要能够代理远程客户端访问内部网络的各种服务器.这种技术称反向代理技术,它是一种服务器负载均衡技术,也是一种保护内部网络的预防攻击技术。
4 网关服务器的设计
4.1 为Tomcat配置SSL
本系统中,SSL VPN网关是基于Web服务器Tomcat实现的。从图1中可知远程客户端和VPN之间通过SSL协议安全通信,目前浏览器大多支持SSL,无需额外配置,则主要是为Tomcat配置SSL,包含:准备安全证书以及配置Tomcat的SSL连接器(Connector)。具体配置方法如下:
(1)使用keytool命令生成证书库文件打开命令行对话框,输人如下命令:keytool-genkey-alias tomcat-keyalg RSA-keysize 1024-validity 365-keystore tomcat.keystore,则会在当前目录下生成文件tomcat.keystore。
(2)保存文件将生成的tomcat.keystore文件保存在TOM-CAT/conf目录下。
(3)修改server.xml文件 去掉SSL Connector注释语句<!
(4)重新启动Tomcat访问http://localhost:8443,一般打开页面前会提示确认证书的内容,选择OK即可看到页面。
远程客户端通过浏览器访问SSL VPN,为保证两者通信的安全性,在HTTP协议下采用SSL协议,如图1所示。采用SSL机制的HTTP称为HTTPS协议,HTTP使用的默认端口为80,而HTTPS使用的默认端口为443。
4.2 Web转发功能模块的设计
SSL VPN中Web转发功能模块主要实现以下功能:当远程客户端发出访问企业内部某一服务器的请求时,SSL VPN中的Web转发功能模块分析该请求,得到其真正要访问的内网URL,然后向内网服务器发出该请求,再取回并修改远程客户端所需信息,传至远程客户端,如图2所示。
该系统的SSL VPN网关中用于实现Web转发功能模块的是一个名为WebAgent的Servlet。为访问WebAgent,需在Tomcat的配置文件Web.xml中配置访问该Servlet的URL模式,通过servlet-mapping元素实现:
通过上述配置,假设SSL VPN的IP地址为222.207.224.19,所有格式为https://222.207.224.19/agent/*的URL请求都将由该Servlet处理。
为实现代理功能,WebAgent接收到的请求中应包含远程用户真正想要访问的内网服务器的URL信息。但如果直接暴露内网服务器的URL地址可能会带来安全隐患,故该系统采用加密内网资源URL地址信息的方案。例如当远程客户要访问http://192.168.0.1/index.jsp时, WebAgent接收到的请求为https://222.207.224.19/agent/S6GH78GL/index.jsp。这里的 S6GH78GL为http://192.168.0.1的密文信息。WebAgent解密请求得到真正要访问的URL信息,通过HTTP客户端工具(如 HttpClient)向内网服务器发出访问请求,内网服务器收到请求后,向WebAgent返回应答信息。
4.3 HTML文档中后续访问的处理
如果应答对象为HTML文档,由于该文档中包含超链接以及其他引用对象。为使基于该页面的后续访问请求仍能通过HTTP代理服务器转发,需将应答信息修改后再发送至远程客户端。图3为HTTP协议的应答信息格式。
HTTP响应消息分为状态行、头部行、附属体3部分。其中状态行有协议版本、状态码、原因短语3个字段,分别用于告知服务器端使用的HTTP协议版本号、本次请求执行的状态(如发生错误,给出错误原因等)。头部行包含有关服务器端环境及应答正文的有用信息(如正文字节数、发送时间、包含在附属体中的对象类型等)。附属体包含是应答正文信息。
HTML文档由标签构成,有些标签中含有URL信息,例如<a href="http://192.168.0.1/index.html">SSL VPN简介</a>,该标签是一个超链接,链接地址通过参数href指明,href的值就是一个URL。可用HtmlParser工具解析 HTML文档,以找出其中包含的所有URL信息,然后根据事先约定的加密算法加密URL,例如假设对于http://192.168.0.1。通过某种算法加密后密文为S6GH78GL,则上述标签中的URL修改后为<ahref="https://222.207.224. 19/agent/S6GH78GL/index.html">SSL VPN简介</a>,经这样的修改,由于URL地址形式满足访问WebAgent的URL模式,因而对该超级链接的访问也是由 WebAgent进行转发的。
还要修改HTTP应答信息中的某些应答头(如Loeation、Conten-Length等)。如果应答中出现Location这个应答头,表明要访问资源位置已改变,新的位置由应答头Location的值给出,即该头部信息中包含URL信息,所以也需加密修改。应答头Conten-Length指明附属体中正文的大小,当修改正文后,该应答头的值也要作相应修改。此之,还需对Set-Cookie,Transfer-Encoding等头部行根据其含义作相应修改。所有信息修改完成后,Web转发功能模块把修改后的应答信息发送给外网用户,以实现信息转发。
5 结束语
SSL VPN是解决远程用户访问企业内部数据的一种简单又安全的技术,与复杂的IPSec VPN相比,SSL通过简单易用的方法即可实现信息远程连接,任何安装浏览器的机器都可以使用SSL VPN。SSL VPN网关服务器需要能代理远程客户端访问内网服务器。详细介绍一种基于Tomcat的SSL VPN网关服务器的设计与实现方法,具有一定的借鉴意义。但由于需通过代理访问,远程客户端访问内网服务器的效率不可避免地降低了,为提高系统效率,可采用Cache等手段,这是下一步研究的内容。