|
SOAP Header扩展:WS-Security和WS-License广告 SOAP Header扩展:WS-Security和WS-License
Chief System Architect 2001 年 12 月 15 日 在本文中介绍了四个新涌现的Web服务规范中的前两个WS-Security和WS-License。WS-Security为Web服务提供了一种保障服务安全性的语言。Web服务许可语言(WS-License)则是一个建立在WS-Security规范之上的Web服务规范。WS-Security描述了通过确保消息完整性和机密性来实施安全传输SOAP消息的机制。而WS-License规范则描述了如何编码信任状以在WS-Security中使用。在后面的文章中我将继续介绍WS-Routing和WS-Referral。 这样,从体系架构的观点来看,解析SOAP Header的就可以由平台模块来完成,通过插入不同的标准化的SOAP Header条目解析模块来完成不同目的的控制功能。而相应的,解析SOAP Body是由应用模块来完成。这样在开发和部署上将会非常地清晰。 随着SOAP Header扩展的普遍应用和标准的形成,将意味着SOAP技术的真正成熟。 而目前出现的四个新的Web Service规范,正是SOAP Header地扩展,这将有力地推动SOAP技术的成熟化。 这四个Web Service规范是: WS-Security WS-Security为Web服务提供了一种保障服务安全性的语言。WS-Security提供了三种能力来描述了SOAP消息的扩展:信任状传输、消息集成和消息机密性。这些功能自身并不提供完全的安全解决方案;WS-Security能用来和其他Web服务协议一起来满足多种类型的应用安全性的需要。 WS-Security提供了一个通用的机制来将许可证(签署了的信任声明,如x509信任状或者Kerberos tickets等)与消息关联,而不需要指定特殊的格式。 XML Signature可以保证消息的完整性而许可证则用来确保消息在传递时不被修改。同样的,消息机密性可以由XML Encryption和许可证一起来提供,共同保证SOAP消息各部分的机密性。 注意,在下面描述的消息指的都是SOAP消息。 架构组成 通过使用SOAP扩展模型,这个基于SOAP的规范被设计用于和其他一些机制进行组合从而提供一个完善的消息环境。同样的,WS-Security自身没有提供一个完全的安全解决方案,但是WS-Security能够和其他Web服务协议一起来满足多种类型应用的安全性需要。 Credentials(信任状) 为了让两个或更多的实体之间实施安全的通讯,他们常常需要交换安全信任状。WS-Security可以用来交换多种安全信任状: "license",license(许可证)是一种信任状,他包括一组经过授权签署的声明。其中一些声明是关于密钥的,这些密钥是非常重要的,他们能够被用来签署或加密消息。许可证的例子包括X.509证书和Kerberos tickets。 "testament", testament(证明)是用来确诊许可证拥有者的信息。证明的例子可能包括一个私钥(相对于X.509证书中的公钥来说的)或一个会话密钥(相对于Kerberos ticket中的已加密会话密钥来说)。 在一个许可证中,密钥能够用两种形式来描述(通过一个声明):公钥或是对称密钥。而核心的加密方法的使用与低层的机制和语言是彼此正交的,互相中立的。 为消息安全使用许可证 来了发送一个安全的消息,典型的,发送者需要签署和加密发出的消息。发送者使用发送者的testament来签署消息。发送者然后使用接受者许可证内的密钥来加密消息。为了使接受者相信,发送者可以把发送者的许可证也附在消息上。 当一个消息被一个预期的消息接受者接受时,接受者验证签名。这些签名使用的密钥是由XML Signature信息块描述的。如果已经提供了许可证,接收者能够通过签名密钥来定位许可证。如果消息签名被验证了,那么接收者将可以明明白白地知道自己是否应该相信那些与发送者许可证里面的密钥相关的声明。而对于信任假设的处理则不再WS-Security规范所要讨论的范围之内了。 符号定义 在WS-Security之后的描述中,我们将使用以下的速记符号:
使用WS-Security体系结构进行安全消息通讯的最简单的形式可以考虑为从A发送一个消息M1到B并且相应的有一个响应消息M2; A -> B:{M1}(S=T[A], E= K[B]), L[A] A <- B:{M2}(S=T[B],E=K[A]), L[B] A使用自己的证明签署了消息M1同时使用B的许可证中的密钥加密了消息,而且作为代表性的使用方式,A同时在消息中包括了他自己的许可证。作为回应,B则做了相反的事情,B使用自己的证明签署了消息M2同时使用A的许可证中的密钥加密了消息,而且作为代表性的使用方式,B同时在消息中包括了他自己的许可证。 注意到WS-Security规范的作用领域主要就是针对上面描述的操作。WS-Security规范没有描述A如何包括B的许可证,也没有描述A或者B如何去信任互相的许可证。这些行为留给更高级别的协议和应用逻辑,这些已经在规范的说明范围之外了。 一个例子 让我们考虑一个简单的例子。Alice获得了一个许可证(L[B]). 她也有她自己的许可证L[A]。在这个例子里,我们假设两个许可证都是基于公钥的。但是我们应该注意到,这里描述的基本步骤同样被运用于对称密钥加密技术。 Alice能够使用下面的方法和Bob开始一个安全会话。 Alice决定使用密钥K[B]。她只是简单的从Bob的许可证中取出公钥。 Alice使用WS-Security来签署消息M。通过使用WS-Security规范算法计算出一个消息摘要并且通过使用集成的Header把加密后的消息摘要附在消息上,此时,她完成了消息的签署。其中消息摘要是使用她自己的证明T[A]来加密的。相对于公钥的私钥包含在她的许可证L[A]中 接着Alice使用WS-Security来加密消息M的主要部分。如果使用公钥算法加密整个消息的话花费会很大(一般常见的有RSA)。为了减少这种花费,Alice建立了一个对称密钥K[X]来加密M(比如DES)。然后她使用K[B]来加密K[X]。并把它附在消息里面。这个消息和密钥加密是使用XML Encryption机制的。 Alice使用信任状消息头将她的许可证附在消息中,并把消息发送给Bob。 当Bob收到了消息,他需要做下面的事: Bob通过定位XML Encryption标签(Tag)来检查消息。当定位到这个XML标签,Bob通过使用他自己的证明T[B]中相对于许可证中公钥的私钥来解密消息体。特别的,Bob使用T[B]来解密K[X],同时使用K[X]来解密消息。 Bob通过定位集成的消息头来检查消息。Bob然后通过使用签名中解密而得到的密钥,使用这个消息头来验证解密的数据。然后基于这个钥匙,他定位到Alice的许可证(在信任状消息头中)。Bob接着决定他是否应该相信Alice的许可证,如果是,他将继续处理。 从公共密钥切换到对称密钥 下面的例子显示了基本的WS-Security机制如何能组合而形成高级的安全协议。注意到,下面的例子特意做的比较简短,因此需要注意的是它是非标准化的。这点非常重要。 假如Alice和Bob想进行一个私密的会话,但不想对每个消息都使用公钥加密。Alice能够产生一个会话密钥并且使用他们现存的通道把它传给Bob。这个密钥交换的过程,其使用的是私有的协议。另外一个方法是建立一个新的许可证并通过发布新的许可证来给其他成员,以此来使用基于对称密钥的WS-Security框架。 下面我们来描述这第二个方法是如何实施的。作为通讯初始化的一部分(如上面所描述的那样),Alice发布了一个新的许可证L[B->A],她使用她的证明T[A]来签署并把它发给Bob。更精确的,Alice通过将自己视为认证方而重新发布最初的许可证L[B],这个许可证带有一个新的用于加密的对称密钥K[B->A];因为她信任最初的许可证L[B],所以她可以这样做。我们使用符号L[B->A]来显示A给B用来从B到A通讯的许可证。 除提供给Bob新的许可证L[B->A]之外,Alice需要提供Bob能够用来证明他拥有新许可证的证明。这个证明可以被引用微T[B->A],因为我们使用对称钥,所有密钥都是K[B->A]。为了提供Bob这个T[B->A],Alice签署并加密了T[B->A]并且把它包含在发送消息中。 当Bob收到消息,他能够取得这个新的证明。然后Bob使用他的证明T[B]签署发布新的许可证L[A->B]并通过适当加密后的证明把这个新的许可证提供给Alice。在后来的消息中,Alice将使用新的许可证。 用数学方法重定义,这个过程将成为: A. 交换初始化 Alice-> Bob: {M1}(S=T[A],E=K[X]/K[B]),
L[A],L[B->A],{T[B->A]}(S=T[A],E=K[B]) Alice ->Bob:{M3}(S=T[A],E= K[A->B]),
L[A],L[A->B] 为了避免在从Alice到Bob的初始化交换时有两个公钥加密操作,Alice可以使用K[X]加密T[B->A]和M1。 Web服务许可语言(WS-License)是一个建立在WS-Security规范之上的Web服务规范。WS-Security描述了通过确保消息完整性和机密性来实施安全传输SOAP消息的机制。同时,它也提供了将其他的安全信任状和消息进行关联的机制。而WS-License规范则描述了如何编码信任状以在WS-Security中使用。 架构组成 通过使用SOAP扩展模型,这个基于SOAP的规范被设计用于和其他一些机制进行组合从而提供一个完善的消息环境。因此,WS-License自己不提供安全性的解决方案,WS-License是用来和其他的Web服务规范或特殊应用的相关规范相联合使用,包括WS-Security,以此来提供多种类型的安全模型和加密技术。 什么是许可证 为了两个或更多的通讯方能够进行安全的通讯,他们常常需要交换安全信任状。license(许可证)是一种信任状,他包括一组经过授权签署的声明。其中一些声明是关于密钥的,这些密钥是非常重要的,他们能够被用来签署或加密消息。许可证的例子包括X.509证书和Kerberos tickets。 许可证能够既支持公钥加密法也支持对称密钥加密法,这是基于使用的许可证的类型的。当使用公钥法,一个许可证包括公钥并且密钥的拥有者有相应的私钥。当使用对称钥法时,许可证将包括所有被许可用户的用于加密的对称密钥。 举例来说,一个许可证也许是由政府组织所发布的,这个许可证包括一个密钥和一个公钥,同时这个许可证被授权给拥有者John Smith。注意,发布组织在发布许可证的时候也用他自己的私钥来签署许可证,这样其他用户才可以信任该许可证。于是,当一个被这个许可证中的私钥签署的消息被接受时,接收用户就能够把这个消息和名为John Smith的许可证相关联。用户可以明白地决定是否信任与发送者许可证中的密钥相关的信息声明。而信任评估的处理则是在WS-License规范的范围之外的。 WS-License的目的 WS-License规范的目的是描述了一组通常使用的许可证类型,并且描述了它们如何在标签中被描述的(这部分的详细定义可参阅WS-Security规范,WS-Security规范可以在"http://msdn.microsoft.com/ws/2001/10/Security/"发现)。特别的,WS-License规范描述了如何在WS-Security的标签中编码X.509证书、Kerberos tickets以及其他的二进制的许可。除了这些许可类型之外,WS-License还描述了发送者如何可以放置一个二进制支持的信任状(例如一个加密的密钥),而用户可以对这个信任状进行解码。 信任状格式 WS-License规范定义了一些抽象的元素,这些元素可以被具体的信任元素所继承使用。
CREDENTIALS类型也在WS-License中有定义。其中说明了所有在WS-Security信任状消息头中放置的信任状必须是CREDENTIALS类型,CREDENTIALS类型包含了从上述抽象元素中继承下来的所有许可证和信任状以及XML Signature的KeyInfo元素。 扩展性和信任状约束 WS-License被设计为可以通过扩展从而使用更多的新的不同的机制。特别的,新的元素可以被定义为上述credential元素的子类型。 然而典型的,一个Web服务不会接受所有的信任状,代之的是对传送过来的信任状有自身特别的要求。关于服务接受何种信任状的特别的协商细节不在WS-License规范的讨论范围之内。 当使用二进制信任状时,WS-License提供了一种机制,允许发送者来提供一个描述类型的URI来进一步描述信任状。在XML Schema中这种类型属性被用来定义一个元素的值空间。然而,因为数据被编码为二进制形式,类型被用于指明编码方式,而值类型以及值空间的类型并没有被这个类型URI所描述。因此,valueType属性必须被包含以提供给URI来定义值类型和二进制编码数据的值空间。 举例来说,一个发送者和接受者可以达成一致,使用kerberos许可证的一些特定的属性。所有这些特性都是由一组成员公司所发布的。他们可以决定通过使用URI:"http://biz.com/schemas/2001/10/our-license-type"来命名这类Kerberos许可证。注意所有的out-license-type类型的许可证都是Kerberos许可证,因此能够使用标准的WS-License机制来编码。一般的,发送者可能提供这种许可证类型给消息接受者,而消息接受者也许选择拒绝不包含这个类型许可证的消息。因为二进制编码没有相应的值类型和值空间,因此这个许可证类型的描述是必须的。 例子 下面是一个包括基于Kerberos许可证的SOAP消息,并使用URI来描述上述的our-license-type的许可证。
小结 在本文中介绍了四个新涌现的Web服务规范中的前两个WS-Security和WS-License。WS-Security为Web服务提供了一种保障服务安全性的语言。Web服务许可语言(WS-License)则是一个建立在WS-Security规范之上的Web服务规范。WS-Security描述了通过确保消息完整性和机密性来实施安全传输SOAP消息的机制。而WS-License规范则描述了如何编码信任状以在WS-Security中使用。在后面的文章中我将继续介绍WS-Routing和WS-Referral。 Web Service 技术/评论网站
Web服务系列技术标准规范
作者简介
如果您希望与本文章的作者或其所在机构,进一步交流,请联系:姜小姐 jill.jiang@amt.com.cn | 021-51096826-112 | 在线联系 |
CIO职场,强者生存?在2008年,我们将继续看到CIO向商业运营方向发展。与此同时,我们也会看到商业管理人员将与技术管理人员一起竞争CIO岗位。 IT领导者的就职机会虽有不少,但其难度将会大幅提高。2…… 防震减灾,IT当关今天,任何的防震救灾体系,都离不开IT技术。地震观测台是数字化的,震害防御需要对以往的地震信息进行数据分析,应急救援要需要现代多样化的通讯技术。如果说,在许多行业,信息技术还只是一…… |
|
|