在 WebSphere® Application Server V6 中,即使在简单对象访问协议(SOAP)消息中启用了完整性、机密性以及相关联的令牌,安全性也无法得到保证。当您配置 Web Service 安全性时,必须努力验证结果对于广泛的攻击机制是否不易受攻击。本文提供某些有关可能的安全性问题的信息,这些安全性问题是在保护 Web Service 时出现的。此安全性问题列表不完整。您必须为环境实施自己的安全性分析。
WS-Security 2004 规范定义如何使用简单对象访问协议(SOAP)头中的 XML 数字签名和 XML 加密。因此,用户必须了解其他安全性机制的上下文中的 XML 数字签名和 XML 加密以及对实体可能的威胁。对于 XML 数字签名,您必须了解所有由使用一般的数字签名和特别的 XML 数字签名而产生的安全含义。当您将信任构建到基于数字签名的应用程序中时,必须结合其他技术,如基于公共密钥基础结构(PKI)的证书信任验证。对于 XML 加密,在公共数据项上的数字签名和加密的组合可能引入某些密码脆弱性。例如,当您加密数字签署的数据时,可以将数字签名保留在明文中,而使消息易受明文猜测攻击。作为通用实践,当加密数据时,会加密数据上的任何摘要或签名。有关更多信息,请参阅 http://www.w3.org/TR/xmlenc-core/#sec-Sign-with-Encrypt.
存在令牌替换攻击的可能性。在此情况下,使用通常从安全性令牌派生的密钥来验证数字签名,而且此数字签名包括在消息中。如果替换令牌,则收件人可以接受基于替换的密钥的消息(这不是您期望的)。此问题的一个可能的解决方案是与已签署的数据一起签署安全性令牌(或唯一标识派生签名密钥的数据)。在某些情况下,签署由可信权限发出的令牌。在此情况下,不可以存在完整性问题。然而,由于应用程序语义和环境可以超时更改,所以最佳 实践就是防止此攻击。您必须评估基于已部署环境的风险评估。
建议您验证是否完全信任用于数字签名的令牌标识的真实性或有效性。尤其是对于 X.509 令牌,此问题会涉及验证证书路径和使用证书撤销列表(CRL)。在 WebSphere Application Server V6 中的 Web Service 安全性实现中,证书是由 TokenConsumer 元素验证的。WebSphere Application Server 为 X.509 证书提供了缺省实现,该实现使用 Java™ CertPath 库来验证证书。 在实现中,不存在明确的 CRL 概念。而仅在文件中准备正确的根证书和中间证书。对于复杂的解决方案,您可以开发自己的 TokenConsumer 实现,此实现使用在线 CRL 数据库或在线证书状态协议(OCSP)来执行证书和 CRL 验证。
建议您不要在不受保护的情况下将 UsernameToken 中的密码发送到下游服务器。可以使用诸如 SSL(例如 HTTPS)之类的传输级别安全性或者使用 Web Service 安全性中的 XML 加密来保护密码。首选的保护方法取决于环境。然而,在某些特殊环境(您确定不易受到攻击的环境)中可能将密码作为明文发送到下游服务器。
保护 Web Service 不仅涉及启用 XML 数字签名和 XML 加密。要正确保护 Web Service,您必须具有有关公共密钥基础结构(PKI)的知识。您需要的安全性量取决于已部署环境和使用模式。然而,存在某些用于保护 Web Service 的基本规则和最佳实践。建议您阅读有关 PKI 的一些书籍以及有关 Web Service 互操作性组织(WS-I)基本安全概要文件(BSP)的信息。