接口安全调用该怎么做?签名?证书?服务安全?
在这个以“数据为生命”的时代,每一个开发商都尽可能的收集客户的数据建立自己的BI库,各系统、各平台间数据的传输和调用变得非常普遍且非常重要;那么作为开发人员,我们不但要防止系统被攻击被入侵,我们还要确保数据的安全和完整。
在内网传输和外网传输的数据对安全的要求一般是不同的,因为内网数据的传输得到了网络防火墙的保护,起到了隔绝外部攻击的作用,但也并非一定安全;相比之下,对外部开放的接口则需要做的更多更好。我们简单通过四种方式介绍下常见的调用鉴权方式:
一、普通的参数验证(内网系统常用)
2.1 简单参数验证
通过ws接口方法中的参数,验证用于鉴权的参数的值是否正确,起到简单验证作用。如:
[php]public int GetNumberStatus(String Number,String sysPssword) {}[/php]
这种接口方法可以说没有任何防御性,通过简单的抓包就可以得到参数中的password,进而篡改等等。
2.2 请求对象中加帐号密码
在请求参数较多的情况下,我们会选择把参数封装成一个对象,其中需要验证的部分作为对象的头信息,数据本身作为对象体。这种方式其实也是没有太大的防御作用,不过我们通过头信息的方式可以对接口进行权限控制。如:
[php]
public Msgreqheader getMsgreqheader(){
Msgreqheader header = new Msgreqheader();
header.setOperidString( "admin" );
header.setChannelidString ("chananl1" );
return header;
}
[/php]
通过soap方式请求报文如:
[xml]
<messagereq>
<msgreqheader>
<operatorid>admin</operatorid>
<channelid>channel1</channelid>
</msgreqheader>
<msgbody>
<xxx></xxx>
</msgbody>
</messagereq>
[/xml]
二、ws-security UsernameToken表头验证
三、数字签名(digital signature)
以前对安全验证以及数字认证方面的知识一直觉得讳莫如深,在最近接触的一个项目中,涉及到了数字签名的使用,从一开始我兴致勃勃的以为终于可以搞数字认证了,接触了才发现,原来只是需要数字签名,并没有用到数字认证(相对比较麻烦),其实也蛮好理解和开发。
数字签名的使用,目前接触到的有两种方式,1、签名作为参数;2、全文签名
3.1 签名作为参数
在使用http或者soap传输数据的时候,签名作为其中一个参数,可以起到关键作用:1、鉴权(通过客户的密钥,服务端的密钥匹配);2、数据防篡改(参数是明文传输,将参数及密钥加密作为签名与服务器匹配);下面来分析下具体的方式:
将请求参数中的各个键值对按照key的字符串顺序升序排列(大小写敏感),把key和value拼成一串之后最后加上密钥,组成key1value1key2value2PRIVATEKEY的格式,转成utf-8编码的字节序列后计算md5,作为请求的签名。计算出来的签名串应当全为小写形式。如果某个参数的值为空,则此参数不参与签名。
下面举个例子。假设参数列表为:
a | 123 |
b | 帐号 |
c | 密码 |
假设密钥为:123456
则待签名的明文为:a123b帐号c密码123456
将明文按utf-8取字节序列,并计算md5为:332ce52ed0a9686cc32bdd0eb45de577
客户端调用的例子如:http://host:port/search?a=123&b=帐号&c=密码&&sign=332ce52ed0a9686cc32bdd0eb45de577
3.2 对象签名
为了加深印象,可以互联网上用图文描述签名的文章来帮助理解,原文地址
当我们如通过ws进行较大数据的传输时,如一篇文章,一个长达1w个号码的号码集。同样可以通过签名的方式确保数据的完整性。简单地说:
1、对数据本身使用Hash函数生成摘要(digest),再通过上述讲到的私钥进行“数字签名”生成。
2、将该数字签名作为对象的属性传输到服务端。
3、服务端取得数据,对数据使用Hash函数得到摘要A,并将客户端请求的数字签名进行解密得到摘要B。
4、对比摘要A及摘要B,如果两者一致,则可以确保该数据未被篡改。
总结:这种方式的调用一般应用于重要数据的传输,如:淘宝与商家的支付接口、一些兑换平台的兑换接口等等都采用签名。
四、数字认证(digital certificate)
作者:z1988
链接:https://www.z1988.com/571.html
文章版权归作者所有,未经允许请勿转载。