一种基于代理与反向代理实现国密算法通信的方法及系统与流程

文档序号:31597095发布日期:2022-09-21 07:16阅读:211来源:国知局
一种基于代理与反向代理实现国密算法通信的方法及系统与流程

1.本发明涉及数据安全与通信安全技术领域,具体涉及一种基于代理与反向代理实现国密算法通信的方法及系统。


背景技术:

2.信息安全已上升到国家安全的战略地位,数据安全作为信息安全的重要组成部分,如何保障数据的传输安全是重要目标之一;而加密算法是数据传输安全的核心,需要自主、安全的加密算法来保障。
3.国密算法是国家商用密码算法的简称,自2012年以来,国家密码管理局以《中华人民共和国密码行业标准》的方式,陆续公布了sm2/sm3/sm4等密码算法标准及其应用规范。通过应用国密算法,来降低弱密码和错误实现带来的安全风险。支持国密算法,提供符合国密规范的数据加密、安全通信是保证通信安全的重要手段。
4.随着国密算法的应用与普及,在数据安全与通信安全领域越来越多应用将需要使用国密算法来通信。然而在应用程序开发时,可能会根据业务需求选择合适的编程语言,不同的编程语言实现国密算法通信的差异较大、难度不同,开发的不可控风险也就变大。同时,还有不少的应用程序已经完成项目开发,并运行稳定,在这些已部署、运行稳定的应用中来实现国密算法通信还需要再次开发。


技术实现要素:

5.为此,本发明提供一种基于代理与反向代理实现国密算法通信的方法及系统,以解决不同的编程语言实现国密算法通信的差异较大、难度不同,开发的不可控风险也就变大,在已部署、运行稳定的应用中来实现国密算法通信还需要再次开发的技术难题。
6.为了实现上述目的,本发明提供如下技术方案:
7.根据本发明实施例的第一方面,提出了一种基于代理与反向代理实现国密算法通信的方法,所述方法包括:
8.通过代理方式实现客户端与服务端的国密算法通信,所述代理方式包括正向代理和反向代理;
9.所述正向代理是通过代理服务器代理客户端程序向服务端发起请求,从而实现与服务端的数据交互;反向代理则是通过代理服务器代理服务端程序接收来自客户端请求,实现与客户端的数据交互。
10.进一步地,所述方法还包括:
11.当采用反向代理方式时,代理服务器接收到客户端的国密通信请求后,与之创建加密通信通道,然后将接收到的数据进行解密,再将解密后的原始数据提交给服务端,同时从服务端获得响应数据后,对数据进行加密,通过已创建的国密通信通道返回给外部的客户端程序来实现国密通信。
12.进一步地,所述方法还包括:
13.当采用正向代理方式时,客户端将请求以非加密方式提交给代理服务器,代理服务器接收到请求后,与服务端创建国密通信安全通道,然后接收到的原始数据调用国密算法加密后通过已创建的安全通道提交给服务端,并将收到的加密数据调用国密算法解密后,再将响应原始数据返回给客户端实现国密通信。
14.进一步地,所述方法还包括:
15.将国密通信代理应用在不同开发语言编写的程序上,被代理程序只需要完成业务逻辑的处理,国密通信交给代理程序完成。
16.进一步地,所述代理服务器包括nginx。
17.进一步地,所述方法还包括:
18.调用开源的ssl软件库tassl来实现安全通信。
19.进一步地,所述方法还包括:
20.nginx程序基于模块化开发,客户端的安全请求通信上下文在ngx_event_openssl.c中的ngx_ssl_create()函数中创建,只需要将原有的openssl的tls_client_method()修改成tassl的cntls_client_method()函数就完成客户端创建国密通信通道的代码调整。
21.进一步地,所述方法还包括:
22.nginx的证书加载在ngx_event_openssl.c中的ngx_ssl_certificates()与ngx_ssl_certificate()函数据实现,此处同样需要调整为tassl证书加载逻辑,实现从nginx配置文件中分别加载签名证书与加密证书,在tassl中使用certificates_enc与certificate_enc_keys来加密证书,ssl_ctx_use_certificate_file与ssl_ctx_use_enc_privatekey来应用加密证书,原证书处理函数用来加载与使用签名证书。
23.进一步地,所述方法还包括:
24.反向代理服务端程序的支持密钥算法在nginx.conf配置文件进行配置限定,用来限定客户端通信能够采用的加密算法集合。
25.根据本发明实施例的第二方面,提出了一种基于代理与反向代理实现国密算法通信的系统,所述系统包括客户端、服务端以及代理服务器;
26.所述代理服务器用于通过代理方式实现客户端与服务端的国密算法通信,所述代理方式包括正向代理和反向代理;所述正向代理是通过代理服务器代理客户端程序向服务端发起请求,从而实现与服务端的数据交互;反向代理则是通过代理服务器代理服务端程序接收来自客户端请求,实现与客户端的数据交互。
27.本发明具有如下优点:
28.本发明提出的一种基于代理与反向代理实现国密算法通信的方法及系统,采用的国密通信代理方案为国密通信的实现与部署提供了极大的方便,原有的程序基本上无需进行代码调整即可实现国密算法通信,新程序的开发也不需要考虑该所选编程语言是否可以实现国密通信以及实现国密通信的难易度,只需考虑业务逻辑的实现用何种编程语言最为合适,这样就可以简少国密通信程序的开发工作量、解偶程序、降低程序开发难度。
附图说明
29.为了更清楚地说明本发明的实施方式或现有技术中的技术方案,下面将对实施方
式或现有技术描述中所需要使用的附图作简单地介绍。显而易见地,下面描述中的附图仅仅是示例性的,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据提供的附图引伸获得其它的实施附图。
30.图1为本发明实施例1提供的一种基于代理与反向代理实现国密算法通信的方法的示意图;
31.图2为本发明实施例1提供的一种基于代理与反向代理实现国密算法通信的方法中安全通信步骤示意图。
具体实施方式
32.以下由特定的具体实施例说明本发明的实施方式,熟悉此技术的人士可由本说明书所揭露的内容轻易地了解本发明的其他优点及功效,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
33.实施例1
34.如图1所示,本实施例提出了一种基于代理与反向代理实现国密算法通信的方法,所述方法包括:
35.通过代理方式实现客户端与服务端的国密算法通信,所述代理方式包括正向代理和反向代理;
36.所述正向代理是通过代理服务器代理客户端程序向服务端发起请求,从而实现与服务端的数据交互;反向代理则是通过代理服务器代理服务端程序接收来自客户端请求,实现与客户端的数据交互。
37.使用代理方式实现国密通信则是一个不错的选择;不同语言开发的程序以及已经开发完成的程序都可能使用代理来实现国密通信。nginx就是不错的一款代理软件,采用c语编写,功能强大、性能可靠。
38.https是基于http协议的安全通信(ssl/tls)协议,在日常业务中使用较为普及。比如我们日常使用的网站页面访问的安全通信版本就是https实现,在网站的加密通信的实现方案上就可以选择服务端的反向代理来实现,网页访问的客户端一般使用浏览器,而浏览器内部已实现加密通信,所以只需要代理服务端就能完成加密通信的交互。https协议也常被应用于接口通信中,如https restful接口规范就是在https协议的基础上制定,其实现需要同时包含服务端与客户端两部分,所以在实现接口通信的代理方案时即要实现客户端的正向代理,也需要实现服务端的反向代理。
39.https协议是在http协议的基础上增加ssl(安全套接层)或tls(传输层安全)来实现,tls是ssl更为安全的升级版,其实现原理基本相同;ssl与tls的安全通信都包含握手、证书加载、证书交换、证书验证、数据加密、数据解密以及数据交互等一整套实现逻辑,步骤如图2:
40.在业务逻辑的程序开发中自己实现安全通信的难度较大,一身不在业务逻辑中自己实现,通常采用开源的openssl来实现。openssl采用c语言开发,在最新的openssl-1.1.1版本中已支持sm2/sm3/sm4等密码算法,但由于标准的不同,按照我国相关密码政策和法规,国密通信在tls1.1的握手协议中增加了ecc、ibc的认证模式和密钥相交换模式,取消了
dh密钥交换方式,修改了密码套件的定义。所以,要实现国密通信的目标,就需要在符合国密通信的握手协议上,完成交换密钥,再使用sm2/sm3/sm4等密码算法加密数据来实现通信。
41.而openssl采用的是国际标准,在握手、证书加载、证书交换等逻辑上与国密规范存在着不少的差异,直接使用openssl还难以实现国密通信。因此国内的不少企业与组织也在openssl基础上开发符合国密规范的开源项目,比较完善的有gmssl与tassl两款,包括实现了完整的通信逻辑、示例代码以及说明文档等,是国密通信底层逻辑实现的不错选择。但gmssl近期已转为商业版,在开源的版本已不再包含最新逻辑的更新,后续版本支持上存在风险,所以开源的tassl国密通信实现是不错选择。
42.在nginx中已调用openssl实现正向代理与反向代理的通用算法与握手的通信代理机制,在此基础上实现国密通代理,只需要在原有代理程序握手的证书加载、证书交换、密钥协商、算法协商等相关实现处修改为国密方法即可。
43.在openssl中创建加密通信上下文时,需要提供struct ssl_method_st结构体实例来告诉底层程序,握手逻辑、密钥交换、算法支持与协商的相关回调函数。在openssl中默认使用tls_client_method()函数来获取该结构体的实例对象。tassl中实现了cntls_client_method()函数,该函数返回国密通信所需结构体的实例对象。nginx程序基于模块化开发,客户端的安全请求通信上下文在ngx_event_openssl.c中的ngx_ssl_create()函数中创建,只需要将原有的openssl的tls_client_method()修改成tassl的cntls_client_method()函数就完成客户端创建国密通信通道的代码调整。
44.同时国密通信在证书加载上也做了调整,把通信证书分为了签名证书与加密证书,实现时需要对代理服务的证书加载部分进行相应调整。nginx的证书加载在ngx_event_openssl.c中的ngx_ssl_certificates()与ngx_ssl_certificate()函数据实现,此处同样需要调整为tassl证书加载逻辑,实现从nginx配置文件中分别加载签名证书与加密证书,在tassl中使用certificates_enc与certificate_enc_keys来加密证书,ssl_ctx_use_certificate_file与ssl_ctx_use_enc_privatekey来应用加密证书,原证书处理函数用来加载与使用签名证书。
45.反向代理服务端程序的支持密钥算法在nginx.conf配置文件进行配置限定,用来限定客户端通信可以采用的加密算法集合。致此使用nginx调用tassl进行国密通信的调整完成。
46.国密通信的反向代理以用tomcat部署java网站程序,nginx做反向代理为例进行说明:tomcat与nginx部署在同一台设备上,tomcat监听80端口只对本机程序提供http服务,nginx监听443端口对外提供https服务。nginx接收到外部的国密通信请求后,与之创建加密通信通道,然后将接收到的数据进行解密,再将解密后的原始数据提交给本机的80端口,同时从80端品获得的响应数据后,对数据进行加密,通过已创建的国密通信通道返回给外部的请求程序来实现国密通信。
47.国密通信的正向代理以https restful接口调用为例进行说明,如接口客户端需要使用国密算法与某ip的443端口进行通信,接口程序本身不实现国密通信,由nginx正向代理完成。接口程序与nginx代理部署在同一设备,nginx代理监听80端口向本机提供http服务,接口程序将需要对外的请求以非加密方式提交给本机的80端口,nginx代理服务接收
到请求后,与远程ip的443端口创建国密通信安全通道,然后把从80端口接收到的原始数据调用国密算法加密后通过已创建的安全通道提交给远程的443端口,并将443端口收到加密数据调用国密算法解密后,再将响应原始数据返回给本机的接口程序来实现国密通信。
48.国密通信代理可以应用在不同开发语言编写的程序上,被代理程序只需要完成业务逻辑的处理,国密通信交给代理程序,这样更有利程序逻辑的解偶与软件的开发效率。
49.实施例2
50.与上述实施例1相对应的,本实施例提出了一种基于代理与反向代理实现国密算法通信的系统,所述系统包括客户端、服务端以及代理服务器;
51.所述代理服务器用于通过代理方式实现客户端与服务端的国密算法通信,所述代理方式包括正向代理和反向代理;所述正向代理是通过代理服务器代理客户端程序向服务端发起请求,从而实现与服务端的数据交互;反向代理则是通过代理服务器代理服务端程序接收来自客户端请求,实现与客户端的数据交互。
52.本发明实施例提供的一种基于代理与反向代理实现国密算法通信的系统中各部件所执行的功能均已在上述实施例1中做了详细介绍,因此这里不做过多赘述。
53.虽然,上文中已经用一般性说明及具体实施例对本发明作了详尽的描述,但在本发明基础上,可以对之作一些修改或改进,这对本领域技术人员而言是显而易见的。因此,在不偏离本发明精神的基础上所做的这些修改或改进,均属于本发明要求保护的范围。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1