本发明涉及网络应用交付控制领域,特别涉及一种基于指定服务器域名(severnameindication,以下简称:sni)的服务器负载均衡方法及设备。
背景技术:
tls(transportlayersecurity传输层安全协议)在rfc(requestforcomments)6066中增加sni扩展使得用户在同一个ip上安全地响应不同的服务,它能满足用户端通过该扩展消息明确指定希望与哪个服务建立安全连接;当服务端收到该消息后返回相应服务需要的证书来建立安全连接;达到不增加公网ip的情况下实现对不同服务的不同的安全连接的建立。
tls协议的扩展属性sni是通过发送虚拟主机名作为tls协商的一部分,这使得服务器可以在握手阶段选择正确虚拟域,并发送对应证书。因此,如果用户端和服务器支持sni,每个ip上可以部署多张证书。sni在2003年6月作为传输层安全(tls)扩展添加到ietf的rfc3546标准中。
现有sni实现技术大多是基于rfc中提出的解决ip限制问题进而对现有协议处理进行扩展,其最终实现的目标仍然是tls本身,使用仅局限于解决安全传输问题,并不能解决服务器负载均衡问题;并且由于该扩展服务于安全传输层协议tls,故需要处理tls所有状态,例如:身份验证,密钥协商,计算对称密钥等,服务端的非对称密钥和协商出来的对称密钥对作为网络中间设备如负载均衡设备、或作为代理服务设备可见,这对于一些高度保密的业务存在着保密性的漏洞。
技术实现要素:
为克服已有技术中存在的问题,本发明提出了一种基于指定服务器域名的服务器负载均衡方法,其目的是仅通过解析用户端携带的tls扩展消息实现服务器的负载均衡,并且在实现服务器负载均衡的同时实现高度安全。
本发明还设计出了一种基于指定服务器域名的服务器负载均衡设备,其目的是通过解析用户端携带的tls扩展消息域名,进而选择服务器群组并实现流量均衡、透明分发。
为实现上述目的,本发明提出了一种基于sni消息的服务器负载均衡的方法,包括以下步骤:
一种基于sni消息的服务器负载均衡的方法,包括以下步骤:
步骤1,利用tcp/ip头信息解析提取源地址、目的地址、源端口、目的端口信息,进而查找tcp连接控制信息;
步骤2,找到上述tcp连接控制信息后,若其对端的tcp连接控制已建立则直接转到步骤6;若否,则:
步骤3,判断是否命中基于sni的服务器负载均衡配置,若否,则直接转到步骤5;若命中sni配置,则:
步骤4,执行sni_slb分步骤:
步骤4.1,若用户端tcp连接控制未建立,则建立用户端tcp连接控制;
步骤4.2,若用户端tcp连接控制已建立,但所述的tcp报文未携带tlsclient-hello消息或携带client-hello信息而消息不含sni扩展字段,则执行步骤6;若携带client-hello消息且含有sni扩展字段,则:
步骤4.3,执行负载均衡分步骤:
步骤4.3.1,根据解析到的sni扩展域名找到相应的服务器群组;
步骤4.3.2,从上述服务器群组中根据负载均衡算法找出将要响应此次安全连接请求的后台服务器;
步骤4.3.3,根据选中的后台服务器tcp/ip信息创建服务端连接控制信息,且与用户端连接控制信息彼此建立关联,然后进入步骤6;
步骤5,负载均衡设备处理非sni-slb信息;
步骤6,根据服务端连接控制信息进行数据处理或转发。
一种基于sni的服务器负载均衡设备,至少包括tcp/ip头信息解析模块、连接控制管理模块、负载均衡配置管理模块、tls扩展消息解析模块、sni_slb模块、非sni-slb模块、以及数据转发模块。
所述的tcp/ip头信息解析模块用于提取基于sni消息的源地址、目的地址、源端口、目的端口的信息。
所述的连接控制管理模块用于用户端和服务器端建立连接,以及保存已建立的用户端和服务器端连接信息,它包括服务端连接控制管理模块和用户端连接控制管理模块。
所述的负载均衡配置管理模块用于判断是否命中基于sni的服务器负载均衡配置。
所述的tls扩展消息解析模块用于解析tls协议中client-hello消息的sni扩展字段。
所述的sni_slb模块用于执行上述基于sni的服务器负载均衡分步骤。
所述的数据转发模块用于根据服务端连接控制信息进行数据处理或转发。
本发明与仅利用tls扩展消息域名就达到了负载均衡的目的,大大降低了运行成本,同时快速且透明转发建立安全连接时的tls握手消息和后续加密数据。
附图说明
图1是本发明系统结构示意图;
图2是本发明一种基于指定服务器域名的负载均衡方法流程图;
图3是本发明基于sni的服务器负载均衡分步骤流程图;
图4是本发明一种基于sni的服务器负载均衡设备结构示意图;
图5是本发明一较佳实施例系统结构示意图。
具体实施方式
在以下的叙述中,为了使读者更好地理解本申请而提出了许多技术细节。但是,本领域的普通技术人员可以理解,即使没有这些技术细节和基于以下各实施方式的种种变化和修改,也是本申请各权利要求所要求保护的技术方案。
为使本发明的目的、技术方案和优点更加清楚,下面将结合附图对本发明的工作原理及实施方式作进一步地详细描述。
本发明的工作原理是负载均衡设备收到带有域名的client-hello消息,通过解析client-hello得到域名(sni字段)并以此在响应该域名请求的服务群中根据负载均衡算法找出一台服务器,此后所有的握手信息和加密数据对负载均衡设备透明。
本发明是建立在tls新增的client-hellow消息的扩展信息之上的,如图1所示,该扩展针对tls协议的意义在于:用户端101在浏览器输入本端域名,例如https://www.a.com,此域名通过dns域名解析可以找到相应的ip地址,在tls层,www.a.com被封装在client-hello消息的sni扩展字段;在服务端的tls层会解析sni字段并做tls握手流程处理,例如根据sni返回与请求相匹配的证书等,但本发明基于sni的负载并不处理tls握手流程,只是解析出sni字段,根据请求的sni字段,例如www.a.com找到服务器组,例如服务器组a,根据负载均衡配置的算法,例如如rr(round-robin,轮询调度)算法,选择服务器,如选择a2,之后将目的ip改为a2的ip地址,端口改为a2监听的端口后转发数据到a2,后续的数据,包括应用数据和tls协议数据,在负载设备上透明转发。
同理对用户端102,例如其域名为https://www.b.com的安全连接最终也是通过同一个在负载均衡配置的ip完成的,这样就达到了在同一个ip上服务不同的用户请求且实现负载均衡。
再如图1所示,本发明的系统是由用户端100、互联网200、基于sni消息的负载均衡设备300、以及服务端400构成,所述的用户端浏览器使用支持sni的tls协议,例如tls1.2协议。
在图1系统配置的基础上,一种基于sni消息的服务器负载均衡的方法,如图2所示,包括以下步骤:
步骤1,利用tcp/ip头信息解析提取源地址、目的地址、源端口、目的端口信息,进而查找tcp连接控制;
步骤2,找到上述tcp连接控制,若其对端的tcp连接控制已建立,直接转到步骤6;若否(即其对端的tcp连接控制未建立),则:
步骤3,判断是否命中基于sni的服务器负载均衡配置,若否,则直接转到步骤5;若命中sni配置,则:
步骤4,执行sni_slb分步骤,如图3所示,
步骤4.1,若用户端tcp连接控制未建立,则建立用户端tcp连接控制;
步骤4.2,若用户端tcp连接控制已建立,但tcp报文未携带tlsclient-hello消息或携带client-hello信息而消息不含sni扩展字段,则执行步骤6;若所述的tcp报文携带client-hello消息且含有sni扩展字段,则:
步骤4.3,执行负载均衡分步骤:
步骤4.3.1,根据解析到的sni扩展域名找到相应的服务器群组;
步骤4.3.2,从上述服务器群组中根据负载均衡算法找出将要响应此次安全连接请求的后台服务器;
步骤4.3.3,根据选中的后台服务器tcp/ip信息创建服务端连接控制信息,且与用户端连接控制信息彼此建立关联;然后执行步骤6;
步骤5,处理非sni-slb信息;
步骤6,根据服务端连接控制信息进行数据处理或转发。
一种基于sni的服务器负载均衡设备,其结构如图4所示:该设备至少包括tcp/ip头信息解析模块301、连接控制管理模块302、负载均衡配置管理模块303、tls扩展消息解析模块304、sni_slb模块306、非sni-slb模块305、以及数据转发模块307。其中,
所述的tcp/ip头信息解析模块用于提取基于sni消息的源地址、目的地址、源端口、目的端口的信息。
所述的连接控制管理模块用于建立tcp用户端和服务器端的连接,以及保存已建立用户端和服务器端连接控制的关联信息;包括服务端连接控制管理模块322和用户端连接控制管理模块312。
所述的负载均衡配置管理模块用于判断是否命中基于sni的服务器负载均衡配置。
所述的tls扩展消息解析模块用于解析tls协议中client-hello消息的sni扩展字段。
所述的sni_slb模块用于执行上述基于sni的服务器负载均衡分步骤。
所述的数据转发模块用于根据服务端连接控制信息进行数据处理或转发。
现举一较佳实例说明本发明系统及方法,选取某公司一个负载均衡设备,例如:arraynnetworksapv6600,系统搭建如图5所示,现对系统完成以下配置:
首先,用户端端浏览器使用支持sni的tls1.2协议;
其次,服务端负载均衡设备配置:
(1)基本网络配置如下:
ipaddress"port1"192.168.1.102255.255.255.0
ipaddress"port2"10.8.1.102255.255.255.0systemmodereverse
(2)sni_slb配置如下:
slbvirtualhttps"sni_vs"3.3.3.3443arp0
slbrealhttp"a1"192.168.1.100809999999tcp33
slbrealhttp"a2"192.168.1.101809999999tcp33
slbrealhttp"b1"10.8.1.100809999999tcp33
slbrealhttp"b2"10.8.1.101809999999tcp33
slbgroupmethod"sni_group_a"rr
slbgroupmember"sni_group_a""a1"10
slbgroupmember"sni_group_a""a2"10
slbgroupmethod"sni_group_b"rr
slbgroupmember"sni_group_b""b1"10
slbgroupmember"sni_group_b""b2"10
slbpolicysni"sni_vs""sni_group_a""www.a.com"
slbpolicysni"sni_vs""sni_group_b"www.b.com
该实施例访问同一域名时基于sni扩展字段负载均衡的方法如下:
需要说明的是,本发明各设备实施方式中提到的各单元都是逻辑单元,在物理上,一个逻辑单元可以是一个物理单元,也可以是一个物理单元的一部分,还可以以多个物理单元的组合实现,这些逻辑单元本身的物理实现方式并不是最重要的,这些逻辑单元所实现的功能的组合才是解决本发明所提出的技术问题的关键。此外,为了突出本发明的创新部分,本发明没有引入上述各设备实施方式以及与解决本发明所提出的技术问题关系不太密切的单元,但这并不表明不存在上述设备实施方式以及其它有关实施单元。
虽然通过参照本发明的某些优选实施方式,已经对本发明进行了图示和描述,但本领域的普通技术人员应该明白,可以在形式上和细节上对其作各种改变,而不偏离本发明的精神和范围。