`

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

阅读更多

在这个以“数据为生命”的时代,每一个开发商都尽可能的收集客户的数据建立自己的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) 

 

转自:iteye.com

分享到:
评论

相关推荐

    CA证书接口用法

    CA证书接口用法是指在软件应用系统中使用数字证书来实现身份认证、数字签名和数据加密等安全功能的接口使用方法。 CA证书接口用法主要包括证书应用接口的介绍、集成目标、集成内容、证书应用接口部署、应用系统集成...

    swift-iOS使用AFN对自签名证书进行验证的封装

    在WWDC 2016开发者大会上,苹果宣布了一个最后期限:到2017年1月1日 App Store中的所有应用都必须启用 App Transport Security安全功能。App Transport Security(ATS)是苹果在iOS 9中引入的一项隐私保护功能,屏蔽...

    api验证接口参数加密+时效性验证+私钥+Https

    接口参数加密是指在传输接口调用时,对请求参数进行加密,以防止数据在传输过程中被窃取或篡改。常见的加密算法有AES(高级加密标准)、RSA(公钥加密技术)和HMAC(哈希消息认证码)。通过加密,即使数据在网络中被...

    支付宝支付接口demo和API完整

    4. **证书文件**:支付宝要求商家在调用接口时提供安全证书,以确保通信过程的安全性。这些证书文件可能包含在压缩包中,需要正确配置到你的应用程序中。 5. **配置文件**:可能包含商户ID、商户私钥、支付宝公钥等...

    微信支付APP支付安卓+PHP(二次签名在服务端)

    在请求支付接口时,SDK会自动进行二次签名,确保交易请求的安全。 PHP服务端的角色是生成一次签名和处理微信支付的回调。你需要使用微信支付提供的API工具包,配置好商户秘钥和证书,然后根据交易信息生成签名。...

    证书系统Java实现

    然而,Java实现的FTP服务器部分与上述证书系统虽然不在同一个主题下,但也是IT领域中的一个重要知识点,因此这里也做一些简要介绍。 FTP(File Transfer Protocol)是互联网上用于文件传输的标准协议。通过FTP...

    mbedtls RSA PSS加密验签.pdf

    标签“RSA PSS 验签”的含义是该文档主要关注于RSA算法结合PSS签名方案在签名验证上的应用。标签的设定有助于快速定位文档的主题内容。 关于提供的部分内容,我们可以看到一些文件名和关键字,例如“mbedtlsRSAPSS...

    将U盘做成UKey

    综上所述,将U盘做成UKey涉及到多个技术和概念,包括Java文件操作、USB通信接口、加密与签名技术、浏览器插件开发以及安全性管理。通过合理的设计和实现,我们可以构建一个功能强大的安全UKey系统,使得U盘不仅能...

    华为 java 安全 编码 规范 安全篇 2.0

    #### 规则5.3:禁止基于不信任的数据源做安全检查 **要点**:确保安全检查依据的数据源是可信的。 **解释**:基于不可信的数据源进行安全检查可能导致检查结果不可靠。 **实施策略**: - **数据源验证**:验证数据...

    易语言-语言调用P12证书请求微信支付例子

    因为本身是做公众号的,前不久开通了微信...相应的SIGN签名包括P12证书使用鱼刺模块加载.已包含在附件 如果是其他版本鱼刺模块记得把_hRequest方法设置为公开 零钱和红包都是百分计算,零钱最少30 三毛,,红包100起,一块

    WCF练习及文档

    1. **定义服务合同**: 使用接口定义服务操作,然后实现该接口。 2. **配置服务**: 在配置文件(通常是 `app.config` 或 `web.config`)中指定服务元数据、绑定和终结点。 3. **实现服务**: 创建服务类,实现服务...

    java支持https的Post请求

    然而,在某些开发或测试环境中,可能需要绕过证书校验,例如在自签名证书的本地服务器上。Java提供了一种机制,通过自定义`SSLContext`来实现这一目的。以下是一个实例代码,展示了如何创建一个不进行证书校验的`SSL...

    esp8266 发起https 请求

    - ESP8266可能会遇到自签名证书或者未信任的证书问题,此时需要禁用证书验证或手动添加服务器的自签名证书到设备的信任列表。 - 可以使用`setInsecure()`方法跳过证书验证,但这样做会降低安全性,只应在调试阶段...

    CertificateFactorySpi.rar_class

    在Java安全领域,`CertificateFactorySpi`类是`java.security.cert`包中的一个核心组成部分,它定义了`CertificateFactory`类的服务提供者接口(Service Provider Interface, SPI)。SPI是Java平台设计的一部分,...

    使用libcurl连接https服务器

    在实际开发中,可能还需要处理更复杂的情况,如重定向、超时、自签名证书等。libcurl库强大而灵活,提供了丰富的选项来满足各种需求。在进行HTTPS通信时,始终记住要确保数据安全,正确处理证书验证,避免中间人攻击...

    Java Webservice Axis2 Client(含soapheader验证)

    这将包含服务接口和服务代理实现,以及必要的数据类型。 ``` axis2-wsdl2java.sh -uri http://yourwebservice.com/YourService?wsdl -d adb ``` 3. **设置SOAP Header**:在调用Web服务之前,需要设置SOAP ...

    VC对话框显示Excel

    这可能涉及到权限管理、证书验证、代码签名等安全措施。同时,由于ActiveX控件可能存在安全隐患,因此需要合理配置控件的安全属性,限制不必要的功能,防止恶意代码的注入。 4. **调用Office接口**:在VC++中,我们...

    java版加php版微信支付宝支付

    调用SDK中的各种服务接口,如`alipay.trade.page.pay`(页面跳转支付)或`alipay.trade.app.pay`(APP支付),完成支付请求。 2. PHP版微信支付宝支付: - **微信支付**:PHP版本通常使用`EasyWeChat`库,这是一个...

    java做的文件加密程序

    在实际项目中,公钥可能需要通过安全的方式传递给接收方,这可能涉及到数字签名、证书等机制。此外,为了提高效率,通常会结合使用RSA和对称加密,如AES。先用RSA加密对称密钥,然后用此密钥加密大量数据,因为对称...

Global site tag (gtag.js) - Google Analytics