用消息交换增强ebXML的安全性(一)

日期: 2007-12-24 来源:TechTarget中国

  本文是两篇有关ebXML安全性的文章中的第一篇,主要讨论消息层。如果需要了解对ebXML概念的一般性介绍,以及研究一些基于功能阶段实现普通ebXML交互的全部用例,请参看ebXML简介。本文将重点解释消息级别的安全性和ebXML消息传送(ebMS)的安全策略机制。
  
  本文开头综述了消息层安全性的优势。文中简要讨论了消息层安全性和瞬时套接层安全性之间的区别。在摘要中提出的概念对于理解有关ebMS消息层安全性方面内容的其他部分极为重要。接下来将深入研究如何使用协作协议轮廓(Collaboration Protocol Profile,CPP)和协作协议协定(Collaboration Protocol Agreement,CPA)来为ebXML消息层描述安全性策略。
  
  什么是消息层安全性?
  
  在实际情况中,大多数ebXML消息都有基于独有XML的消息层安全性需求,包括数字签名、认证、数据私密性、以及内容产生的威胁保护。这些消息层机制提供了超过和在瞬时应用程序层安全性(例如SSL/TLS)之上的保护。实际的ebXML部署利用应用程序层安全性机制和套接层传输机制。
  
  ebXML提供的消息层安全性标准依赖于昂贵的XML安全性操作,例如XML签名和XML加密。尽管两种标准都使用了昂贵的加密处理,但是在这些标准中执行XML处理所需的时间远远超过了执行加密操作所需的时间,因为综合XML解析、转换、模式验证和消息标准化的费用昂贵。本文认为通过将XML处理和加密处理分离到一个安全的、加固的XML网关设施中(XML防火墙),可以实现显著的性能提升并具有安全性优势。
  
  根据普遍存在的价格经济的和受信的传输层机制(例如SSL/TLS或VPN技术)而产生的消息层安全性需求常常使初学者感到困惑。术语消息层安全性是指稳定的安全特性,它适用于任何类型的基于协议的消息交换,不管是通过HTTP、SMTP、FTP或是其他协议。
  
  在消息层安全性的情况中,无论消息单位是XML文件还是二进制附件,它都是经过加密或签名的,或者既经过加密又包含签名的。对于XML文档来说,由于XML的结构化特性,具体的操作可能具有高度的颗粒性。
  
  将消息层安全性应用于有效负荷可以解决传输层机制不能很好处理的安全性问题,例如安全特性的持久性。举例来说,在SSL连接中,安全特性应用于套接字,并且任何写入或者从套接字中读出的数据都是经过加密和验证的。但是,如果将套接字拆开,那么就没有办法辨别来自套接字的部分数据是否应用了安全特性。此外,在多次反射通道的情况中,数据在已经中止SSL连接的任何地方都是清楚地。这种情况称做SSL安全性“鸿沟”,如图1所示:

  
  图1:SSL安全性鸿沟

  消息层安全性机制在ebXML和其他基于XML的Web服务协议中使用广泛。他们帮助为长时间运行的事务或者以多次反射方式涵盖多种域的事务提供持久性认证、数据加密和发送方验证。消息层安全性的用途包括剩余数据保护,即数据经过签名和加密之后再插入到数据库中。
  
  CPP安全策略
  
  为了理解CPP如何描述安全策略,有必要首先检查CPP实例的外部结构。一个CPP实例由五个直接子元素定义,如清单1所示。元素的基数用一个简单的BNF语法描述。加(+)号表示一个或多个,问号(?)表示0或1,星号(*)表示0个或多个,没有符号则表示只能是1个。
  
  清单1:协作协议轮廓(CPP)XML结构
  
  <CollaborationProtocolProfile>
  (<PartyInfo>) +
  (<SimplePart>) +
  (<Packaging>) +
  (<Signature>) ?
  (<Comment>)  *
  </CollaborationProtocolProfile>  

  不需要考虑清单1中的全部元素。有关ebMS消息层安全性的大部分安全策略信息位于<PartyInfo>元素和<Packaging>元素之中。读者可能注意到清单1的例子中有一个<Signature>元素。这是一个可选的W3C XML Signature,CPP的创建者可以提供它用于验证机制。对CPP来说,通常只有一个签名者,但是CPA如果进行派生则可能有其他签名者。就验证这个目的而言,ebMS对CPP自身和实际的交换信息都利用了XML Signature,认识到这一点很重要。接下来两段将叙述<PartyInfo>元素和<Packaging>元素中所内嵌的策略信息。
  
  <PartyInfo>元素
  
  <PartyInfo>元素描述了适用于特定贸易合作伙伴的实现细节。一个CPP可以拥有多个<PartyInfo>元素,因为大型企业可能需要从多个方面以不同的角色和业务来进行描述。<PartyInfo>元素的结构如清单2所示。
  
  清单2 <PartyInfo>的结构。
  
  <PartyInfo>
  (<PartyID>) +
  (<PartyRef>) +
  (<CollaborationRole>) +
  (<Certificate>) +
  (<SecurityDetails>) +
  (<DeliveryChannel>) +
  (<Transport>) +
  (<DocExchange>) +
  (<OverrideMshActionBinding>) *
  </PartyInfo>  

  用来描绘ebXML事务的安全策略的三个重要子元素是:<Certificate>元素、<CollaborationRole>元素和<DocExchange>元素。目前,<SecurityDetails>元素被用作一个扩展点,不传递直接策略。<Certificate>元素是CPP的中心内容,它是一个包含ebXML事务所用的公钥的X.509认证清单。这种结构很普通,可以在 CPP 里的其他地方引用。<CollaborationRole>元素带有子元素,用于描述原有消息层之外的安全策略项。它可以映射为特定的PKI实现,用于ebXML会话中非透明的(例如:非XML的)有效载荷。
  
  最后,<DocExchange>元素为实际运行时ebXML安全策略奠定基础。这个元素包含了对发送者和接收者的安全策略都很重要的信息。特别值得注意的是,它定义了三个重要的子元素:<SenderNonRepudiation>、<SenderDigitalEnvelope>和<NamespaceSupported>。清单3直观地展示了这些内容的层次。
  
  清单3 <DocExchange>层次结构
  
  <PartyInfo>
  <DocExchange>
  <ebXMLSenderBinding>
  <SenderNonRepudiation>
  <SenderDigitalEnvelope>
  <NamespaceSupported>
  <SenderNonRepudiation>元素定义了计算XML签名时要用到的参数,其中包括协议(协议通常就是W3C XML签名)、用来排列摘要信息的哈希函数(如SHA-1)、具体的签名算法(如RSA或DSA)、以及一个指向签名所用的X.509证书的引用。以这里,引用可以指向<Certificate>,<PartyInfo>

我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。

我原创,你原创,我们的内容世界才会更加精彩!

【所有原创内容版权均属TechTarget,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用。】

微信公众号

TechTarget微信公众号二维码

TechTarget

官方微博

TechTarget中国官方微博二维码

TechTarget中国

相关推荐

  • ebXML是否具有永恒的力量?

    我注意到最近不少支持ebMS如雨后春笋般出现。我猜想它具有连续的SOAP/WSDL通讯方面内置的可靠性功能的优势,但它确实有长期的支撑吗……

  • 理解 ebXML(四)

    ebXML 是一个由许多部分组成的大项目。在本文中,David Mertz 概述了这些部分是如何组合在一起的。这篇概述介绍了 ebXML 概念,然后稍微详细地讨论了商业过程的表示,这是 ebXML 实现的重要起点。两段短的代码样本演示了 ProcessSpecification DTD 和一个协作包。

  • 理解 ebXML(三)

    ebXML 是一个由许多部分组成的大项目。在本文中,David Mertz 概述了这些部分是如何组合在一起的。这篇概述介绍了 ebXML 概念,然后稍微详细地讨论了商业过程的表示,这是 ebXML 实现的重要起点。两段短的代码样本演示了 ProcessSpecification DTD 和一个协作包。

  • 理解 ebXML(二)

    ebXML 是一个由许多部分组成的大项目。在本文中,David Mertz 概述了这些部分是如何组合在一起的。这篇概述介绍了 ebXML 概念,然后稍微详细地讨论了商业过程的表示,这是 ebXML 实现的重要起点。两段短的代码样本演示了 ProcessSpecification DTD 和一个协作包。