【IT168 技术文章】
企业的SOA需要进行规划,以满足各种安全需求。本文着重介绍诸多XML和Web服务安全标准,因为它们影响面向服务的架构(SOA)。
如今,全球各地的企业在迅速采用面向服务的架构(SOA)。数据和应用程序曾经相互独立,现在跨多个部门和组织作为服务来提供。虽然安全在过去属于IT领域,但SOA治理扩大了安全的范畴,包含组织策略和实践,因而涵盖了业务领域。如何让SOA不断成熟,以满足安全和治理的需要?如今XML安全方面的标准和规范有哪些?它们彼此是如何协同工作的?SOA治理有哪些重要因素需要考虑?如何以具有可扩展性的方式来实施这些标准,又不牺牲性能和可维护性?本文试图解答这些问题。
不妨看一下SOA的几个应用。以供应链管理为例:诸多生产商、零售商和消费者相互联系,使用众多的系统和应用程序,主要通过因特网来联系。SOA是实现这种松散耦合的交互关系的理想机制。企业级SOA的一个必要部分就是,把安全服务和治理策略运用于交易合作伙伴之间的各个联系层面上。
如果客户在某零售商的网站上下订单,显而易见:订单处理事务必须是安全可靠的。然而,事实不像表面上那么简单。零售商的订单履行应用应当涉及与库存管理系统的交互关系。一旦所订产品准备送货,零售商就与负责送货的交易合作伙伴联系;并应当为客户提供可以浏览订单状态的服务。这种相互关系都需要应用层实现安全,传输协议层通常也需要实现安全。另外,组织必须制订及管理各种策略:谁拥有数据?谁对该数据的真实性负责?各部门和交易合作伙伴如何共享数据?这就是SOA治理所要解决的任务。
这些相互关系带来了类似客户在网站上下订单的需求。在这两个交易合作伙伴交互信息的过程中,几个层必须实行安全,还要确定治理服务的策略。
另一个应用实例就是生产商的产品开发生命周期。这个过程可能涉及外部的交易合作伙伴,也可能不涉及,但一家大型生产商通常有好几个部门参与一个制成品的生产。SOA提供了可重复使用、灵活开发的好处,哪怕是在生产商并不涉及外部合作伙伴的场景下。另外,这里需要同样的安全和策略需求。
这些场景所共有的安全需求包括如下几个方面:
验证:我怎么知道你的身份是正确的?
授权:你有权执行这笔事务吗?
完整性:你发送的数据跟我收到的数据一样吗?
签名:创建及验证类似手写签名的电子签名。
机密性:我们确信没有人读取你发给我的数据吗?
审查:把所有事务记录下来,以便事后验证。
不可否认性:发送方和接收方都可以向第三方(如法官)证实:事务中发送及收到的是同一数据。
由于应用间各自独立的身份安全数量激增,其他安全需求如单次登录(SSO)已变得很重要。威胁预防也渐渐成了另一项重要的安全需求,以便排除不良数据(如间谍软件和恶意软件等)。
XML安全标准和SOA
XML是基于标准的选择,体现了上述需求,因而XML安全标准可以用来满足需求。XML安全标准充分利用了现有的XML标准,还能改进这些标准,方法如下:
XML安全标准定义了表示安全信息的XML词汇,使用XML模式(XML Schema)等XML技术来定义,譬如,用XML签名语法和处理标准(XML-Signature Syntax and Processing)定义的 <KeyInfo>元素,建议用于传输、签名或者加密密钥信息。
XML安全标准尽量使用其他现有的XML标准,以便充分利用现有的XML成果。譬如说,XML签名语法和处理标准允许XPath表达式提取XML的一部分进行处理。值得一提的是,既有的XML安全标准出现之前,是不可能实现这种有选择的签名处理的。要么整个文档被签名,要么根本不签名。XML安全标准旨在提供XML的灵活性和扩展性。它们让安全可以应用于XML文档、XML元素和元素内容以及任意的二进制文档。它们通过使用XML命名空间和可扩展的XML模式定义,支持XML词汇的扩展。
XML安全技术可以应用于端到端安全,如果XML消息通过众多处理中介来发送,这来得特别重要。持久性安全与内容相关,而不是与传输管道相关。内容仍然具有安全性。XML安全技术还可以结合传输安全技术使用,譬如安全套接层和传输层安全(SSL/TLS)。这里要强调的另一点就是,用于SSO功能的身份也随同消息一起传输。
XML安全技术尽量重复使用现有的加密和安全技术,不需要重复工作。譬如说,需要时,无须重新定义就可以使用X.509 V3证书——它们只是采用文本格式编码而成。现有的算法如SHA1摘要算法也通过把惟一的URI标识符进行关联、定义在XML安全处理模型中如何使用,从而被引入到XML安全标准世界。值得一提的是,URI标识符普遍应用于XML安全,用于加密和签名算法,而不仅仅用于散列算法。
主要的XML安全标准如下:XML加密、XML签名语法和处理、数字签名、XML密钥管理规范(XKMS)。
XML加密是万维网联盟(W3C)制订的一项规范,它为需要安全交换结构化数据的应用提供了端到端安全性。正如我们所知,XML本身就是对数据进行结构化处理的最流行的技术。因此,基于XML的加密自然是满足复杂需求的方法,可实现数据交换应用中的安全。
W3C推荐的XML签名语法和处理标准提供了完整性、消息验证和签名者验证等服务。XML签名是为了用于XML事务而设计的数字签名。这项标准定义了一种模式,用于记录应用于任意(但往往是XML)数据的数字签名操作的结果。与没有XML识别功能的数字签名(如公钥加密标准即PKCS)一样,XML签名为签名的数据添加了验证、数据完整性以及支持不可否认性的功能。然而,与非XML签名语法和处理标准不同的是,XML签名语法和处理标准旨在认可及利用因特网和XML。