6.2.3. 指定 AsymmetricBinding 策略

概述

非对称绑定策略使用非对称密钥算法(公钥/私钥组合)实现 SOAP 消息保护,并在 SOAP 层这样做。非对称绑定的加密和签名算法与 SSL/TLS 使用的加密和签名算法类似。然而,一个关键区别在于,SOAP 消息保护允许您选择消息的特定部分来保护(例如,单个标头、正文或附加),而传输层安全性则只能在整个消息上运行。

策略主题

非对称绑定策略必须应用到端点策略主体(请参阅 “端点策略主题”一节)。例如,如果带有 ID 的非对非对称绑定策略( MutualCertificate10SignEncrypt_IPingService_policy ),您可以按照以下方法应用策略到端点绑定中:

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

语法

AsymmetricBinding 元素使用以下语法:

<sp:AsymmetricBinding xmlns:sp="..." ... >
  <wsp:Policy xmlns:wsp="...">
  (
   <sp:InitiatorToken>
     <wsp:Policy> ... </wsp:Policy>
   </sp:InitiatorToken>
  ) | (
   <sp:InitiatorSignatureToken>
     <wsp:Policy> ... </wsp:Policy>
   </sp:InitiatorSignatureToken>
   <sp:InitiatorEncryptionToken>
     <wsp:Policy> ... </wsp:Policy>
   </sp:InitiatorEncryptionToken>
  )
  (
   <sp:RecipientToken>
     <wsp:Policy> ... </wsp:Policy>
   </sp:RecipientToken>
  ) | (
   <sp:RecipientSignatureToken>
     <wsp:Policy> ... </wsp:Policy>
   </sp:RecipientSignatureToken>
   <sp:RecipientEncryptionToken>
     <wsp:Policy> ... </wsp:Policy>
   </sp:RecipientEncryptionToken>
  )
   <sp:AlgorithmSuite ... > ... </sp:AlgorithmSuite>
   <sp:Layout ... > ... </sp:Layout> ?
   <sp:IncludeTimestamp ... /> ?
   <sp:EncryptBeforeSigning ... /> ?
   <sp:EncryptSignature ... /> ?
   <sp:ProtectTokens ... /> ?
   <sp:OnlySignEntireHeadersAndBody ... /> ?
   ...
  </wsp:Policy>
  ...
</sp:AsymmetricBinding>

策略示例

例 6.4 “Asymmetric Binding 的示例” 演示了支持使用签名和加密的非对称绑定的示例,其中签名和加密是使用公钥/私钥对(使用非对称加密)进行的签名和加密。此示例不指定消息的哪些部分应该被签名并加密。有关如何进行此操作的详情,请参考 第 6.2.5 节 “指定到加密和签名的消息部分”

例 6.4. Asymmetric Binding 的示例

<wsp:Policy wsu:Id="MutualCertificate10SignEncrypt_IPingService_policy">
  <wsp:ExactlyOne>
    <wsp:All>
      <sp:AsymmetricBinding
          xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
        <wsp:Policy>
          <sp:InitiatorToken>
            <wsp:Policy>
              <sp:X509Token
                  sp:IncludeToken="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy/IncludeToken/AlwaysToRecipient">
                <wsp:Policy>
                  <sp:WssX509V3Token10/>
                </wsp:Policy>
              </sp:X509Token>
            </wsp:Policy>
          </sp:InitiatorToken>
          <sp:RecipientToken>
            <wsp:Policy>
              <sp:X509Token
                  sp:IncludeToken="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy/IncludeToken/Never">
                <wsp:Policy>
                  <sp:WssX509V3Token10/>
                </wsp:Policy>
              </sp:X509Token>
            </wsp:Policy>
          </sp:RecipientToken>
          <sp:AlgorithmSuite>
            <wsp:Policy>
              <sp:Basic256/>
            </wsp:Policy>
          </sp:AlgorithmSuite>
          <sp:Layout>
            <wsp:Policy>
              <sp:Lax/>
            </wsp:Policy>
          </sp:Layout>
          <sp:IncludeTimestamp/>
          <sp:EncryptSignature/>
          <sp:OnlySignEntireHeadersAndBody/>
        </wsp:Policy>
      </sp:AsymmetricBinding>
      <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:InitiatorToken

initiator 令牌 引用发起方拥有的公钥/私钥-对。此令牌使用如下:

  • 令牌的私钥签名信息从启动器发送到接收者。
  • 令牌的公钥验证接收方收到的签名。
  • 令牌的公钥加密从接收者发送到启动器的消息。
  • 令牌的私钥解密发起方接收的消息。

混淆,此令牌由发起方 接收者使用。但是,只有启动器有权访问私钥,因此在这种情况下,令牌可以被认为是属于发起方。在 第 6.2.2 节 “基本签名和加密(cenario)” 中,initiator 令牌是证书 Alice。

这个元素应包含嵌套的 wsp:Policy 元素和 sp:X509Token 元素,如下所示。sp:IncludeToken 属性设为 AlwaysToRecipient,它指示运行时包含 Alice 的公钥,并将每个消息发送到接收者。如果接收者希望使用启动器的证书来执行身份验证,这个选项很有用。最深嵌套的元素 WssX509V3Token10 是可选的。它指定 X.509 证书应符合哪些规格版本。此处可以指定以下替代(或 none):

sp:WssX509V3Token10
此可选元素是一个策略断言,表示应使用 X509 版本 3 令牌。
sp:WssX509Pkcs7Token10
此可选元素是一个策略断言,表示应使用 X509 PKCS7 令牌。
sp:WssX509PkiPathV1Token10
此可选元素是一个策略断言,表示应使用 X509 PKI Path Version 1 令牌。
sp:WssX509V1Token11
此可选元素是一个策略断言,表示应使用 X509 版本 1 令牌。
sp:WssX509V3Token11
此可选元素是一个策略断言,表示应使用 X509 版本 3 令牌。
sp:WssX509Pkcs7Token11
此可选元素是一个策略断言,表示应使用 X509 PKCS7 令牌。
sp:WssX509PkiPathV1Token11
此可选元素是一个策略断言,表示应使用 X509 PKI Path Version 1 令牌。

sp:RecipientToken

接收者令牌 引用由接收者拥有的公钥/私钥-对。此令牌使用如下:

  • 令牌的公钥加密从启动器发送到接收者的消息。
  • 令牌的私钥解密接收方接收的消息。
  • 令牌的私钥签名从接收者发送到发起方。
  • 令牌的公钥验证发起方接收的签名。

混淆,该令牌由接收者 启动器使用。但是,只有接收者可以访问私钥,因此使用这个意义,令牌可以被认为属于接收者。在 第 6.2.2 节 “基本签名和加密(cenario)” 中,接收者令牌是证书 Bob。

这个元素应包含嵌套的 wsp:Policy 元素和 sp:X509Token 元素,如下所示。sp:IncludeToken 属性设为 Never,因为不需要在回复消息中包含 Bob 的公钥。

注意

在 Apache CXF 中,不需要在消息中发送 Bob 或 Alice 的令牌,因为 Bob 的证书和 Alice 的证书在两端均提供,请参阅 第 6.2.6 节 “提供加密密钥和签名密钥”

sp:AlgorithmSuite

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

SP:布局

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

sp:IncludeTimestamp

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

sp:EncryptBeforeSigning

如果消息部分同时受到加密和签名,则需要指定执行这些操作的顺序。默认顺序是在加密前签名。但是,如果您将这个元素包含在非对称策略中,则这个顺序将更改为在签名前加密。

注意

隐式,此元素也会影响解密和签名验证操作的顺序。例如,如果在加密前发送消息符号的发件人,则消息的接收器必须在验证签名前进行解密。

sp:EncryptSignature

这个元素指定必须加密消息签名(通过加密令牌,如 第 6.2.6 节 “提供加密密钥和签名密钥”所述)。默认为 false。

注意

邮件签名 是通过签署消息的各种部分直接获取的签名,如消息正文、邮件标题或独立元素(请参阅 第 6.2.5 节 “指定到加密和签名的消息部分”)。有时,消息签名被称为 主签名,因为 WS-SecurityPolicy 规格还支持端到端支持令牌的概念,该令牌用于签署主签名。因此,如果 sp:EndorsingTokens 元素应用于端点,您可以有一个签名链:主签名(签名信息本身)和辅助签名(为主签名签名签名)。

有关各种支持令牌的详情,请参考 “SupportingTokens assertions”一节

sp:ProtectTokens

此元素指定签名必须包含用于生成该签名的令牌。默认为 false。

sp:OnlySignEntireHeadersAndBody

此元素指定签名 只应用于 整个正文或整个标头,不适用于标题的正文或子元素的子元素。启用这个选项时,您可以有效地防止使用 sp:SignedElements 断言(请参阅 第 6.2.5 节 “指定到加密和签名的消息部分”)。