互联网中接口安全解决方案

Http接口安全概述

  1、Http接口是互联网各系统之间对接的重要方式之一;

使用http接口,开发和调用都很方便,也是被大量采用的方式,它可以让不同系统之间实现数据的交换和共享,但由于http接口开放在互联网上,那么我们就需要有一定的安全措施来保证不能是随随便便就可以调用;

  2、目前国内互联网公司主要采用两种做法实现接口的安全;

一种是以支付宝等支付公司为代表的私钥公钥签名验证机制,一种是大量互联网企业都常采用的参数签名验证机制;

接口的安全也是在实践中总结出来的,并经历了几个过程:

1.完全开放的接口(完全开放)

2.接口参数签名(基本安全)

  什么是参数签名?

参数签名就是指将请求的所有参数,按照某种签名算法生成一个签名串,在请求的时候带上这个签名串一起请求接口;

  接口参数签名步骤如下:

第1步: 将所有参数(除去sign本身),按参数名字母升序排序;

第2步: 然后把排序后的参数按:参数1=值1&参数2=值2…&参数n=值n(这里的参数和值都是是传输参数的原始值,不是经过处理的)的方式拼接成一个字符串;

第3步: 把分配给接入方的验证密钥key拼接在第2步得到的字符串后面;

第4步: 计算第3步字符串的md5值,使用md5值的16进制字符串作为最终sign的的值;

举例说明:

比如传输的数据是:

http://www.xxx.com/interface?idCard=110819000000000000&phone=13700000000&bankCard=6232898709123216&sign=sign_value

其中sign参数对应的sign_value就是签名的值;

第一步,拼接字符串,首先去除sign参数本身,剩下的为:

idCard=110819000000000000&realName=张三&phone=13700000000&bankCard=6232898709123216

然后按参数名字符升序排序:

bankCard=6232898709123216&idCard=110819000000000000&phone=13700000000&realName=张三

第二步,然后做参数名和值的拼接,最后得到:bankCard=6232898709123216&idCard=110819000000000000&phone=13700000000&realName=张三

第三步,在上面拼接得到的字符串前加上验证密钥key,我们假设是abcdefg,得到新的字符串:

bankCard=6232898709123216&idCard=110819000000000000&phone=13700000000&realName=张三&key=abcdefg

第四步,然后将这个字符串进行md5十六进制计算,假设得到的是opqrst,该值即为sign签名值;

   3.接口参数签名+时效性验证(更加安全)

该种机制与上一种机制一样;

只是在参数中新增一个时间戳,接口方验证时间戳是否在允许的时间范围内;

   4.接口参数私钥签名公钥验签(固若金汤)

这是一种更为安全的方式,它通过私钥和公钥实现接口的安全,目前互联网中主要是以支付宝为代表的公司采用这种机制;(有很多开放平台也是采用这种机制)

这种签名方式通过4把密钥来实现;

客户端应用私钥

客户端应用公钥

服务端应用私钥

服务端应用公钥

   5.接口参数签名+Https(金钟罩)

该方式是在第2或3种方式的基础上添加https,https需要在服务器上进行配置;

   6.接口参数私钥签名公钥验签+Https(金钟罩)

该方式是在第4种方式的基础上添加https,https需要在服务器上进行配置即可;

当然:安全是相对的,只有相对的安全,没有绝对的安全!

posted on 2019-03-04 09:38  跳动的汗水  阅读(432)  评论(0编辑  收藏  举报

导航