基于socks5的传输层代理通信方法
技术领域
本发明涉及计算机网络,特别涉及一种基于socks5的传输层代理通信方法。
背景技术
移动虚拟专网正在变成一个相互连接的将整个移动用户和贸易伙伴连接到一起的网络;它将成为一个以更安全便捷高速的方式为客户以及企业提供他们所需要服务的业务平台。现在的企业主要从三点出发对移动虚拟专网进行改进发展:首先是安全,保证数据的传输安全有效;其次QoS;最后通过嵌入式集成化目录与公共和私有化目录交互,从而实现对远程和移动用户信息进行管理和控制。随着移动虚拟专网在用户间的应用也越来越普遍,但是它仍然暴露出来一些缺点。首先在账户-服务器和账户-账户之间全部建立隧道需要在路由设备上进行n2次的网络配置与管理,工作量巨大且维护成本高;其次假设已经成功建立好移动虚拟网络,在智能业务越来越发达的今天,移动虚拟专网缺乏对多播和路由技术的支持,在企业级用户需要一些高质量的信息交互时,无法真正发挥作用。
发明内容
为解决上述现有技术所存在的问题,本发明提出了一种基于socks5的传输层代理通信方法,包括:
将所有移动虚拟专网账户中协商安全规则的集合设置为账户群组;
在新账户加入账户群组时创建安全规则,为账户下载和更新密钥;
存储生成的安全规则与所有账户的ID、公钥信息,对多播数据的认证提供认证信息;
采用RSA算法对进入/外出的数据进行签名认证;
获取Socks5的安全规则,用于发送被签名和认证的数据流。
优选地,所述密钥密钥包括两种类型:
加密报文的密钥PK,由群组内的所有账户共享,用于加密账户之间的报文;
加密密钥的密钥EK:由组内的所有账户共享,用于加密账户服务器向账户发送的重加密消息。
优选地:所述账户在本地配置访问列表并从账户服务器下载访问列表,账户优先匹配本地的访问列表,再匹配下载的访问列表。
优选地:在账户对报文的封包处理中,只有成功匹配了访问列表的报文才能进行封包处理。
优选地,对查找不到访问列表的报文,对本机发送的协商报文不做处理。
优选地,在对报文进行封包处理时,如果Socks5群组账户的封包模式为隧道模式,则设置外层封包的IP头的源目的地址与内层IP头相同;
当满足报文的大小超过Socks5群组账户的最大封包长度、报文没有设置DF标记的条件后,账户先对待封包的报文进行分片,然后再封包处理。
优选地,对于报文的解包处理,如果是转发的报文,则优先匹配账户服务器分发的访问列表,匹配规则时忽略上层协议和端口号;如果匹配到访问列表的拒绝规则,则需要继续匹配,直到没有匹配的允许规则再出现于报文;
如果是到本机的报文,则直接查找Socks5群组账户对报文进行解包;如果接收到的报文是明文,则先匹配本地访问列表,然后再匹配账户服务器分发的访问列表。
优选地,在账户登录成功后,根据账户服务器分发的Socks5群组账户密钥和重加密密钥的有效期计算出重登录的时间并刷新该登录定时器;如果在该定时器超时时间内账户没有接收到账户服务器发送的重加密报文,则账户重新向该账户服务器进行登录并获取新的密钥信息;其中Socks5群组账户密钥重登录时间的计算方法为:
8.1先分别计算保护每一条数据流的所有Socks5群组账户中最大的有效期,再从中获取最小的有效期做为当前账户组中的Socks5群组账户有效期;
8.2如果Socks5群组账户密钥的有效期大于预定义最大阈值,则重登录时间=群组账户密钥有效期-(60+0到(Socks5群组账户密钥有效期*10%-60)/2)之间的随机值);
8.3如果Socks5群组账户密钥的有效期在预设最小阈值和最大阈值之间,则重登录时间=Socks5群组账户密钥有效期-60到75之间的随机值;
8.4如果Socks5群组账户的有效期小于预设最小阈值时,则重登录时间=Socks5群组账户生命周期有效期-1到30之间的随机值。
本发明相比现有技术,具有以下优点:
本发明提出了一种基于socks5的传输层代理通信方法,实现了不同账户密钥和规则的安全集中管理和多点之间的无隧道连接,支持大规模扩展,并且能够保证大流量环境下的通信质量。
附图说明
图1是根据本发明实施例的基于socks5的传输层代理通信方法的流程图。
具体实施方式
下文与图示本发明原理的附图一起提供对本发明一个或者多个实施例的详细描述。结合这样的实施例描述本发明,但是本发明不限于任何实施例。本发明的范围仅由权利要求书限定,并且本发明涵盖诸多替代、修改和等同物。在下文描述中阐述诸多具体细节以便提供对本发明的透彻理解。出于示例的目的而提供这些细节,并且无这些具体细节中的一些或者所有细节也可以根据权利要求书实现本发明。
本发明的一方面提供了一种基于socks5的传输层代理通信方法。图1是根据本发明实施例的基于socks5的传输层代理通信方法流程图。
本发明针对移动虚拟专网安全加密,结合socks5协议实现对密钥和规则的集中管理与分发,从而实现点到点的无隧道连接。Socks5在协议栈的TCP层上运行,是介于传输层和应用层之间的中介层协议,是为了让使用TCP和UDP的客户/服务器应用程序更方便安全地使用网络防火墙所提供的服务而设计。对于上层应用层协议来说,Socks代理只是简单地传递数据包,而不必关心是何种应用协议(比如FTP,HTTP请求)。Socks5协议的工作原理与应用代理相似,作为网络边界上的Socks服务器接收客户的请求,并代理外部的应用服务器,使得客户与外部的联系实质上是Socks客户与Socks服务器之间的联系;而外部的应用服务器所接受的请求是来自Socks服务器的外部接口,也就是说Socks服务器对内部网络的客户来说是服务器,对外部网络的应用服务器来说是客户。
本发明建立账户服务器来实现Socks5信道协商建立阶段的密钥信息和安全规则的集中管理。将所有移动虚拟专网账户中协商安全规则的集合设置为账户群组,一个群组中的账户共享用来协商的密钥和安全规则信息。一个账户服务器及它的冗余备份账户服务器用来划分账户群组,不同的账户服务器管理不同的密钥和安全规则,即一个专网中通过不同的账户服务器来划分不同的群组;账户服务器产生和管理的密钥和安全规则分发给同组的账户来实现多播过程。
账户通过和账户服务器的协商来加入不同的账户群组中,形成群组账户。账户负责对同组之间账户数据报文加密和解密,数据报文的转发发生在同一个群组的账户之间,账户就是基于账户服务器分发的规则和安全规则来加密通信报文。
账户服务器为整个账户群组维护安全规则、创建和维护密钥信息。它有两个功能:响应账户的登录请求,以及发送重加密消息。具体账户服务器与账户的交互工作过程分为两种情况:账户通过配置登录信息向账户服务器进行登录,账户服务器收到账户的登录信息将密钥和安全规则分发;在密钥设定的有效期超时前,账户服务器会产生重加密信息,通过这个重加密信息通知所有账户替换新的密钥。
密钥包括两种类型:PK加密报文的密钥:由群组内的所有账户共享,用于加密账户之间的报文;EK加密密钥的密钥:由组内的所有账户共享,用于加密账户服务器向账户发送的重加密消息。
账户通过账户服务器来共享相同安全规则和密钥。同一个账户群组的账户在通过账户服务器登录成功之后,两两之间便可以协商建立Socks5信道。账户在向账户服务器登录时提供这个群组的ID来进行身份认证,身份认证成功后账户服务器根据组ID进行密钥和安全规则的分发。
第一阶段协商过程需要交换6条消息,最终协商出来安全规则。
1.通信双方特征Hash值交换,发起方产生Hash-I;应答方产生hash-R,并与hash-I一起发送,这一对hash在整个安全规则协商中不变;
2.发起者产生RSA的秘密值xi;在选定的RSA组中产生公开数值g^xi;产生随机数Ni;在报文载荷中发送Ni,g^xi;在收到响应者的消息后,计算RSA的密钥g^xy;最后用g^xy、Ni、Nr计算安全密钥Z;
3.应答者产生RSA的秘密值xr;在选定的RSA组中产生公开数值g^xr;产生随机数Nr;在报文载荷中送出Nr,g^xr;在收到发起者的信息之后,计算RSA的密钥g^xy;用g^xy、Nr、Ni计算安全密钥Z,计算出来安全密钥Z后再应用RSA算法计算出以下三个参数:
SKID_d:在Socks5协议阶段协商使用,通过这个参数来计算协议产生的密钥资源;
SKID_a:散列算法预分发密钥信息,通过这个参数实现对协商数据的完整性认证;
SKID_e:一个加密参数,通过它对下一阶段信息、数据、预分发密钥和Socks协议协商过程进行加密。
4.在通过两个消息交换用户身份信息载荷和散列载荷,对对方进行验证,这两个消息都是通过加密进行的。
第二阶段对Socks5协议的定义进行扩展:将单一安全规则扩展成账户群组安全规则,其中还包括了3个子规则:第一阶段协商产生的安全规则、重加密密钥、数据传输保护。其中对于重加密密钥,在一个多播群组中只存在一个重加密密钥,是通过账户服务器直接分发给群组账户。在群组账户更新时,账户服务器通过重加密密钥通知群组账户进行密钥的更新与处理,从而达到维持整个群组通信的安全性。
数据传输保护通过通信双方单播协商而成,通过拉取和推送两个交换过程与账户服务器进行规则管理,账户之间通过这两个交换得到的安全规则保证各个账户数据传输的安全性。
拉取交换包含了四条消息交互,从初始的账户申请加入群组开始通过协商从群组对应的账户服务器中拉取下来通信所需要的各种信息,从而获得了重加密密钥和Socks5安全规则,最终与账户之间建立起安全的数据通信:
消息1.群组账户向账户服务器发送S5HEAD*,MD5(1),Ni,ID;
消息2.账户服务器向群组账户返回S5HEAD*,MD5(2),Nr,SA;
消息3.群组账户向账户服务器发送S5HEAD*,MD5(3)[,XPLD];
消息4.账户服务器向群组账户返回S5HEAD*,MD5(4),[SEQ,]KD
其中S5HEAD*是加密后的Socks5报头,Ni和Nr是账户和群组账户服务器当前的随机数;SA包含重加密密钥和Socks5群组账户;XPLD中包含用于RSA交换的密钥交换载荷;KD载荷包含了EK和PK;
MD5(1)-MD5(4)是由散列函数MD5计算出来的,用来对每次的交换的消息进行认证。
MD5(1)=MD5(SKID_a,M-ID|Ni|ID)
MD5(2)=MD5(SKID_a,M-ID|Ni_b|Nr|SA)
MD5(3)=MD5(SKID_a,M-ID|Ni_b|Nr_b[|XPLD])
MD5(4)=MD5(SKID_a,M-ID|Ni_b|Nr_b[|SEQ]|KD)
其中“|”表示信息的连接。
这个信息交换过程是在第一阶段安全规则的保护下完成,SKID_a是第一阶段协商出来的散列预分发密钥,用来第二阶段的密钥认证。随机载荷Ni和Nr用来保证群组账户服务器和账户的活性和抗重放攻击。在群组账户服务器收到消息3之前,即证明账户是否存活之前,账户服务器只返回给账户安全规则,不进行密钥下载。在收到消息3之后,才会把KD所包含的全部密钥下载给组账户,即消息4。双方在消息3和4中交换KD载荷之前,先使用RSA交换生成共享的密钥,群组账户服务器用该密钥对KD载荷进行异或,然后再下载给账户。
当多播组中各账户的关系发生变化时,群组账户服务器必须对整个组的当前密钥进行更新,所以就引入了推送交换,此交换在重加密密钥的保护下进行,群组账户服务器使用多播的方式把更新后的密钥推送给所有的账户:
群组账户服务器向账户发送:S5HEAD*,SEQ,[D,]SA,KD,WTM
SEQ为序列号载荷,是一个包含32位大小的数字,其单调递增。首先由群组账户服务器进行初始化0,每次发送一个推送消息,SEQ载荷的值就增1。群组账户通过拉取消息获得当前的SEQ值,之后通过推送消息接收到的SEQ必须大于先前的SEQ值,如果小于或等于那么说明发生了报文重放,必须丢弃该消息。
WTM称为水印载荷,防止群组账户服务器被恶意冒充;群组账户在接收到群组账户服务器发送的推送消息后,先验证WTM,如果验证通过则接受该消息,如果不符合则直接丢弃该消息。
本发明设计自己的协议栈结构,并实现在移动虚拟专网的在IP网络设备中配置账户服务器和账户实现客户的组网要求,下文介绍实现组网的协议栈结构和事件流。在应用层设计认证模块、多播安全规则模块和密钥交换模块,而在报文转发的网络层本发明使用成熟的Socks5协议。整个协议栈系统分为控制平面和数据平面。控制平面中规则创建模块用于在新账户加入账户群组时创建安全规则,密钥传输模块为账户下载和更新密钥,其中包括EK和PK。存储模块用于存储生成的安全规则与所有账户的ID、公钥信息,对多播数据的认证提供认证信息。数据平面中认证模块采用RSA算法对进入/外出的数据进行签名认证。网络层的Socks5模块首先和安全规则模块进行交互,从而获取到Socks5的安全规则,接下来用于发送由认证模块签名并且认证的数据流。
在账户对报文的封包处理中,只有成功匹配了访问列表的报文才能进行封包处理。基于群组的移动虚拟专网中的账户在本地配置访问列表并从账户服务器下载访问列表,且账户优先匹配本地配置的访问列表。
如果账户已经登录成功,Socks5群组账户已经分发到规则应用接口,数据报文开始经过接口进行转发,则对路由到接口的IP报文进行封包处理,如果配置了本地访问列表,则先匹配本地的访问列表,再匹配分发的访问列表,根据匹配结果做丢弃或进行Socks5封包处理。对查找不到访问列表的报文透传,对本机发送的协商报文不做处理。
在对报文进行封包处理时,如果Socks5群组账户的封包模式为隧道模式,则设置外层封包的IP头的源目的地址与内层IP头相同。当满足报文的大小超过Socks5群组账户的最大封包长度、报文没有设置DF标记的条件后,账户先对待封包的报文进行分片,然后再封包处理。
账户对报文进行解包处理,Socks5对接口上送的Socks5报文进行解包处理。如果是转发的报文,则优先匹配账户服务器分发的访问列表,匹配规则时忽略上层协议和端口号。如果匹配到访问列表的拒绝规则,则需要继续匹配,直到没有匹配的允许规则再出现于报文。
如果是到本机的报文,则直接查找Socks5群组账户对报文进行解包。如果接收到的报文是明文,则无论是到本机还是转发,均先匹配本地访问列表,然后再匹配账户服务器分发的访问列表。
在账户向账户服务器进行登录时,账户首先获取本地配置的账户服务器列表中的第一个账户服务器并向其发起登录,如果第一阶段或者第二阶段协商失败,则账户尝试向下一个账户服务器登录,一直遍历到账户服务器列表中的最后一个。如果账户无法正常接收账户服务器应答的报文,此时账户重发上一条报文,当重发达到一定次数后则终止协商。。如果遍历完所有账户服务器都没登录成功,则重新从账户服务器列表中的第一个开始进行第二轮尝试登录,一直到登录成功为止。
在账户登录成功后,会根据账户服务器分发的Socks5群组账户密钥和重加密密钥的有效期计算出重登录的时间并刷新该登录定时器。如果在该定时器超时时间内账户没有接收到账户服务器发送的重加密报文,则账户重新向该账户服务器进行登录并获取新的密钥信息。重登录时间的计算方法是:先分别计算Socks5群组账户密钥和重加密密钥的重登录时间,然后再取其中最小时间为账户的重登录时间。
Socks5群组账户密钥重登录时间的计算步骤:
1.先分别计算保护每一条数据流的所有Socks5群组账户中最大的有效期,再从中获取最小的有效期做为当前账户组中的Socks5群组账户有效期;
2.如果Socks5群组账户密钥的有效期大于预定义最大阈值,则重登录时间=群组账户密钥有效期-(60+0到(Socks5群组账户密钥有效期*10%-60)/2)之间的随机值);
3.如果Socks5群组账户密钥的有效期在预设最小阈值和最大阈值之间,则重登录时间=Socks5群组账户密钥有效期-60到75之间的随机值;
4.如果Socks5群组账户的有效期小于预设最小阈值时,则重登录时间=Socks5群组账户生命周期有效期-1到30之间的随机值;
重加密密钥的重登录时间的计算方法为:
1.计算账户服务器分发的重加密密钥的最小有效期;
2.如果重加密密钥的有效期大于预设第一阈值,则重登录时间=重加密密钥有效期-50到150之间的随机值;
3.如果重加密密钥的有效期小于等于预设第二阈值,则重登录时间=重加密密钥有效期+5到25之间的随机值。
在账户登录成功后,根据账户服务器分发规则的优先级确定转发出方向使用的Socks5群组账户密钥。在密钥过期后,账户服务器更新密钥并分发给所有账户。
综上所述,本发明提出了一种基于socks5的传输层代理通信方法,实现了不同账户密钥和规则的安全集中管理和多点之间的无隧道连接,支持大规模扩展,并且能够保证大流量环境下的通信质量。
显然,本领域的技术人员应该理解,上述的本发明的各模块或各步骤可以用通用的计算系统来实现,它们可以集中在单个的计算系统上,或者分布在多个计算系统所组成的网络上,可选地,它们可以用计算系统可执行的程序代码来实现,从而,可以将它们存储在存储系统中由计算系统来执行。这样,本发明不限制于任何特定的硬件和软件结合。
应当理解的是,本发明的上述具体实施方式仅仅用于示例性说明或解释本发明的原理,而不构成对本发明的限制。因此,在不偏离本发明的精神和范围的情况下所做的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。此外,本发明所附权利要求旨在涵盖落入所附权利要求范围和边界、或者这种范围和边界的等同形式内的全部变化和修改例。