接口安全调用该怎么做?签名?证书?服务安全?

标签: 接口 安全 签名 | 发表时间:2016-01-11 17:19 | 作者:xls9577087
出处:http://www.iteye.com
在这个以“数据为生命”的时代,每一个开发商都尽可能的收集客户的数据建立自己的BI库,各系统、各平台间数据的传输和调用变得非常普遍且非常重要;那么作为开发人员,我们不但要防止系统被攻击被入侵,我们还要确保数据的安全和完整。

在内网传输和外网传输的数据对安全的要求一般是不同的,因为内网数据的传输得到了网络防火墙的保护,起到了隔绝外部攻击的作用,但也并非一定安全;相比之下,对外部开放的接口则需要做的更多更好。我们简单通过四种方式介绍下常见的调用鉴权方式:

一、普通的参数验证(内网系统常用)

2.1 简单参数验证

通过ws接口方法中的参数,验证用于鉴权的参数的值是否正确,起到简单验证作用。如:

public int GetNumberStatus(String Number,String sysPssword) {}

这种接口方法可以说没有任何防御性,通过简单的抓包就可以得到参数中的password,进而篡改等等。

2.2 请求对象中加帐号密码

在请求参数较多的情况下,我们会选择把参数封装成一个对象,其中需要验证的部分作为对象的头信息,数据本身作为对象体。这种方式其实也是没有太大的防御作用,不过我们通过头信息的方式可以对接口进行权限控制。如:

public Msgreqheader getMsgreqheader(){
   Msgreqheader header = new Msgreqheader();
   header.setOperidString( "admin" );
   header.setChannelidString ("chananl1" );
   return header;
}
通过soap方式请求报文如:

<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

注:因为md5加密是不可逆的,在服务端取到参数后按同样的规则进行匹配,起到了鉴权及数据完整性的作用。(HTTP协议没有对传输的数据大小进行限制,HTTP协议规范也没有对URL长度进行限制。GET方式:特定浏览器和服务器对URL长度有限制,例如IE对URL长度的限制是2083字节(2K+35)。因此对于GET提交时,传输数据就会受到URL长度的限制。)

3.2 对象签名

为了加深印象,可以互联网上用图文描述签名的文章来帮助理解, 原文地址

当我们如通过ws进行较大数据的传输时,如一篇文章,一个长达1w个号码的号码集。同样可以通过签名的方式确保数据的完整性。简单地说:
(1)
1、对数据本身使用Hash函数生成摘要(digest),再通过上述讲到的私钥进行“数字签名”生成。

(2)
2、将该数字签名作为对象的属性传输到服务端。

(3)
3、服务端取得数据,对数据使用Hash函数得到摘要A,并将客户端请求的数字签名进行解密得到摘要B。

4、对比摘要A及摘要B,如果两者一致,则可以确保该数据未被篡改。

总结:这种方式的调用一般应用于重要数据的传输,如:淘宝与商家的支付接口、一些兑换平台的兑换接口等等都采用签名。

四、数字认证(digital certificate)

已有 0 人发表留言,猛击->> 这里<<-参与讨论


ITeye推荐



相关 [接口 安全 签名] 推荐:

接口安全调用该怎么做?签名?证书?服务安全?

- - 企业架构 - ITeye博客
在这个以“数据为生命”的时代,每一个开发商都尽可能的收集客户的数据建立自己的BI库,各系统、各平台间数据的传输和调用变得非常普遍且非常重要;那么作为开发人员,我们不但要防止系统被攻击被入侵,我们还要确保数据的安全和完整. 在内网传输和外网传输的数据对安全的要求一般是不同的,因为内网数据的传输得到了网络防火墙的保护,起到了隔绝外部攻击的作用,但也并非一定安全;相比之下,对外部开放的接口则需要做的更多更好.

API 接口应该如何设计?如何保证安全?如何签名?如何防重?

- - DockOne.io
说明:在实际的业务中,难免会跟第三方系统进行数据的交互与传递,那么如何保证数据在传输过程中的安全呢(防窃取). 除了https的协议之外,能不能加上通用的一套算法以及规范来保证传输的安全性呢. 下面我们就来讨论下常用的一些API设计的安全方法,可能不一定是最好的,有更牛逼的实现方式,但是这篇是我自己的经验分享.

如何设计一个安全的对外接口 - ksfzhaohui的个人页面 - OSCHINA

- -
最近有个项目需要对外提供一个接口,提供公网域名进行访问,而且接口和交易订单有关,所以安全性很重要;这里整理了一下常用的一些安全措施以及具体如何去实现. 个人觉得安全措施大体来看主要在两个方面,一方面就是如何保证数据在传输过程中的安全性,另一个方面是数据已经到达服务器端,服务器端如何识别数据,如何不被攻击;下面具体看看都有哪些安全措施.

架构师之路-如何构建rest接口的安全性访问(dubbox+oatuh2+rest)

- - 企业架构 - ITeye博客
建立oauth2认证需要的数据库及数据表结构. >>前提:  使用Maven来管理项目; spring-security-oauth的版本号为 2.0.10.RELEASE. 添加Maven dependencies; 以下只列出了主要的. web.xml配置; 这一步与只使用Spring Security的配置一样..

MSN签名精选

- 翔 - 河蟹娱乐
  抛出去的砖头,不一定能引出玉,倒很可能砸到人.   诺言,誓言,谎言,花言,不过是在敷衍而已.   爱人是路,朋友是树,人生有一条路,一条路上有许多树,有钱的时候别迷路,缺钱的时候靠靠树,幸福的时候莫忘路,休息的时候浇浇树.   有人对我说,下辈子,你早点来.   再简单的产品只要你把品质做上去,就是精品.

内涵签名图

- Ryan - 乐淘吧
欢迎使用google reader订阅本博客:http://feeds.feedburner.com/blogspot/CRBRG. 免费杀毒软件大集合总有你喜欢的:http://xun6.com/folder/c4d4414/1/%E6%9D%80%E8%BD%AF.html. about AVparty @AVPARTY's blog | RSS订阅AVparty | Twitter|.

签名与证书

- - Lizhi Blog
TCP:通过三次握手,四次挥手,保证连接的可靠性;. SSL(安全套接层)&TLS(传输层安全):在传输层对网络连接进行加密;通过Client生成的随机数R1,R3 + Server生成的随机数R2 根据算法生成对称秘钥;. SSL双向握手:Server端请求Client发送证书和公钥,Client发送私钥加密后的Hash信息,Server用公钥验证.

iOS 免费接口

- - ITeye博客
京东获取单个商品价格接口:. http://p.3.cn/prices/mgets?skuIds=J_商品ID&type=1. ps:商品ID这么获取:http://item.jd.com/954086.html. http://www.kuaidi100.com/query?type=快递公司代号&postid=快递单号.

数字签名是什么?

- ArBing - 阮一峰的网络日志
它用图片通俗易懂地解释了,"数字签名"(digital signature)和"数字证书"(digital certificate)到底是什么. 我对这些问题的理解,一直是模模糊糊的,很多细节搞不清楚. 读完这篇文章后,发现思路一下子就理清了. 为了加深记忆,我把文字和图片都翻译出来了. 文中涉及的密码学基本知识,可以参见我以前的笔记.