第 6 章 消息保护


摘要

本章描述了以下消息保护机制:防止窃听(使用加密算法)并防止消息篡改(利用消息摘要算法)。保护可以在各种粒度级别和不同的协议层应用。在传输层,您可以选择将保护应用到消息的整个内容;而在 SOAP 层,您可以选择将保护应用到消息的不同部分(bodies、标头或附件)。

6.1. 传输层安全性消息保护

概述

传输层消息保护指的是由传输层提供的消息保护(加密和签名)。例如,HTTPS 使用 SSL/TLS 提供加密和消息签名功能。实际上,WS-SecurityPolicy 不会添加到 HTTPS 功能集中,因为 HTTPS 已使用 Blueprint XML 配置完全可配置(请参阅 第 3 章 配置 HTTPS)。但是,为 HTTPS 指定传输绑定策略的一个优点是,它可让您在 WSDL 合同中嵌入安全要求。因此,获取 WSDL 合同副本的任何客户端都可以发现 WSDL 合同中端点的传输层安全要求是什么。

警告

如果在传输层中启用 SSL/TLS 安全性,您必须确保显式禁用 SSLv3 协议,以便防止 Poodle 漏洞(CVE-2014-3566)。如需了解更多详细信息,请参阅 JBoss Fuse 6.x 和 JBoss A-MQ 6.x 中的禁用 SSLv3

先决条件

如果您使用 WS-SecurityPolicy 配置 HTTPS 传输,还必须在 Blueprint 配置中相应地配置 HTTPS 安全性。

例 6.1 “蓝图中的客户端 HTTPS 配置” 演示了如何将客户端配置为使用 HTTPS 传输协议。sec:keyManagers 元素指定客户端自己的证书 alice.pfxsec:trustManagers 元素指定可信 CA 列表。注意 http:conduit 元素的 name 属性如何使用通配符来匹配端点地址。有关如何在客户端中配置 HTTPS 的详情,请参考 第 3 章 配置 HTTPS

例 6.1. 蓝图中的客户端 HTTPS 配置

<beans xmlns="https://osgi.org/xmlns/blueprint/v1.0.0/"
       xmlns:http="http://cxf.apache.org/transports/http/configuration"
       xmlns:sec="http://cxf.apache.org/configuration/security" ... >

  <http:conduit name="https://.*/UserNameOverTransport.*">
    <http:tlsClientParameters disableCNCheck="true">
      <sec:keyManagers keyPassword="password">
        <sec:keyStore type="pkcs12" password="password" resource="certs/alice.pfx"/>
      </sec:keyManagers>
      <sec:trustManagers>
        <sec:keyStore type="pkcs12" password="password" resource="certs/bob.pfx"/>
      </sec:trustManagers>
    </http:tlsClientParameters>
  </http:conduit>
  ...
</beans>

例 6.2 “蓝图中的服务器 HTTPS 配置” 演示了如何将服务器配置为使用 HTTPS 传输协议。sec:keyManagers 元素指定服务器自己的证书 bob.pfxsec:trustManagers 元素指定可信 CA 列表。有关如何在服务器端配置 HTTPS 的详情,请参考 第 3 章 配置 HTTPS

例 6.2. 蓝图中的服务器 HTTPS 配置

<beans xmlns="https://osgi.org/xmlns/blueprint/v1.0.0/"
       xmlns:httpj="http://cxf.apache.org/transports/http-jetty/configuration"
       xmlns:sec="http://cxf.apache.org/configuration/security" ... >

  <httpj:engine-factory id="tls-settings">
    <httpj:engine port="9001">
      <httpj:tlsServerParameters secureSocketProtocol="TLSv1">
        <sec:keyManagers keyPassword="password">
          <sec:keyStore type="pkcs12" password="password" resource="certs/bob.pfx"/>
        </sec:keyManagers>
        <sec:trustManagers>
          <sec:keyStore type="pkcs12" password="password" resource="certs/alice.pfx"/>
        </sec:trustManagers>
      </httpj:tlsServerParameters>
    </httpj:engine>
  </httpj:engine-factory>
  ...
</beans>
重要

您必须在服务器端将 secureSocketProtocol 设置为 TLSv1,以便防止 Poodle 漏洞(CVE-2014-3566)

策略主题

传输绑定策略必须应用到端点策略主题(请参阅 “端点策略主题”一节)。例如,给定 ID 为 UserNameOverTransport_IPingService_policy 的传输绑定策略,您可以将策略应用到端点绑定,如下所示:

<wsdl:binding name="UserNameOverTransport_IPingService" type="i0:IPingService">
  <wsp:PolicyReference URI="#UserNameOverTransport_IPingService_policy"/>
  ...
</wsdl:binding>

语法

TransportBinding 元素的语法如下:

<sp:TransportBinding xmlns:sp="..." ... >
  <wsp:Policy xmlns:wsp="...">
    <sp:TransportToken ... >
      <wsp:Policy> ... </wsp:Policy>
      ...
    </sp:TransportToken>
    <sp:AlgorithmSuite ... > ... </sp:AlgorithmSuite>
    <sp:Layout ... > ... </sp:Layout> ?
    <sp:IncludeTimestamp ... /> ?
      ...
  </wsp:Policy>
  ...
</sp:TransportBinding>

示例策略示例

例 6.3 “传输绑定示例” 显示了使用 HTTPS 传输(由 sp:HttpsToken 元素指定)和 256 位算法套件(由 sp:Basic256 元素指定)的传输绑定示例。

例 6.3. 传输绑定示例

<wsp:Policy wsu:Id="UserNameOverTransport_IPingService_policy">
  <wsp:ExactlyOne>
    <wsp:All>
      <sp:TransportBinding xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
        <wsp:Policy>
          <sp:TransportToken>
            <wsp:Policy>
              <sp:HttpsToken RequireClientCertificate="false"/>
            </wsp:Policy>
          </sp:TransportToken>
          <sp:AlgorithmSuite>
            <wsp:Policy>
              <sp:Basic256/>
            </wsp:Policy>
          </sp:AlgorithmSuite>
          <sp:Layout>
            <wsp:Policy>
              <sp:Lax/>
            </wsp:Policy>
          </sp:Layout>
          <sp:IncludeTimestamp/>
        </wsp:Policy>
      </sp:TransportBinding>
      ...
      <sp:Wss10 xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
        <wsp:Policy>
          <sp:MustSupportRefKeyIdentifier/>
          <sp:MustSupportRefIssuerSerial/>
        </wsp:Policy>
      </sp:Wss10>
    </wsp:All>
  </wsp:ExactlyOne>
</wsp:Policy>

sp:TransportToken

此元素具有两重效果:它需要特定类型的安全令牌,并且指示传输如何保护。例如,通过指定 sp:HttpsToken,这表示连接由 HTTPS 协议进行保护,安全令牌是 X.509 证书。

sp:AlgorithmSuite

此元素指定用于签名和加密的加密算法套件。有关可用算法套件的详情,请参考 第 6.2.7 节 “指定算法套件”

sp:Layout

此元素指定是否对将安全标头添加到 SOAP 消息的顺序实施任何条件。sp:Lax 元素指定不会对安全标头顺序实施任何条件。sp:Lax 的替代方案是 sp:Strict,sp:LaxTimestampFirst, 或 sp:LaxTimestampLast

sp:IncludeTimestamp

如果策略中包含此元素,则运行时会在 wsse:Security 标头中添加 wsu:Timestamp 元素。默认情况下,不会包含 时间戳。

sp:MustSupportRefKeyIdentifier

此元素指定安全运行时必须能够处理密钥 标识符 令牌引用,如 WS-Security 1.0 规范中指定的。密钥标识符是识别密钥令牌的机制,可在签名或加密元素中使用。Apache CXF 需要此功能。

sp:MustSupportRefIssuerSerial

此元素指定安全运行时必须能够处理 Issuer 和 Serial Number 令牌引用,如 WS-Security 1.0 规范中指定的。签发者和序列号是识别密钥令牌的机制,该令牌可用于签名或加密元素。Apache CXF 需要此功能。

Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

© 2024 Red Hat, Inc.