H04L9/40
1.一种跨接口平台组网通信及服务加密调用方法,其特征在于,包括:
第一平台(p1)接收第二平台(p2)的连接申请,所述连接申请包括第二平台的信息;
第一平台(p1)基于所述第二平台的信息生成鉴权请求信息(authMsg),再将其发送至第二平台(p2),第二平台根据所述鉴权请求信息(authMsg)生成鉴权应答信息(respAuthMsg),再将其发送至第一平台(p1);
第一平台和第二平台双方利用鉴权请求信息(authMsg)及鉴权应答信息(respAuthMsg)获取共享密钥以基于所述共享密钥解密共享信息;第一平台(p1)获取到连接申请信息后将发起与第二平台(p2)的连接,从而达成组网连接状态。
2.根据权利要求1所述的方法,其特征在于,鉴权请求信息(authMsg)包括:随机数(p1_nonce)、签名信息(signature)、第一平台的公钥(p1_node_id)、第二平台接收审核结果的接口(p1_url2)。
3.根据根据权利要求2所述的方法,其特征在于,第一平台产生随机的第一公钥(p1_puk)、随机私钥(p1_prk)和随机数(p1_nonce),利用第一平台的私钥(p1_node_key)和第二平台的公钥(p2_node_id)生成一共享私钥(token),再基于随机数(p1_nonce)和所述共享私钥(token)生成一个待签名信息(unsigned),然后使用第一平台的随机私钥(p1_prk)对待签名信息(unsigned)进行签名得到签名信息(signature)。
4.根据权利要求1所述的方法,其特征在于,第二平台(p2)收到该鉴权请求信息(authMsg)后将所述鉴权请求信息(authMsg)的数据写入到数据库(mysql)中。
5.根据权利要求4所述的方法,其特征在于,用户在第二平台前端进行审核,若用户拒绝连接请求,则第一平台和第二平台之间不再进行数据交互;若用户同意所述连接请求,继续进行鉴权过程。
6.根据权利要求5所述的方法,其特征在于,第二平台读取鉴权请求信息(authMsg)的数据,使用第二平台的私钥(p2_node_key)和所接收的第一平台(p1)的公钥(p1_node_id)生成一个相应的共享私钥(token),双方的共享私钥(token)是同样的,基于第一平台的随机数(p1_nonce)和共享私钥(token)得到一个待签名信息(unsigned),利用待签名信息(unsigned)和签名信息(signature)导出第一平台(p1)的随机公钥(p1_puk);第二平台(p2)生成第二平台的随机私钥(p2_prk)和随机数(p2_nonce),然后将第二平台的随机公钥(p2_puk)和随机数(p2_nonce)、以及连接信息封装成鉴权应答信息(respAuthMsg)。
7.根据权利要求6所述的方法,其特征在于,第二平台(p2)请求第一平台连接申请接口(p1_url2)接收鉴权应答信息(respAuthMsg),第一平台和第二平台双方用自己的随机私钥(p_prk)和对方的随机公钥(p_puk)获取共享密钥;第一平台(p1)获取到连接信息后将发起与第二平台(p2)的连接,达成一种(p2p)组网连接状态。
8.根据权利要求1所述的方法,其特征在于,第一平台与第二平台组网成功后,第一平台进行服务授权,将需要授权的接口服务授权给第二平台。
9.根据权利要求8所述的方法,其特征在于,第一平台获取共享密钥,将接口服务的数据进行加密得到第一加密字符串(enCodeResult1)最终形成第一json数据,以消息推送形式进行发送,并将共享数据写入数据库(mysql),且以第二平台节点标记(p2_node_id)和服务标记(service_id)的组合(p2_node_id+”_”+service_id)作为标签(key)存储在redis缓存中;
第二平台(p2)接收到共享数据后用共享密钥进行解密,并存储解密数据,若解密失败不进存储。
10.根据权利要求9所述的方法,其特征在于,第二平台(p2)获取到第一平台(p1)的共享服务数据后,第二平台(p2)前端可以在浏览器进行服务接口调用。
11.根据权利要求9所述的方法,其特征在于,第二平台(p2)接收到的第一平台共享服务数据请求后,将该共享服务数据封装成参数数据(param),在调用时将使用共享密钥对该参数数据(param)进行加密得到第二加密字符串(enCodeResult2),最终形成第二json数据作为参数,以请求的方式对第一平台(p1)的接口进行访问。
12.根据权利要求11所述的方法,其特征在于,第一平台(p1)接收到请求信息后使用共享密钥进行解密,如果解密失败向第二平台返回错误指令,如果解密成功则进行接口服务权限的校验;采用获取的第二平台节点标记(p2_node_id)和服务标记(service_id)的组合(p2_node_id+”_”+service_id)是否在redis缓存中存在作为判据进行判断,如果其存在则判断有权限进而进行数据的接口调用,然后使用共享密钥作为秘钥对接口的返回数据进行加密返回给第二平台(p2),第二平台(p2)得到数据后用共享密钥进行解密并展示。
13.根据权利要求12所述的方法,其特征在于,第二平台(p2)后端接收到前端请求后,进行参数数据(param)封装,最终调用时将使用共享密钥对参数数据param进行加密得到第二加密字符串(enCodeResult2),最终形成第二json数据作为参数以访问第一平台(p1)接口。
本发明涉及数据通信技术领域,特别涉及一种跨接口平台组网通信及服务加密调用方法。
近几年来,许多企业用微服务的思想重构公司的业务应用,各式各样业务功能的saas软件被研发。问题随之而来,企业内部saas软件之间的接口调用开始变得混乱,服务权限与调用得不到统一管理,服务对接也是相对比较繁琐,对接成本较高。所以接口服务管理开始被越来越多人谈及,越来越多企业开始基于数据中台之上,整合公司实际业务应用搭建企业内部的接口服务管理平台,接口服务平台之间的对接比较麻烦。另一方面,在网络飞速发展的今天,数据的信息安全也被越来越多人关注,接口服务对接及调用过程的数据的加密传输至关重要。
现有接口平台是单个、单向与其他接口平台进行手动对接,对接的数据传输过程也是运用明文或者人员自定义的不安全密码进行加密传输。现有企业内部实现了接口服务的统一管理,但是各企业之间跨接口平台的服务对接还是采用比较传统的通过人工对接API文档的形式进行,无法达到接口服务的快速、批量对接。服务对接方式的数据安全问题还存在很大的隐患,服务调用时数据很容易被人截取及解密,信息安全性得不到保证。
为解决上述跨接口平台数据交互对接问题,本发明提出了一种跨接口平台组网通信及服务加密调用方式。
本发明提出一种跨接口平台组网通信及服务加密调用方法,包括:
第一平台接收第二平台的连接申请,所述连接申请包括第二平台的信息;
第一平台基于所述第二平台的信息生成鉴权请求信息,再将其发送至第二平台,第二平台根据所述鉴权请求信息生成鉴权应答信息,再将其发送至第一平台;
第一平台和第二平台双方利用鉴权请求信息及鉴权应答信息获取共享密钥以基于所述共享密钥解密共享信息;第一平台获取到连接申请信息后将发起与第二平台的连接,从而达成组网连接状态。
本发明中服务平台通过申请审批方式形成组建信任网络节点,平台之间通过加密通信协商产生共享密钥,利用共享密钥对接口授权数据、调用数据、返回数据进行加密传输。本发明能够有效处理跨平台安全对接接口服务,实现数据加密共享,快速实现接口服务加密授权及调用。
图1是通信组网及服务调用流程图。
图2是通信组网及服务调用过程图。
本发明的基本处理流程如下:
图1所示,首先在每个平台设置一个接收节点作为通过http协议连接申请的第一接口url1、设置另一个接收节点作为连接审批结果的第二接口url2,所述接口可以使用oauth2安全认证、ip白名单等限制,防止恶意调用。平台之间通过申请连接请求,对方审核通过的机制进行节点连接,这里可以将每个服务平台看成是一个节点,每个节点存在唯一节点标识node_id相当于本节点的一个公钥。节点之间通过http协议进行连接申请,经过加密通信的方式协商产生共享密钥,实现基于websocket的p2p通信模式,每个节点即可以是服务端也可以是客户端,即每个节点既可以提供服务也可以调用服务。平台之间连接成功后,将本平台的接口服务进行数据加密授权给连接节点。服务的授权信息可以存储在数据库中,例如可以采用mysql数据库进行数据持久化存储以及采用redis存储进行授权信息的缓存。利用websocket消息推送的形式,将数据进行AES加密并发送,对方平台收到加密授权数据后即可使用共享密钥解密得到接口服务信息。服务授权成功后,对方平台基于http协议的数据请求方式,采用AES加密传参对接口服务进行调用,数据也会以AES加密方式返回给调用方,然后使用共享密钥解进行解密。
以下对本发明的具体实施方式进行详细说明。
一种跨接口平台组网通信及服务加密调用方法,包括:图1-2所示,
S1、第一平台p1通过节点连接申请接口接收第二平台p2的连接申请,接收和第二平台p2的公钥p2_node_id 1,存储到第一平台p1后端。
S2、第一平台产生一随机的第一公钥p1_puk、随机私钥p1_prk和随机数p1_nonce,利用第一平台的私钥p1_node_key和第二平台的公钥p2_node_id生成一共享私钥token,再将所述随机数p1_nonce和所述共享私钥token进行异或得到一个待签名信息unsigned,然后使用第一平台的随机私钥p1_prk对待签名信息unsigned进行签名得到签名信息signature,第一平台将所述随机数p1_nonce、签名信息signature、第一平台的公钥p1_node_id、第二平台接收审核结果的接口信息p1_url2打包成鉴权请求信息authMsg。
S3、第一平台p1通过http协议的网络通道请求第二平台的节点连接申请接口p2_url1接收鉴权请求信息authMsg,从而将所述鉴权请求信息authMsg发送给第二平台p2。
S4、第二平台p2服务端收到该鉴权请求信息authMsg后将鉴权请求信息authMsg的数据写入到其数据库mysql中,用户在第二平台前端进行审核。若用户拒绝连接请求,则第一平台和第二平台之间不再进行数据交互。数据库可以例如是mysql类型的,第一平台、第二平台可以各自具有相应的数据库,或者共享数据库,用于存储交互数据。
S5,若用户同意所述连接请求,则从数据库mysql中取出鉴权请求信息authMsg的数据,第二平台p2使用第二平台的私钥p2_node_key和所接收的第一平台p1的公钥p1_node_id生成一个相应的共享私钥token,根据ECDH算法的加密学技术可知双方两次的共享私钥token是一样的,同样使用第一平台的随机数p1_nonce和共享私钥token进行异或得到一个待签名信息unsigned,用待签名信息unsigned和签名信息signature可以导出第一平台p1的随机公钥p1_puk。第二平台p2生成第二平台的随机私钥p2_prk和随机数p2_nonce,然后将第二平台的随机公钥p2_puk和随机数p2_nonce、以及websocket连接信息封装成鉴权应答信息respAuthMsg。
S6,第二平台p2通过http请求第一平台的节点连接申请接口p1_url2接收鉴权应答信息respAuthMsg。此时第一平台和第二平台双方都可以用自己的随机私钥p_prk和对方的随机公钥p_puk获取共享密钥。第一平台p1获取到websocket连接信息后将发起与第二平台p2的websocket连接,第一平台p1与第二平台p2达成一种p2p组网连接状态。
接口加密授权优选方案:
图1所示,S7,第一平台与第二平台组网成功后,在第一平台p1上进行服务的授权,加入节点授权的功能。选择要授权的接口服务授权给第二平台p2,获取两个平台节点之间共享密钥作为秘钥,将接口服务的数据进行AES加密得到第一加密字符串enCodeResult1,最终形成第一json数据,以websocket消息推送形式进行发送,并将分享数据写入数据库mysql,且以第二平台节点标记p2_node_id和服务标记service_id的组合(p2_node_id+”_”+service_id)作为标签key存储在redis缓存中。第二平台p2接收到数据后用共享密钥进行解密,解密成功后将解密数据存储在本地数据库mysql中,若解密失败则该访问数据有可能是恶意代码访问,不进行写入操作。
S8,第二平台p2获取到第一平台p1的共享服务数据后,第二平台p2前端可以在浏览器进行服务接口调用。
S9,第二平台p2后端接收到前端接收到的第一平台共享服务数据请求后,将该共享服务数据封装成参数数据param,最终调用时将使用共享密钥对该参数据param进行AES加密得到第二加密字符串enCodeResult2,最终形成第二json数据作为参数,以http协议请求的方式对第一平台p1(每条服务中的service_url)的接口进行访问。
S10,第一平台p1接收到请求信息后使用共享密钥进行AES解密,如果解密失败则向第二平台返回错误指令,如果解密成功则进行接口服务权限的校验。采用获取的第二平台节点标记p2_node_id和服务标记service_id的组合(p2_node_id+”_”+service_id)是否在redis存储中存在作为判据进行判断,如果其存在则判断第二平台有权限进而进行数据的接口调用,然后使用共享密钥作为秘钥对接口的返回数据进行AES的加密返回给第二平台p2后端,第二平台p2后端得到数据后用共享密钥进行解密,展示给前端。
第二平台p2后端接收到前端请求后,进行参数数据封装形成param,最终调用时将使用共享密钥对参数数据param进行AES加密得到第二加密字符串enCodeResult2,最终形成第二json数据(如:{"p2_node_id":"p2_node_id","data":enCodeResult2})作为参数,以http协议请求的方式访问第一平台p1(每条服务中的service_url)接口。
实施例
本发明处理流程:
首先每个平台设置一个作为接收节点的接口url1接收http协议的连接申请,再设置另一个接收节点作为接收审批结果的接口url2,接口可以使用oauth2安全认证、ip白名单等限制,防止恶意调用。平台之间通过申请连接请求,对方审核通过的机制进行节点连接,其中将可以每个服务平台看成是一个节点,每个节点存在唯一标识node_id相当于本节点的一个公钥。节点之间通过http协议通过网络交互并能够进行连接申请,经过加密通信协商产生共享密钥,实现基于websocket的p2p通信模式,每个节点既可作为服务端也可作为客户端,即能够提供服务也可以调用服务。平台之间连接成功后,将本平台的接口服务进行数据加密授权给连接节点。采用mysql数据库持久化存储服务的授权信息以及利用redis存储进行授权信息的缓存。经过websocket消息推送的形式,数据AES加密发送,对方收到加密授权数据后即可使用共享密钥解密得到接口服务信息。服务授权成功后,对方基于http的数据请求方式,采用AES加密传参对接口服务进行调用,数据也会以AES加密返回给调用方,然后使用共享密钥解进行解密。详见附件图1。
通信组网建设方案参见图2:
步骤1所示,第一平台p1在浏览器前端输入所要申请连接的对方平台(第二平台)p2的公钥p2_node_id以及第二平台p2的节点连接申请,这些消息经过连接申请接收接口p1_url1送到第一平台p1后端。
步骤2所示,第一平台p1后台模仿RLPX加密通信协议加密握手过程,基于ECDH(A私钥,B公钥)==ECDH(B私钥,A公钥)算法的加密学技术。第一平台p1后端将产生一个随机的公钥p1_puk、秘钥p1_prk对和一个随机数p1_nonce。使用自己的私钥p1_node_key和对方的公钥p2_node_id生成一个静态的共享私钥token,再将随机数p1_nonce和共享私钥token进行异或得到一个待签名信息unsigned,然后再使用第一平台p1的随机私钥p1_prk对待签名信息unsigned进行签名得到签名信息signature,第一平台p1就可以将随机数p1_nonce、签名信息signature、第一平台公钥p1_node_id、p1_url2(接收审核结果的接口)打包成鉴权请求信息authMsg。
步骤3所示,第一平台p1后端将鉴权请求信息authMsg通过http协议将请求经过第二平台的节点连接申请接口p2_url1发送给第二平台p2后端。
步骤4所示,第二平台p2服务端收到信息后将请求申请的数据写入到数据库mysql,用户在前端进行审核。若拒绝就不往下进行数据交互。
步骤5所示,若同意,从mysql数据库中取出数据,第二平台p2使用自己的私钥p2_node_key和接收的第一平台p1公钥p1_node_id生成一个相应的私钥token,根据ECDH算法的加密学技术,可知第一、第二平台双方两次的私钥token是一样的,同样使用随机数p1_nonce和共享私钥token进行异或得到一个待签名信息unsigned,用该待签名信息unsigned和签名信息signature可以导出第一平台p1的随机公钥p1_puk。第二平台p2生成自己的随机私钥p2_prk和随机数p2_nonce,然后将第二平台的随机公钥p2_puk和随机数p2_nonce、以及websocket连接信息封装成鉴权应答信息respAuthMsg。
步骤6所示,第二平台p2后端将该鉴权应答信息respAuthMsg通过http协议请求通过第一平台的节点连接申请接口p1_url2发送给第一平台p1。此时双方都可以用自己的随机密钥p_prk和对方的随机公钥p_puk获取共享密钥。第一平台p1获取到websocket连接信息后将发起与第二平台p2的websocket连接,第一、第二平台达成一种p2p组网连接状态。
接口加密授权建设方案参加图2
步骤7所示,双方平台组网成功后,在第一平台p1上进行服务的授权,加入节点授权的功能。选择要授权的接口服务授权给第二平台p2,获取两个平台节点之间共享密钥作为秘钥,将接口服务的数据(如:[{"service_url":"http://xxxx/xx","method":"post","service_id":"serviceid","params":["param1_key":"param1_name","param2_key":"param2_name"]}])进行AES加密得到第一加密字符串enCodeResult1,最终形成第一json数据(如:{"p1_node_id":"p1_node_id","data":enCodeResult1}),以websocket消息推送形式进行发送,并将分享数据写入mysql数据库,且以p2_node_id+”_”+service_id为关键词key写入redis缓存中。第二平台p2接收到数据后用共享密钥进行解密,解密成功进行数据本地mysql数据库存储,若失败则该访问请求可能是恶意代码访问,不进行写入操作。
接口加密调用建设方案参见图2
步骤8所示,获取到第一平台p1的共享服务数据后,第二平台p2前端可以在浏览器进行服务接口调用。
步骤9所示,第二平台p2后端接收到前端请求后,进行参数数据param封装,最终调用时将使用共享密钥对参数数据param(如:{"service_id":"serviceid","params":["param1_key":"param1_value","param2_key":"param2_value"]})进行AES加密得到第二加密enCodeResult2字符串,最终形成json数据(如:{"p2_node_id":"p2_node_id","data":enCodeResult2})作为参数,以http请求的方式进行第一平台p1(每条服务中的service_url)接口访问。
步骤10所示,第一平台p1接收到请求信息后使用共享密钥进行AES解密,解密失败返回错误指令,解密成功后进行接口服务权限的校验。对获取p2_node_id+”_”+service_id是否在redis存储中存在进行判断,如果存在则判断有权限然后进行数据的接口调用,然后使用共享密钥作为秘钥对接口的返回数据进行AES的加密,再返回给第二平台p2后端,第二平台p2后端得到数据后用共享密钥进行解密,展示给第二平台前端。
第二平台p2后端接收到前端请求后,进行参数数据param封装,最终调用时将使用共享密钥对参数数据param(如:{"service_id":"serviceid","params":["param1_key":"param1_value","param2_key":"param2_value"]})进行AES加密得到第二加密字符串enCodeResult2,最终形成第二json数据(如:{"p2_node_id":"p2_node_id","data":enCodeResult2})作为参数,以http请求的方式对第一平台p1(每条服务中的service_url)的接口进行访问。
以上所述仅是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员,在不脱离本发明方法的前提下,还可以做出若干改进和补充,这些改进和补充也应视为本发明的保护范围。
本文发布于:2023-04-15 00:09:17,感谢您对本站的认可!
本文链接:https://patent.en369.cn/patent/4/86798.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |