揭开 Java 安全标准的神秘面纱

1/5/2008来源:Java教程人气:4176


  在过去的三年中,人们开发出了许多关于信息安全(Information Security)的新标准。
其中最为人们所认可的是Web Services安全性(Web Services Security,WSS)、安全性断言标记语言(Security Assertion Markup Language,SAML)和可扩展访问控制标记语言(Extensible access Control Markup Language,XACML)。本文会简单介绍这三者,包括它们是如何开发出来的、为什么需要它们、如何使用它们、它们之间以及它们与现有各种安全性标准之间的关联。以后的文章会对这些内容进行更具体的介绍。
  
  简介
  
  WSS、SAML和XACML之间有许多共性。或许最明显的就是它们都使用xml表示信息。其次是,因为这三种可用的安全服务都已经在计算机系统中应用多年了,为了更加适用于大型分布式环境,如互联网,它们都具有一些特定的功能。此外,三者都参考并结合了现有的安全性标准,并尽量减少对已有功能的重复。
  
  两个主要原因促使三者都采用了XML技术。第一,XML使它们便于扩展,以便可以以一种原有格式无法实现的方式来满足某种非凡需求。第二,XML支持采用大量可用的软件工具进行处理的实现。对于WSS来说,还有一个原因,即,WSS被设计为支持与SOAP的语法和处理模型进行紧密集成,而SOAP是用XML定义的。
  
  SAML
  
  授权和审计跟踪是常见的安全服务。以前,大多数系统设计时都假设做出访问控制决定所必需的所有信息都由单个系统来处理,并且所有要记录的数据都放在审计跟踪中。但是,大规模分布式系统通常是由多个组织使用各种产品建立的。这意味着用户可能要由不同的验证方使用不同的方法进行验证。此外,不同的验证方还要保存有关用户特性和属性的不同信息。集中治理所有这些能力和信息是不现实的。SAML提供了标准格式来表示身份验证、用户属性以及请求和接受该标准的协议。这被称为身份联盟(Identity Federation)。
  
  在OASIS的最初开发阶段,SAML只指定了该身份信息的生产者与消费者之间的通信。SAML定义了如何创建有关用户属性和身份验证事件的断言,以及如何以一种灵活而可扩展(以便满足其它需求)的方式获得这些信息。SAML还具体定义了一些常见场景(如:Web单点登录)来确保互操作性。
  
  Liberty Alliance PRoject和Internet2 Shiboleth group进一步地增强和扩展了SAML。增加了许多新功能,以便支持SAML验证方之间的通信,更加具体地描述身份验证方法,注销用户并保护隐私。这些工作又提交给OASIS,并合并到SAML2.0中,SAML2.0在2005年3月成为一个OASIS标准。SAML被设计为用于多种不同的环境,支持使用不同的身份验证和加密方法。它支持各种不同的消息流,甚至可以用于不使用XML的遗留环境中。
  
  XACML
  
  XACML,也是由OASIS开发的,是一种表示访问控制策略的语言。大多数计算机专业人士都熟悉基于权限或访问控制列表(ACL)的访问控制。但是,这些机制缺少表示复杂策略(在现实系统中经常需要用到)的能力。因此,访问控制策略通常会嵌入应用程序代码中。这使得更改策略(或者只是找出哪些策略正在实施)变得很困难。
  
  XACML能够实际地使用任何可用的信息来决定是否该许可对一个资源的访问。也可以关联附加的动作、被调用的契约和决定,例如,要求请求的数据在90天后删除。
  
  XACML可以根据资源的属性做出决定,包括资源的内容或环境因素,如日期、时间或位置。它也会考虑到与请求关联的各方的特性,比如角色或组成员关系。这可能不只包括请求方,还包括其他方,比如接受数据方或请求中转方。
  
  XACML 2.0在2005年2月成为一个OASIS标准。它在具有多个创建策略的治理员的大规模环境中运行良好。因为SAML可用于任何访问控制系统,XACML可以与SAML一起使用,或者单独使用。有专门的支持它们一起工作的特性。
  
  WSS
  
  WSS指定了如何保护通过网络传递的SOAP消息。它包括身份验证、完整性保护和保密性。它没有指定如何实现访问控制,但提供了可以用于访问控制的信息。在WSS出现之前,最常见的保护消息的方法是使用SSL或TLS协议。这些协议仍然适用于许多应用程序,但WSS提供了更多的功能和灵活性。
  
  SSL和TLS是对整个消息进行加密,而WSS答应有选择性地实现加密。例如,它答应应用程序防火墙检查没有加密的部分。此外,WSS还支持复杂的多方交互,这是处理复杂的电子商务事务所需要的。
  
  此外,WSS在基础架构选择方面提供了更大的灵活性。同SSL和TLS一样,它也支持X.509技术,还可以使用Kerberos、SAML或以前的普通用户名和密码。因为WSS作用于SOAP层,在信息在网络上传输甚至在对消息进行排队或存储时,它都能发挥作用。
  
  WSS采用W3C所开发的XML数字签名(XML Digital Signature)和XML加密(XML Encryption)标准。WSS通过将称为Security的XML元素插入SOAP标题中而发挥作用。其中包含所有有关应用于消息的身份验证、数字签名和加密的信息。它向接受方提供解密和验证消息所需的信息。密钥和身份验证信息可以使用X.509证书、Kerberos ticket、SAML断言或其他方法进行定义。
  
  2004年,WSS 1.0成为一个OASIS标准。现在,WSS 1.1就要完成了。由于WSS所提供的灵活性,不同产品间的互操作可能会比较困难。为了解决这个问题,Web Services InterOperability Organization组织(WS-I)正在开发一个配置文件,以便减少可变性,并给出使用WSS(以及SSL和TLS)的最佳实践。这个Basic Security Profile (BSP)的草案已经公布,并预计于2006年初完成。WS-I成员还构建了一个示例应用程序来说明WSS和测试工具(可以检查消息是否服从BSP)的正确使用。
  
  结束语
  
  上面介绍的三个安全性标准在设计时就被赋予了极大的灵活性,这是通过使用XML而实现的。SAML和XACML在几乎所有的环境中都支持身份验证服务,但更适用于大规模分布式系统。在SOAP环境中,WSS提供了明确的消息保护,但是在软件基础架构方面,它提供了很多选择。有XML作为其共同的基础,这三个标准可以有效地共同使用,或者也可以单独使用。进入讨论组讨论。