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「非対称バインディングの例」 は、署名と暗号化によるメッセージ保護をサポートする非対称バインディングの例を示しています。署名と暗号化は、公開鍵と秘密鍵のペアを使用して (つまり、非対称暗号化を使用して) 実行されます。この例では、署名して暗号化 する 必要があるメッセージのパーツを指定していません。方法は 「暗号化および署名するメッセージの一部の指定」 を参照してください。

例6.4 非対称バインディングの例

<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

イニシエータートークン は、イニシエーターが所有する公開鍵/秘密鍵のペアを参照します。このトークンは以下のように使用されます。

  • トークンの秘密鍵は、イニシエーターから受信者に送信されるメッセージに署名します。
  • トークンの公開鍵は、受信側が受信した署名を検証します。
  • トークンの公開鍵は、受信者からイニシエーターに送信されるメッセージを暗号化します。
  • トークンの秘密鍵は、イニシエーターが受信したメッセージを復号します。

このトークンは、イニシエーター受信者の両方で使用されます。ただし、イニシエーターのみが秘密鍵にアクセスできるようにするため、トークンはイニシエーターに所属することができます。「基本的な署名および暗号化シナリオ」 では、イニシエータートークンは証明書 Alice です。

この要素には、以下のようにネストされた wsp:Policy 要素と sp:X509Token 要素が含まれている必要があります。sp:IncludeToken 属性は AlwaysToRecipient に設定され、受信者に送信されるすべてのメッセージに Alice の公開鍵を含めるようランタイムに指示します。このオプションは、受信側がイニシエーターの証明書を使用して認証を行う場合に便利です。最も深くネストされた要素 WssX509V3Token10 はオプションになります。X.509 証明書に準拠する仕様バージョンを指定します。以下の代替方法 (または none) をここで指定できます。

sp:WssX509V3Token10
これは任意の要素で、X509 Version 3 トークンを使用する必要があることを示すポリシーアサーションです。
sp:WssX509Pkcs7Token10
この任意の要素は、X509 PKCS7 トークンを使用する必要があることを示すポリシーアサーションです。
sp:WssX509PkiPathV1Token10
これは任意の要素で、X509 PKI Path Version 1 トークンを使用する必要があることを示すポリシーアサーションです。
sp:WssX509V1Token11
これは任意の要素で、X509 Version 1 トークンを使用する必要があることを示すポリシーアサーションです。
sp:WssX509V3Token11
これは任意の要素で、X509 Version 3 トークンを使用する必要があることを示すポリシーアサーションです。
sp:WssX509Pkcs7Token11
この任意の要素は、X509 PKCS7 トークンを使用する必要があることを示すポリシーアサーションです。
sp:WssX509PkiPathV1Token11
これは任意の要素で、X509 PKI Path Version 1 トークンを使用する必要があることを示すポリシーアサーションです。

sp:RecipientToken

受信側トークン は、受信側が所有する公開鍵/秘密鍵のペアを参照します。このトークンは以下のように使用されます。

  • トークンの公開鍵は、イニシエーターから受信者に送信されるメッセージを暗号化します。
  • トークンの秘密鍵は、受信側によって受信されるメッセージを復号化します。
  • トークンの秘密鍵は、受信者からイニシエーターに送信されるメッセージに署名します。
  • トークンの公開キーは、イニシエーターが受信した署名を検証します。

このトークンは、受信側 イニシエーターの両方で使用されます。ただし、受信側のみが秘密鍵にアクセスできるため、その場合はトークンを受信者に所属することができます。「基本的な署名および暗号化シナリオ」 では、受信側トークンは証明書 Bob です。

この要素には、以下のようにネストされた wsp:Policy 要素と sp:X509Token 要素が含まれている必要があります。リプライメッセージに Bob の公開鍵を含める必要がないため、sp:IncludeToken 属性は Never に設定されます。

注記

Apache CXF では、Bob の証明書と Alice の証明書が接続の最後で提供されるため、メッセージに Bob または Alice のトークンを送信する必要はありません。「暗号化キーおよび署名キーの提供」 を参照してください。

sp:AlgorithmSuite

この要素は、署名と暗号化に使用する一連の暗号化アルゴリズムを指定します。利用可能なアルゴリズムスイートの詳細については、「アルゴリズムスイートの指定」 を参照してください。

sp:Layout

この要素は、セキュリティーヘッダーが SOAP メッセージに追加される順序で条件を適用するかどうかを指定します。sp:Lax 要素は、セキュリティーヘッダーの順序に条件を課さないことを指定します。sp:Lax の代替は、sp:Strictsp:LaxTimestampFirst、または sp:LaxTimestampLast です。

sp:IncludeTimestamp

この要素がポリシーに含まれる場合、ランタイムは wsu:Timestamp 要素を wsse:Security ヘッダーに追加します。デフォルトでは、タイムスタンプは含まれ ません

sp:EncryptBeforeSigning

メッセージ部分が暗号化と署名の両方に依存する場合は、これらの操作が実行される順序を指定する必要があります。デフォルトの順序は、暗号化前に署名することです。ただし、非対称ポリシーにこの要素を含めると、署名前に暗号化するように順序が変更されます。

注記

この要素は暗黙的に復号化および署名の検証操作の順序にも影響します。たとえば、暗号化前にメッセージ署名の送信者が送信される場合、メッセージの受信側は署名を検証する前に復号化する必要があります。

sp:EncryptSignature

この要素は、「暗号化キーおよび署名キーの提供」で指定されている暗号化トークンによって、メッセージ署名を暗号化する必要があることを指定します。デフォルトは false です。

注記

メッセージ署名 は、メッセージのボディー、メッセージヘッダー、個々の要素など、メッセージのさまざまな部分に署名することで直接取得された署名です (「暗号化および署名するメッセージの一部の指定」 を参照してください)。WS-SecurityPolicy 仕様は プライマリー署名の署名 に使用される終了トークンの概念をサポートするため、メッセージの署名はプライマリー署名と呼ばれることがあります。したがって、sp:EndorsingSupportingTokens 要素がエンドポイントに適用される場合、署名チェーン (メッセージ自体に署名するプライマリー署名とプライマリー署名に署名するセカンダリー署名) を持つことができます。

各種のエンドツーエンドのサポートトークンに関する詳細は、「SupportingTokens アサーション」 を参照してください。

sp:ProtectTokens

この要素は、署名がその署名の生成に使用されるトークンに対応する必要があるように指定します。デフォルトは false です。

sp:OnlySignEntireHeadersAndBody

この要素は、ヘッダーボディーまたはサブ要素のサブ要素ではなく、本文全体またはヘッダー全体に のみ、署名を適用できることを指定します。このオプションを有効にすると、実質的に sp:SignedElements アサーションを使用できなくなります (「暗号化および署名するメッセージの一部の指定」 を参照)。