技术开发 频道

为SOA保驾护航(上)

【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。

    数字证书是类似网上护照的电子文件。它们由可信的第三方即证书认证中心(CA)颁发,该机构负责验证证书持有者的身份。

    作为W3C的一项备忘录,XKMS简化了使用公钥基础设施(PKI)和数字证书来保护基于XML的因特网事务安全的工作。它为分发及注册适合于结合W3C的XML签名语法和处理标准使用的公钥规定了协议。XKMS由两部分组成:XML密钥信息服务规范(X-KISS)和XML密钥注册服务规范(X-KRSS)。

    我们已从前面举例的供应链使用实例知道,通过因特网访问信息的功能对解决方案来说至关重要。Web服务可以实现这种功能,因为它们允许通过网络交换信息。Web服务基于以下三项重要标准:

    简单对象访问协议(SOAP):数据传输协议。
    Web服务描述语言(WSDL):Web服务描述语言。
    通用描述、发现和集成(UDDI):确定Web服务位置的注册中心。

    请注意:所有上述标准都可以用XML来定义。不过,我们举例的供应链解决方案必须具体解决两个问题:

    一、只允许授权用户可以访问基于XML的Web服务,这可以通过可扩展访问控制标记语言(XACML)和Web服务策略(WS-Policy)两个标准来解决;

    二、保护Web服务环境中交换的XML消息的完整性和机密性,这可以通过Web服务安全(WSS)和安全声明标记语言(SAML)来解决。

    本文基本介绍了Web服务策略、WSS、SAML、XACML以及XQuery和XML数据库如何赋予安全。WSS在SOAP环境下提供了消息保护。SAML和XACML支持授权,并且大力支持大规模分布式系统。最重要的是,所有这些标准都可以使用XML表示信息。Web服务策略、WSS、SAML和XACML都有一些共同之处。虽然所有这些标准都能够使用前些年使用的安全服务,但各自都有具体的特性,旨在适用于大规模分布式环境,譬如因特网。另外,这些标准可以使用及集成原先就有的安全标准。

    正如前文所述,这些标准使用XML。XML使诸多技术可以轻松扩展,以满足特殊需求,而使用旧格式不可能做到这点。另外,XML允许实施者使用现有的许多软件工具进行处理。以WSS为例,它旨在与SOAP的语法和处理模型紧密集成,该模型用XML来定义。

    另外,XML是一门标记语言,能够标记不同数据源的信息内容,包括结构化和半结构化文档、关系数据库和对象储存库。由于这么多采用XML格式的重要数据可供使用,这些数据可以查询及挖掘,以获得进一步的适用性,就显得极其重要。查询语言是XQuery,它能够理解XML,并且针对各种XML数据表示查询,无论是不是实际保存在XML中,还是通过中间件作为XML来浏览。XQuery广泛适用于许多类型的XML数据源。

    为XML数据添加持久性的推荐方法就是,使用这样的本地XML数据库技术:不但可以把XML作为另一个关系工件来对待,还可以作为自然的XML工件来对待。XML数据库管理服务器(XDMS)是企业级XML持久性机制,它具有传统关系数据库随带的所有功能。具有功能强大的XML索引、分析及加速等特性的XDMS是一大有利因素。

    Web服务策略

    Web服务策略框架提供了通用模型和相应语法,以描述及传达Web服务的策略。Web服务策略定义了一套基本的构件,可由其他Web服务规范使用及扩展,从而描述一系列广泛的服务需求、选项及功能。

    Web服务策略为表示基于XML Web服务的系统里面实体具有的功能、需求和一般特性提供了灵活、可扩展的语法。Web服务策略定义了一个框架和模型,用于把这些属性表示成策略。策略表达式允许简单的说明性声明,也允许比较复杂的条件声明。

    Web服务策略定义的策略是一个或者多个策略声明的集合体。有些声明规定了最终在传输过程中予以显示的传统需求和功能(譬如验证方案和传输协议选择)。有些声明规定了不在传输过程中予以显示、但对服务的合理选择及使用至关重要的需求和功能(譬如隐私策略和服务质量特性)。Web服务策略提供了单一的策略语法,以便能一致地考虑这两种声明。

    请注意,新成立的OASIS Web服务安全交换(WS-SX)技术委员会是OASIS为负责Web服务策略及其他相关标准而新设的工作组。
用XML表示策略声明称为策略表达式。只要使用策略操作符:All、ExactlyOne和OneOrMore等,就可以合并策略声明。

    下面演示了一项策略的简单示例:
<policy Priority="200">
   <All>
      <Language Usage="Required" Language ="it" />
         <ExactlyOne>
            <SecurityToken TokenType="UsernameToken" Usage="Required">
               <Claims>
                  <Username>Claudio</Username>
                  <UsePassword/>
                </Claims>
            </SecurityToken>
            <SecurityToken TokenType="X509" Usage="Required">
               <Claims>
                  <SubjectName>Role=Student</SubjectName>
               </Claims>
            </SecurityToken>
         </ExactlyOne>
   </All>
</policy>

    与策略相关的其他规范是:Web服务策略声明语言;Web服务安全策略语言;Web服务策略附件;针对Web服务策略、Web服务授权和Web服务可靠消息传送等其他技术的策略。

0
相关文章