基于SOAP安全的Web Service设计

时间:2022-09-27 05:10:41

基于SOAP安全的Web Service设计

摘要:该文阐述了Web Services 基础和SOAP规范,分析了Web Services的安全问题,基于WS-Security实现SOAP签名和加密,保证了Web服务中数据交换安全,确保消息的机密性、完整性和不可否认性。提出采用安全的方式处理SOAP安全,使安全与业务处理分开,对用户和开发者透明,易于集成和维护。

关键词:Web Services;SOAP;签名;加密;

中图分类号:TP393文献标识码:A文章编号:1009-3044(2011)28-6850-03

大多数应用系统需要在不同组织机构的异构平台间完成数据收集、传递和处理。面向服务的架构是现代应用系统的基础, Web Services作为面向服务的核心,具有跨平台、松耦合、与实现语言无关等特点,是一种分布式模型技术,被广泛应用于现代应用系统中,不同组织采用Web Services技术对外提供服务。这样,应用系统的安全边界由Intranet扩大到Internet,给各组织机构平台的安全性和消息传递的安全带来了挑战。

1 Web Services基础和SOAP规范

1.1 Web Services基础

Web Services是一组通过标准的Web协议可编程访问的Web组件。其涉及的相关技术主要包括可扩展标记语言XML,简单对象访问协议SOAP,Web服务描述语言WSDL,通用描述、发现与集成UDDI。其中XML是Web Services平台中表示数据的基本格式;SOAP是轻量级的协议,它通过XML文档形式发送和接收消息实现异构平台上的不同系统的相互通信和共享数据;WSDL用来描述Web Services所完成的功能和Web Services所提供的服务;UDDI用来注册、已建立的Web Services [1]。

一个典型的Web Services调用和返回的消息传递模型如图1[2],服务提供方对外提供接口,隐藏内部实现,服务请求方通过调用接口请求Web Services 服务。

Web Services中的消息基于XML格式,以SOAP协议封装,可以通过任意支持字节流的协议传送,而由于HTTP协议的通用性,目前大多都将SOAP与HTTP绑定。

1.2 SOAP 规范[3-4]

简单对象访问协议(SOAP,全称Simple Object Access Protocol)是一种标准化的通讯规范,以XML形式提供了一个简单、轻量的用于在分散或分布环境中交换结构化和类型信息的机制。SOAP消息分为四部分:

1)SOAP信封(Envelope):定义了一个SOAP消息表示框架,包括消息头Header和消息体Body,消息头中定义消息发送和接收者信息以及附加的特性,消息体中包含发送的数据信息。

2)SOAP编码规则:定义了一组数据序列化的编码规则,定义数据类型。

3)SOAP RPC:表示远程过程调用和响应的约定。 在SOAP RPC请求和相应中,方法调用被串行化为SOAP编码规则定义的,基于XML的数据类型。

4)SOAP 绑定:定义SOAP在传输过程中使用特定底层通信协议的约定。

Web Services使用SOAP进行消息传递,是将每个远程请求串行化为基于XML数据类型,把请求数据和应答数据序列化,附加上消息发送和请求者等信息,以HTTP等协议为底层传输协议。

2 Web Services安全

2.1 Web Services安全问题

Web Services的数据交换是在异构平台间进行,需要跨越不同平台的网络安全边界,在互联网上进行消息传送,易受到数据截取、篡改、非授权访问等威胁。所以,安全问题一直是Web Services亟需解决的,Web Services安全必须是覆盖消息传输的所有的协议层,不能仅考虑孤立的单个协议层。消息传递的安全主要包括四个方面:机密性、完整性、不可抵赖以及授权访问。

Web Services服务提供方一般使用边界防火墙处理Web Services的消息验证,对访问接口的数据包源地址进行验证,但数据包的源地址是易于伪装,而且由于Web Services在传输层采用HTTP作为传输协议,其内容大多数的防火墙并不检查或者过滤,防火墙的有效性大大降低。

消息传输层一般采用SSL来对HTTP进行加密,但是通过SSL只能是实现点对点的安全,端对端的安全无法保证[5]。 SOAP是轻量级的基于XML 的协议,本身并不处理安全,并且由于SOAP协议的独立性设计,使得本协议层的安全不能依赖已有的安全协议,例如SSL、TLS、SHTTP和S-MIME。

但是由于SOAP协议采用XML格式,支持模块化的扩展,所以可以对在SOAP消息框架中定义安全标签,对SOAP头进行扩展,将安全信息放在SOAP报头中[6]。

2.2 WS-Security[5]

WS-Security提供了如何将安全令牌证书(security tokens)与SOAP消息关联起来的通用机制,定义了如何利用XMLEncryption 和XML Signature 对SOAP进行加密和签名。WS-Security主要描述以下三种机制,通过其实现消息传输安全的不同方面:

1)通过对SOAP 签名实现完整性要求和不可抵赖性。

2)通过对SOAP加密实现机密性要求。

3)采用安全令牌确认发送者身份,只有授权用户才能进行调用Web Services服务。

WS-Security支持多种安全令牌,包括用户名安全令牌、x.509证书、Kerberos票据等,对SOAP Header进行语法细节定义,规定在SOAP Header中使用定义安全要素,包括安全令牌和签名,在SOAP Body中对数据加密。相比消息传输层的安全,WS-Security更易扩展,而且实现了端到端的安全。

3 安全SOAP实现

以典型的购物网站为例,在用户购买商品时,需要输入用户名和信用卡相关信息,购物网站在向发卡行请求扣款时,调用发卡行的Web Services。这样通过HTTP发送的SOAP消息中包括:

< Header>

< Body>

< requestPayment>

< ID>13423

4392122109980678

< expire>05/16< expire>

… … … …

信用卡信息以明文方式在网络上传送。一旦含有这些敏感信息的SOAP包被截获,信息很可能被篡改或泄漏。

根据WS-Security规范,对SOAP 信封封装的全文或敏感部分的数据进行签名和加密,也可以只进行签名或者只进行加密。消息接收者通过验证签名来检验消息的完整性和发送者的真实性,而经过加密的消息,只有被授权用户才能解密,保证消息的机密性。

经过签名和加密的消息传送处理如图2。

图中所示,消息发送者对原始SOAP包中进行签名和加密后,将安全SOAP消息经过互联网发送,接收者对安全SOAP消息进行解密并验证签名后,再进行业务处理。

本文使用常用的x.509标准的证书实现SOAP安全,在SOAP Header中下,加入以下安全令牌信息:

xmlns:wsse="/ws/2002/04/secext"

Id="myCert"

ValueType ="wsse:X509v3"

EncodingType="wsse:Base64Binary">

MIIEZzCCA … …

3.1 签名与验证

本例签名中是用x.509标准的证书,消息发送者首先取得用户证书,使用证书中的私钥,采用特定的散列算法和签名算法,对SOAP Body 中敏感数据进行签名。然后将签名信息,包括签名数reference,签名结果,密钥信息,散列和签名算法等写入SOAP Header,绑定底层协议如HTTP,通过网络传输

一个典型的SOAP签名在Header中下加入节点为:

()

接受方收到消息后,分为两步验证:首先,检查摘要值的有效性,从DigestMethod中获得摘要算法,根据Reference URI中的标识在Body中找到签名数据,算出摘要值,将算出得摘要值与下的比较是否一致。若两者一致,提取KeyInfo中的公钥信息,并从中提取签名算法,将中的值解密后,与摘要值进行比较,验证消息的完整性。

3.2 加密与解密

对SOAP进行加密时,首先从接收方的x.509证书中获得加密的公钥,再用随机或秘密产生的会话密钥对SOAP消息中敏感数据采用对称加密算法加密,而对会话密钥采用非对称加密算法。将加密后数据和密钥信息写入SOAP Body中。

一个典型的SOAP经加密后Body中含以下节点

接收方收到SOAP消息后,根据自己的私钥和消息中的解密得到会话密钥,再根据会话密钥解密中的消息数据。

消息加密后,以密文形式在网络上传送,即使被拦截,非授权用户也不能解密消息,保证了消息的机密性。

3.3 SOAP安全包结构

在对SOAP消息的签名和加密后,SOAP依然符合XML的格式规范,所有签名和加密的信息都在XML SOAP中以节点元素的方式显示,经过签名和加密的SOAP消息结构图如图3。

Security中包括安全令牌和签名信息等信息,写入SOAP报头中,加密数据在SOAP Body中。Reference 中ID属性值与 Encrypted Data中的ID关联,表示Signature是对该部分数据进行的签名。

4 SOAP安全

按照WS-Security规范,通过对XML SOAP进行签名和加密,增强了Web Services的安全,使SOAP消息具有机密性、完整性和不可抵赖性。Web服务请求者,即消息发送方要在原始SOAP包中增加安全信息,需要修改SOAP消息内容,然后通过互联网发送消息。这样,用来生成SOAP 内容的应用也需要修改,破坏了软件工程中功能内聚原则,增加了开发人员的研发和代码维护工作。

Web 服务安全的理想解决方案是对用户以及Web业务隐藏安全细节,不需要用户进行额外设置,也不需要修改Web业务的代码。在增强系统安全性时,尽可能不改变单个Web Service请求和服务的业务代码,使系统更易扩展和维护[8]。

为此,可以采用专门的安全服务器在系统内部处理SOAP的安全,即SOAP安全。SOAP安全负责SOAP包的安全方面的工作,包括对由内向外的SOAP消息进行签名和加密,以及由外向内的SOAP包进行验证和解密。安全验证与Web应用分开,这样的方式减轻了应用服务器的开销,仅专注于业务处理,使得Web服务更具扩展性,安全对业务透明。对已有系统,使用安全,不会额外增加用户和开发人员的工作量。

使用安全的SOAP传输模型如图四,消息发送方生成SOAP消息,传送给SOAP安全,SOAP安全中有一个敏感数据表,保存所有敏感数据标签,例如 表示身份证号、代表信用卡号。安全分析消息发送方传来的SOAP,对含敏感数据标签的数据项签名并加密,封装成安全SOAP包。安全SOAP包通过互联网传给Web Services 服务方,而服务方的SOAP安全接收到SOAP后,在SOAP安全上先进行解密和验证,若验证通过,则解析成其中SOAP数据,给Web Services服务器,否则丢弃SOAP包。这种方式保证了跨越不同安全边界,在互联网上传递的SOAP包是经过签名和加密的。

5 结束语

Web Services安全是目前跨平台应用系统面临的重要安全问题之一,而SOAP作为Web Services数据交换和消息传递的基础,其安全独立底层传输协议。根据WS-Security规范,可以对SOAP 进行扩展,实现SOAP数据的签名和加密,保证了SOAP消息的机密性、完整性、不可抵赖性以及授权访问。采用采用插件式安全的方式处理SOAP安全问题,将业务处理与安全分开,对用户和开发人员透明,易于集成和维护,并且安全还可以重用。

参考文献:

[1] 周劲,刘洋,蔺永政.一种基于Web Service的分布式应用系统的设计[J].计算机应用研究,2007(2).

[2] Web service[EB/OL]./wiki/Web_service.

[3] 师群群,刘晓霞,李艾功.Web Services中SOAP安全性的研究与实现[J].微计算机信息,2008(30):58-59.

[4] 张仙伟,张Z.Web服务的核心技术之一――SOAP协议[J].电子科技,2010,23(3).

[5] WS-Security[EB/OL]./wiki/WS-Security.

[6] 曹刚,李亚伟.基于XML Web Service身份认证的研究与实现[J].微电子学与计算机,2006,23(8).

[7] 景建笃,游晓黔. 安全Web Services 体系结构的研究[J].计算机工程与设计,2007,28(5).

[8] Melzer I,Jeckle M.A Signing Proxy for Web Services Security[EB/OL].2003.www.jeckle.de/files/signingProxy.pdf.

[9] Bhargavan K.Verifying Policy-Based Web Services Security[C].the 11th ACM Conference on Computer and Communications Security:268-277.

[10] 王军,李菊.基于XML文档结构模型加密方法的研究[J].微计算机信息,2008,24(4).

上一篇:浅谈网络数据库的安全性 下一篇:哈柯双语语料库加工系统词对齐技术的研究