3.8. 保护 JAX-WS Web 服务
WS-Security 提供了一种方法,可以保护您的服务超越传输级别协议,如 HTTPS。通过很多标准,如 WS-Security 标准中定义的标头,您可以:
- 在服务之间传递身份验证令牌.
- 加密消息或消息部分。
- 签署消息.
- 时间戳消息.
WS-Security利用了公钥和私钥加密。使用公钥加密时,用户拥有一对公钥和私钥。这些是使用大量主要编号和一个关键功能生成的。
这些键在数学上是相关的,但不能互相派生。通过这些密钥,我们可以加密消息。例如,如果 Scott 想要向 Adam 发送消息,他可以使用他的公钥加密消息。然后 Adam 可以使用他的私钥解密此消息。只有 Adam 可以解密此消息,因为他是唯一具有私钥的消息。
也可以对消息进行签名。这样,您可以确保消息的真实性。如果 Adam 想要向 Scott 发送一封消息,Scott 希望确保它来自 Adam,Adam 可以使用他的私钥签署该消息。然后,Scott 可以使用他的公钥验证消息是否来自 Adam。
3.8.1. 应用 Web 服务安全性(WS-Security)
Web 服务支持许多需要 WS 安全功能的真实场景。这些场景包括签名和加密支持,通过 X509 证书支持,通过用户名令牌进行身份验证和授权,以及 WS-SecurityPolicy 规范涵盖的所有 WS-Security 配置。
对于其他 WS-* 功能,WS-Security 功能的核心通过 Apache CXF 引擎提供。此外,JBossWS 集成还添加了一些配置增强功能,以简化启用 WS-Security 端点的设置。
3.8.1.1. Apache CXF WS-Security 实施
Apache CXF 具有支持多种配置且易于扩展的 WS-Security 模块。
系统基于为低级安全操作委派给 Apache WSS4J 的拦截器。可以通过不同的方式配置拦截器,可以通过 Spring 配置文件或直接使用 Apache CXF 客户端 API 配置拦截器。
最新版本的 Apache CXF 引入了对 WS-SecurityPolicy 的支持,该支持旨在通过策略将大部分安全配置移至服务合同中,以便客户能够从该协议中几乎可以完全自动配置。这样,用户不需要手动处理所需拦截器的配置和安装;Apache CXF WS-Policy 引擎在内部需要处理。
3.8.1.2. WS-安全政策支持
WS-SecurityPolicy 描述了与给定 WSDL 合同中公告的服务进行安全通信所需的操作。WSDL 绑定和操作引用 WS-Policy 片段与与服务交互的安全要求。WS-SecurityPolicy 规范允许指定诸如非对称和对称密钥、使用传输(HTTPS)进行加密、哪些部分或标头加密或签名、是否要包含时间戳、是否使用派生密钥或其他方面。
但是 WS-SecurityPolicy 不涵盖一些必需的配置元素,因为它们不是公开的或已发布端点合同的一部分。其中包括密钥存储位置以及用户名和密码等内容。Apache CXF 允许通过 Spring XML 描述符或使用客户端 API 或注释来配置这些元素。
表 3.4. 支持的配置属性
配置属性 | 描述 |
---|---|
ws-security.username |
用于 |
ws-security.password |
用于 |
ws-security.callback-handler |
WSS4J 安全 |
ws-security.signature.properties | 包含用于配置签名密钥存储和加密对象的 WSS4J 属性的属性 file/对象。 |
ws-security.encryption.properties | 包含用于配置加密密钥存储和加密对象的 WSS4J 属性的属性 file/对象。 |
ws-security.signature.username | 要使用的签名密钥存储中的密钥的用户名或别名。如果未指定,它将使用属性文件中设置的默认别名。如果没有设置该密钥,并且密钥存储仅包含一个密钥,则将使用该密钥。 |
ws-security.encryption.username |
要使用的加密密钥存储中的密钥的用户名或别名。如果未指定,它将使用属性文件中设置的默认别名。如果没有设置该密钥,并且密钥存储仅包含一个密钥,则将使用该密钥。对于 Web 服务提供商, |
ws-security.signature.crypto |
这可以指向完整的 WSS4J |
ws-security.encryption.crypto |
这可以指向完整的 WSS4J |
ws-security.enable.streaming | 启用 WS-Security 消息的流传输(基于 StAX)处理. |