发明内容
本申请实施例提出了一种SSLVPN的代理方法、服务器以及客户端及其处理方法,用于减少IP资源的消耗。
在一个方面,本申请实施例提供了一种SSLVPN的代理方法,包括:
生成代理会话标识PSID,根据所述PSID与客户端进行OPENVPN建立连接;
解析所述客户端发送的报文获取目的服务器端的地址;
根据所述目的服务器端的地址与所述目的服务器进行传输控制协议TCP建立连接;
根据从所述客户端获得的客户端会话标识CSID与所述目的服务器端进行OPENVPN建立连接,并将在与所述目的服务器端进行OPENVPN建立连接阶段接收到的来自所述目的服务器端的全部报文中的服务器会话标识SSID替换成所述PSID后发送给所述客户端。
并提供了与上述代理方法对应的一种SSLVPN的代理服务器包括:
代理会话标识生成模块,用于生成代理会话标识PSID;
第一OPENVPN模块,用于根据所述PSID与客户端进行OPENVPN建立连接;
解析模块,用于解析所述客户端发送的报文获取目的服务器端的地址;
TCP模块,用于根据所述目的服务器端的地址与所述目的服务器进行传输控制协议TCP建立连接;
第二OPENVPN模块,用于根据从所述客户端获得的客户端会话标识CSID与所述目的服务器端进行OPENVPN建立连接,并将在与所述目的服务器端进行OPENVPN建立连接阶段接收到的来自所述目的服务器端的全部报文中的服务器会话标识SSID替换成所述PSID后发送给所述客户端。
在另一个方面,本申请实施例提供了一种SSLVPN的客户端处理方法,包括:
获得目的服务器端的信息;
将所述目的服务器端的信息发送给代理服务器。
并提供了与上述客户端处理方法对应的SSLVPN的客户端,包括:
信息获取模块,用于获得目的服务器端的信息;
发送模块,用于将所述目的服务器端的信息发送给代理服务器。
有益效果如下:
在本发明实施例中,增加SSLVPN的代理服务器与客户端以及目的服务器端进行OPENVPN建立连接阶段的信息处理,从而避免了现有技术中TCP代理服务器一个IP的443端口只能服务一个SSLVPN频道,如果需要服务多个频道的话就会出现冲突,如果需要服务多个源站的时候就需要通过增加IP的方式进行解决的问题。从而减少了IP资源的消耗。
具体实施方式
为了使本申请的技术方案及优点更加清楚明白,以下结合附图对本申请的示例性实施例进行进一步详细的说明,显然,所描述的实施例仅是本申请的一部分实施例,而不是所有实施例的穷举。并且在不冲突的情况下,本说明书中的实施例及实施例中的特征可以互相结合。
基于TCP的SSLVPN代理服务器的前提是无证书,所谓无证书指的是源站不将SSL的证书及私钥放在代理服务器上,这样代理服务器不具备对SSL协议解析的功能,即客户端的访问内容依然是加密的,安全性可以保证。代理服务器作为中间人的角色,从TCP的层面进行TCP包的转发。
在没有代理的情况下,如图2所示,根据SSLVPN的原理,SSLVPNClient(客户)端与Server(服务器)端首先进行TCP建立连接,TCP建立连接后进行OPENVPN建立连接,主要是客户端发送“P_CONTROL_HEAD_RESET_CLIENT_V2”,服务器端发送“P_CONTROL_HEAD_RESET_SERVER”。主要是客户端与服务端各自生成CSID(客户端会话标识)和SSID(服务器会话标识),即一个随机的会话号。OPENVPN建立连接之后即进入SSL建立连接阶段。SSL建立连接阶段遵循正常的SSL/TLS(TransportLayerSecurityProtocol,安全传输层协议)流程。主要流程为客户端发送ClientHello与服务器端进行建立连接,该字段为明文。服务器端接收到之后发送ServerHello及证书等流程。在验证证书及秘钥通过后即可协商一个加密通道VPN(VirtualPrivateNetwork,虚拟专用网络)。客户端与服务端的交互数据即可通过该加密通道进行传输。
但是由于SSLVPN位于公共互联网基础之上,受到各种网络因素的影响,稳定性及速度均受到影响。如果使用AND加速网络的话,可以明显的解决访问速度及稳定性的问题。但是现有的TCP代理的方式严重浪费IP资源(如前文所述),故本发明用一个通用的SSLVPN代理服务器来解决以上问题。
为解决IP资源浪费的问题,本发明主要需解决两个问题:1、如何识是来自不同的VPN客户端的目的地问题;2、SSLVPN客户端及服务器端如何信任VPN代理,即解决SID的问题。
1、针对问题1,SSL/TLS协议中SNI(ServerNameIndication,服务器名称指示)扩展字段为通用的方式,在通用的HTTPS协议中,在ClientHello的明文包中即插入了访问的去向域名。例如sslvpn.test.com.不同的访问目的地址该SNI字段不同,且为明文字段。但是在SSLVPN协议中均未利用该SNI字段。本发明利用这个SNI字段进行SSLVPN经过代理服务器时的目的地址选择的标识,在客户端插入了SNI字段,具体可以如下:
但是,SSL/TLS的建立连接阶段是位于OPENVPN建立连接之后的,即如果代理服务器不知道目的地址的话,OPENVPN建立连接是不成功的。更无法进行后续的SSL建立连接。所以为了解决OPENVPN建立连接不通的问题,提出方法解决问题2;
2、如图3所示,由于OPENVPN建立连接阶段,客户端与服务器端各自生成CSID与SSID,且OPENVPN进行三次握手的时候,VPNPROXY代服务器端与客户端进行OPENVPN进行建立连接,生成一个ProxySessionID,简称PSID(代理会话标识),该PSID可随机生成,也可根据实际需要按不同算法生成,通过PSID代替SSID与客户端进行建立连接。在客户端与VPN代理建立OPENVPN连接之后,客户端会发送ClientHello的明文字段进行SSL建立连接,由于携带了SNI字段,代理服务器对ClientHello报文进行协议解析,解析出SNI字段,并对SNI进行DNS解析等操作,获取到目的IP地址。这样代理服务器就可以与真正的服务器端进行TCP建立连接,TCP建立连接之后,VPN代理再使用CSID与服务器端进行OPENVPN建立连接。注意此时真正的服务器会发送真正的SSID给VPN代理服务器,如果直接将SSID发给客户端的话会导致客户端的验证失败,导致连接断开。所以VPN代理服务器的另外一个重要的功能就是需要将来自服务器的OPENVPN的建立连接阶段的所有报文的SSID替换成为PSID后再发给客户端。后续VPN代理服务器将继续做TCP数据报文的转发,而无需解密数据包。这样便解决了通用的SSLVPN代理服务器的问题。
从SSLVPN代理服务器的角度,其代理方法如图4所示,包括:
步骤101,生成PSID,根据该PSID与客户端进行OPENVPN建立连接;
步骤102,解析该客户端发送的报文获取目的服务器端的地址;
步骤103,根据该目的服务器端的地址与该目的服务器进行TCP建立连接;
步骤104,根据从该客户端获得的CSID与该目的服务器端进行OPENVPN建立连接,并将在与该目的服务器端进行OPENVPN建立连接阶段接收到的来自该目的服务器端的全部报文中的SSID替换成该PSID后发送给该客户端。
上述流程中步骤102解析所述客户端发送的报文获取目的服务器端的地址包括:
从该客户端发送的hello报文中解析出SNI,该SNI携该目的服务器端的信息;
根据该SNI携带的该目的服务器端的信息获取所述目的服务器端的地址。
从SSLVPN客户端的角度,其客户端处理方法如图5所示,包括:
步骤201,获得目的服务器端的信息;
步骤202,将该目的服务器端的信息发送给代理服务器。
具体地,该步骤202中将所述目的服务器端的信息发送给代理服务器包括:将该目的服务器端的信息写入客户端hello报文中的SNI字段并发送给该代理服务器。
本申请实施例中的SSLVPN代理架构如图6所示。
其中的流程编号简述如下
编号1、SSLVPN客户端1访问VPN代理服务器,并在ClientHello包中携带SNI;
编号2、VPN代理服务器识别并解析SNI,获取SSLVPNserver域名,并查询本地DNS服务器;
编号3、本地DNS服务器返回SSLVPN服务器的IP地址;
编号4、VPN代理服务器使用该IP地址与SSLVPN服务器建立连接,并完成通信。
基于同一发明构思,本申请实施例中还提供了一种SSLVPN的代理服务器,由于这些设备解决问题的原理与一种SSLVPN的代理方法相似,因此这些设备的实施可以参见方法的实施,重复之处不再赘述。
如图7所示,本申请实施例中的SSLVPN的代理服务器包括:
代理会话标识生成模块701,用于生成代理会话标识PSID;
第一OPENVPN模块702,用于根据所述PSID与客户端进行OPENVPN建立连接;
解析模块703,用于解析所述客户端发送的报文获取目的服务器端的地址;
TCP模块704,用于根据所述目的服务器端的地址与所述目的服务器进行传输控制协议TCP建立连接;
第二OPENVPN模块705,用于根据从所述客户端获得的客户端会话标识CSID与所述目的服务器端进行OPENVPN建立连接,并将在与所述目的服务器端进行OPENVPN建立连接阶段接收到的来自所述目的服务器端的全部报文中的服务器会话标识SSID替换成所述PSID后发送给所述客户端。
进一步地,解析模块703解析所述客户端发送的报文获取目的服务器端的地址包括:
从所述客户端发送的hello报文中解析出服务器名称指示SNI,所述SNI携带所述目的服务器端的信息;
根据所述SNI携带的所述目的服务器端的信息获取所述目的服务器端的地址。
并且,代理会话标识生成模块701可以用于随机生成所述PSID。
基于同一发明构思,本申请实施例中还提供了一种SSLVPN的客户端,由于这些设备解决问题的原理与一种SSLVPN的客户端处理方法相似,因此这些设备的实施可以参见方法的实施,重复之处不再赘述。
如图8所示,本申请实施例中的SSLVPN的客户端,包括:
信息获取模块801,用于获得目的服务器端的信息;
发送模块802,用于将所述目的服务器端的信息发送给代理服务器。
具体地,本申请实施例中的SSLVPN的客户端如图9所示,所述发送模块802包括:
信息写入单元901,用于将所述目的服务器端的信息写入客户端hello报文中的服务器名称指示SNI字段;
发送单元902,用于将所述客户端hello报文发送给代理服务器。
本领域内的技术人员应明白,本申请的实施例可提供为方法、装置、系统、或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本申请是参照根据本申请实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
尽管已描述了本申请的优选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例作出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本申请范围的所有变更和修改。