刘冬冬,朱俊杰,刘 凯,牛 磊,郭 博
(1.阜阳师范学院 计算机与信息工程学院,安徽 阜阳 236037;2.湖南大学 电气与信息工程学院,湖南 长沙 410082)
SOAP消息部分信息加密研究
刘冬冬1,朱俊杰2,刘 凯1,牛 磊1,郭 博1
(1.阜阳师范学院 计算机与信息工程学院,安徽 阜阳 236037;2.湖南大学 电气与信息工程学院,湖南 长沙 410082)
针对传统的Web服务安全保护技术方法已经不能满足Web服务的安全通信的需求的问题。本文在Web服务应用的安全需求基础上,提出了基于WSE 3.0的SOAP消息部分信息加密机制。当发送者传递SOAP消息经过中间接收者1和中间接收者2时,中间接收者会根据安全需求对所需要的信息进行处理,不需要处理SOAP消息中的全部信息。实验结果表明,该机制不仅提高了SOAP消息传输的效率,也保证了在传递SOAP消息过程中的安全性要求。
WSE;SOAP消息;Web安全
Web服务(Web Services)是构建在Internet之上,为企业应用提供了一个灵活的、松散耦合的分布式计算环境;它通过将业务逻辑功能封装成Internet的软件组建——服务,并发布该服务供其他用户使用,从而使得Web不仅成为信息共享的平台,而且成为服务共享的平台[1]。
Web服务这种分布式、异构的本质, 使得Web服务的安全变得很复杂[2]。Web 服务是基于运行在Internet各地的各种不同软件的互操作性,并且通过使用XML(可扩展标记语言)、SOAP(简单对象访问协议)、UDDI(统一发现、描述和目录)、WSDL(Web服务描述语言)以及其他协议和机制,可以通过Internet实现跨域且独立于平台的交互作用[3]。
为了实现“松散耦合的、跨平台的、与语言无关的”数据交换,Web服务是基于SOAP协议传输信息的,而SOAP是一种基于XML的技术,SOAP消息是用XML来编码的,支持在一个分散的、分布的环境中进行信息交换[4]。而SOAP作为轻量级协议在设计时没有考虑到任何安全相关的问题,因此说SOAP消息在传输的时候是基于XML明文形式传输的,存在信息丢失、被篡改、被窃听等安全风险[5]。所以,在消息传递过程中,确保SOAP消息的机密性和完整性,是Web服务安全的主要内容[6]。
本文是针对Web服务应用的安全需求,提出了基于WSE3.0的SOAP消息部分信息加密策略,提高了SOAP消息传输的效率,保证了在传递SOAP消息过程中的安全性要求。
由微软公司发布的WSE 3.0(Web服务安全性开发工具包3.0,Web Services Enhancements)是为了使开发者通过.NET创建出更强大,好用的Web Services;WSE 3.0是一个Web Services的.NET 类库,它采用了最新的Web Services协议并扩充了Visual Studio中的Web服务支持,简化开发问题,WSE的安全功能增强实现的是WS-Security规范[7]。
对.NET项目实现WS-*规范来说,WSE即可以看作软件开发工具包,也可以看作附加的数据处理框架[8]。从框架的角度来看,WSE基本上是一个对SOAP消息运用WS-*规范的工具。我们知道,WS-*规范给SOAP消息添加了不同的部分。WS-*规范基本都添加到SOAP头中,还有一些直接修改了SOAP消息主体(例如WS-Security规范)。WSE自动修改了SOAP消息来实现WS-规范,同时提供了一个框架来处理SOAP消息[9]。
WSE 3.0拥有三方面的安全机制[10]:
(1) 安全凭证:即端对端的身份认证。安全凭证放置在SOAP消息内。客户端的安全凭证都是从可信第三方获取。
(2) 完整性:即接收方检查在传递过程中SOAP消息是否被修改,具体做法是让接收方验证SOAP消息的数字签名。
(3) 保密性:即SOAP消息的加密,通过加密确保SOAP消息内容仅能由预定接收方查看。
2.1 框架组成
(1) 策略断言:每个策略均包含一个有序策略断言。策略断言就是在客户端与服务端之间进行SOAP消息交换时定义的若干需求与约束。
(2) 策略:是一个XML配置文件,通过该文件可以对请求和响应SOAP消息进行需求的公开声明。
(3) 筛选器:负责截取与处理进入和离开的SOAP消息,执行对Web服务的需求。一般处理发送与接收的SOAP消息头部。如下图1所示,设计四个筛选器,处理以下四个过程:客户端请求发送、服务端请求接收、服务端响应发送以及客户端响应接收。
图1 WSE 3.0筛选器结构示意图
(4) 管道:表示为筛选器集合。如果策略没有提供管道,则一个默认管道会被创建。如下图2所示,它是WSE 3.0管道策略架构,与图1相比较,它更具体的表示了Web服务端接收SOAP消息并且发送出去的过程中WSE的管道模型,图2更详细的说明了Web服务端使用WSE 3.0对接收和发送SOAP消息时筛选器的工作过程。
WSE 3.0的管道包括一个输入管道和一个输出管道。管道中包含了相应的策略和策略断言。进入的SOAP消息从输入管道中进入,依次通过管道中相应的断言筛选器,通过所有的断言筛选器后,SOAP消息进入了Web服务中,Web服务对SOAP消息进行相应的处理;当Web服务要把SOAP消息发送出去的时候,也需要经过输出管道输出SOAP消息。同时,输入管道和输出管道的断言安排层次是相同的,一一对应的关系。
图2 Web服务端管道策略架构
2.2 策略与断言的关系
在一个策略文件中,排放着多个有序的策略断言,这些策略断言的放置顺序决定着当一个SOAP进入系统的时候或者当一个系统对外要发送SOAP消息的时候,这个SOAP消息在断言中处理的顺序。策略文件和策略断言的关系如下图3所示,图示的策略文件中包含有N个策略断言,断言1最接近应用程序,因此应用程序所生成的SOAP消息会先被断言1处理,接下来断言2,断言3处理,由于最后的断言N的位置放置在最后,因此最接近于网络,所以SOAP消息在通过断言N的处理后就可以发送到网络上;反之,从网络上接收到一个SOAP消息时接收到的SOAP消息会先被断言N处理,接下来被断言N-1,断言N-2处理,最后通过断言1的处理,在断言1处理后到达应用程序中。
图3 策略文件与策略断言的关系
3.1 SOAP头的操作
创建Web服务后,为了在Web服务端实现对自定义SOAP标头的操作,首先需要创建两个文件CommonInfo.cs和VIPInfo.cs,在两个文件中分别创建类继承SoapHeader类,分别是CommonInfo类和VIPInfo类,其中需要对VIPInfo类中的属性的内容进行安全保护,而CommonInfo类中的信息则不需要进行保护。
如下简要定义:
class CommonInfo:SoapHeader
{
string Username;
string Address;
class CommonInfo() {}
}
class VIPInfo:SoapHeader
{
2012-10-04伦敦 通过高级侍酒师(Advanced Sommelier,简称AS)的考试,同样是首位获此殊荣的中国人。
string Account;
string Telphone;
string PinCode;
class VIPInfo {}
}
3.2 自定义的用户名令牌管理器
UsernameToken验证方式是最常见的方式,它是基于用户名密码的交互方式操作,其中的UsernameTokenManager类用于辅助完成服务器端对客户端提交过来的用户名密码进行验证功能。客户端用用户名、密码等信息创建UsernameToken对象,WSE通过Soap Header将相关信息传递给Web 服务端,Web 服务端接收到请求后,WSE可以从Soap Header中得到UsernameToken的相关信息并构造这个对象。使用UsernameToken进行安全保护的过程如图4所示:
图4 安全保护的过程
本文在这一个步骤中编写的ServiceUsername TokenManager,就是在Web 服务端根据用户名去获取用户密码,并将密码返回给WSE 3.0,WSE 3.0将验证这个密码与客户端提交的密码是否一致,来完成对客户端的认证。
3.3 自定义安全策略断言
图5 自定义头签名和加密流程
具体步骤为:
(1) 为客户端创建一个自定义策略断言类及对应的筛选器类。本次实验,需要在项目解决方案中新建类库ElementSecurityAssertionLibrary,其中包含为客户端创建一个文件ElementSecurityClient Assertion.cs,该文件包含自定义的策略断言类ElementSecurityClientAssertion,它继承Security PolicyAssertion,同时包含内部筛选器类ClientOutputFilter,它继承SendSecurityFilter类;其中SecurityPolicyAssertion类和SendSecurityFilter类都为微软WSE提供的基类。
(2) 在ElementSecurityClientAssertion类中构造四个筛选器,每个筛选器会执行在不同的消息交换阶段。其中,两个筛选器用来处理客户端消息的输入与输出,两个筛选器用来处理服务消息上的输入与输出。
(3) 在客户端的输出筛选器中,通过重写SecrueMessage方法确保来自于客户端的SOAP响应是安全的,这个方法实现了在SOAP头中增加令牌,并对SOAP消息签名和对SOAP Body加密。
(4) 在自定义的筛选器的构造器中,通过创建的安全令牌实现了SOAP响应的签名和加密。安全令牌userToken可以用来签名和加密SOAP消息,为了核实来自于Web服务的SOAP响应的安全需求,这个属性可以在后面的客户端自定义输出筛选器中访问。
(5) 根据元素名称以及命名空间值查找各个元素,从而在SOAP消息头中找到自定义的SOAP头元素后,为了以后的引用为加密的元素创建一个id值。在这里,我们将查找命名空间为http://company.com/ samples/wse/并且元素名为VIPInfo的元素,获得其id值后,对元素内容进行加密。
(6) 使用AddReference方法将加密信息data添加到消息头security区中。
同样,我们还需要为Web服务端完成是对从客户端传递过来的部分签名和加密的SOAP消息进行验证和解密。这需要为Web服务端创建一个自定义策略断言及相应的输入筛选器,具体步骤如下:
(1) 在类库ElementSecurityAssertionLibrary中创建一个ElementSecurityServiceAssertion.cs文件,里面的自定义安全策略断言类ElementSecurityServiceAssertion继承了SecurityPolicyAssertion类和相应的筛选器类ServiceInputFilter继承ReceiveSecurityFilter类。
(2) 在Web服务端的筛选器类ServiceInputFilter类中,重写ValidateMessageSecurity判断消息是否加密。
(3) 在CheckSignature方法中判断消息是否签名。
3.4 配置策略文件及应用
策略定义在策略文件中并命名,然后在Web服务端添加策略文件wse3policyCache.config,其中添加
如果WSE获得了策略在何处,只需要通过设置属性指定策略名(如[Policy("Policy1")]),就可使该策略应用到所有Web服务中。
根据上述步骤对SOAP消息进行加密后,从客户端传递过来的SOAP消息简单如图6所示:
图6 客户端传递的SOAP消息
经过Web服务端处理后的SOAP消息表示如图7所示:
图7 处理后的SOAP消息
通过两个消息头的比较,可以看到在SOAP消息传递过程中,传递的消息存放在SOAP Header中,Header中的敏感信息已经在自定义标头中成功加密,而其中的公共信息则没有进行安全处理。
当SOAP消息进入Web服务端的时候,还没有进行解密等处理,此时消息是Unprocessed Message,这时,SOAP Header里的公共信息,即
5 总结
面对Web服务安全问题的日益复杂多样化,需要安全技术不断的发展更新,本文提出了一种基于WES的SOAP消息加密机制。实验结果表明,该机制成功对SOAP消息Header中的敏感信息进行加密,满足了Web服务应用环境下的安全需求。
[1] 蔡小芳,张永胜.在Web服务安全中XML加密与签名的应用[J].计算机安全,2006(7):20-23.
[2] 马晓轩,林学练.Web服务性能优化的研究[J].计算机工程与应用,2005,41(8):19-22, 54.
[3] 王新房,朱养鹏,邓亚玲.使用Soap扩展的XML Web服务[J].计算机工程,2005,31(7):138-140.
[4] 金 键,张 鸿.Web服务安全型分析[J].微电子学与计算机,2004(3):378-390.
[5] 孟 伟,张 璟,李军怀,等.Web服务安全模型研究与实现[J].计算机工程与应用,2006(26):134-136.
[6] 李 浩,何永强.SVG和SOAP在WebGIS中的应用研究[J].河南农业大学学报,2012,46(3):332-335.
[7] 张 席,杨 玲.一个高效的基于身份的分层加密方案[J].计算机工程与应用,2012,48(24):101-105.
[8] 张秀芹,王淑营.汽车产业链协同商务平台的数据传输安全技术[J].计算机工程与设计,2012,33(10):3751-3756.
[9] 王 洋.基于XML/SOAP的煤矿企业异构信息源集成的研究[J].煤炭技术,2012,31(8):160-161.
[10]周贤善,余华云,王松林.基于SOA的石油企业设备管理系统的设计与实现[J].西安石油大学学报(自然科学版),2012,27(3):91-94.
On the encryption for SOAP message
LIU Dong-dong1,ZHU Jun-jie2, LIU Kai1, NIU Lei1,GUO Bo1
(1.SchoolofComputerandInformationEngineering,FuyangNormalUniversity,FuyangAnhui236037,China;2.CollegeofElectricalandInformationEngineering,HunanUniversity,ChangshaHunan410082,China)
Traditional protection and security methods of Web service can't meet the communication needs of Web services. On the basis of security requirements for Web service, this paper proposes information encryption mechanism for SOAP message based on WSE 3.0. When the sender transfers SOAP message which passes intermediate receiver one and intermediate receiver two, and intermediate receivers can process the information they need under security requirements, and do not need to deal with all the information of SOAP message.The experimental results show that this mechanism not only improves the transmission efficiency of SOAP message, but also ensures security requirements in the process of transmitting SOAP message.
WSE;SOAP message ;Web security
2014-12-22
全国统计科学研究计划项目(2014LZ32);安徽省教育厅自然科学研究项目(2015KJ014,2015KJ007);大学生创新计划项目(201410371030,AH201410371037);阜阳师范学院基金项目(2015KJFH02,2015FSKJ09);阜阳师范学院质量工程项目(2013ZYSD05)资助。
刘冬冬(1977-),男,硕士,讲师,研究方向:网络与WEB应用。
TP302.1
A
1004-4329(2015)03-065-05
10.14096/j.cnki.cn34-1069/n/1004-4329(2015)03-065-05