第6章 メッセージ保護

概要

この章では、次のメッセージ保護メカニズムについて説明します。漏洩に対する保護 (暗号化アルゴリズムの採用による) およびメッセージの改ざんに対する保護 (メッセージダイジェストアルゴリズムの採用による)。保護は、さまざまな粒度レベルおよび異なるプロトコル層に適用できます。トランスポート層には、メッセージのコンテンツ全体に対して保護を適用するオプションがあります。SOAP レイヤーでは、メッセージのさまざまな部分 (本文、ヘッダー、または添付) に保護を適用するオプションがあります。

6.1. トランスポート層のメッセージ保護

概要

トランスポート層のメッセージ保護とは、トランスポート層によって提供されるメッセージ保護 (暗号化と署名) を指します。たとえば、HTTPS は、SSL/TLS を使用した暗号化およびメッセージ署名機能を提供します。実際、HTTPS は Blueprint XML 設定を使用してすでに完全に設定可能であるため、WS-SecurityPolicy は HTTPS 機能セットに多くを追加しません (3章HTTPS の設定 を参照)。ただし、HTTPS のトランスポートバインディングポリシーを指定する利点は、WSDL コントラクトにセキュリティー要件を埋め込むことができることです。したがって、WSDL コントラクトのコピーを取得するクライアントは、WSDL コントラクトのエンドポイントのトランスポート層のセキュリティー要件を検出できます。

警告

トランスポートレイヤーで SSL/TLS セキュリティーを有効にする場合は、Poodle 脆弱性 (CVE-2014-3566) に対して保護するために、SSLv3 プロトコルを明示的に無効にする必要があります。詳細は、Disabling SSLv3 in JBoss Fuse 6.x and JBoss A-MQ 6.x を参照してください。

前提条件

WS-SecurityPolicy を使用して HTTPS トランスポートを設定する場合は、ブループリント設定で HTTPS セキュリティーも適切に設定する必要があります。

例6.1「Blueprint でのクライアント HTTPS の設定」 HTTPS トランスポートプロトコルを使用するようにクライアントを設定する方法を示します。sec:keyManagers 要素は、クライアント自身の証明書 alice.pfx を指定し、sec:trustManagers 要素は信頼できる CA リストを指定します。http:conduit 要素の name 属性が、ワイルドカードを使用してエンドポイントアドレスに一致させる方法に注意してください。クライアント側で HTTPS を設定する方法の詳細については、3章HTTPS の設定 を参照してください。

例6.1 Blueprint でのクライアント 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.pfx を指定し、sec: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>
重要

Poodle 脆弱性 (CVE-2014-3566) から保護するために、サーバー側で secureSocketProtocol を TLSv1 に設定する必要があります。

ポリシー件名

トランスポートバインディングポリシーは、エンドポイントポリシーサブジェクトに適用する必要があります (「エンドポイントポリシーサブジェクト」 を参照)。たとえば、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

この要素には 2 つの効果があります。特定のタイプのセキュリティートークンが必要であり、トランスポートがどのように保護されているかを示します。たとえば、sp:HttpsToken を指定すると、接続が HTTPS プロトコルによって保護され、セキュリティートークンが X.509 証明書であることが示されます。

sp:AlgorithmSuite

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

sp:Layout

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

sp:IncludeTimestamp

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

sp:MustSupportRefKeyIdentifier

この要素は、WS-Security 1.0 仕様で指定されているように、セキュリティーランタイムが キー識別子 トークン参照を処理できる必要があることを指定します。キー識別子 は、署名または暗号化要素内で使用できる鍵トークンを識別するメカニズムです。Apache CXF にはこの機能が必要です。

sp:MustSupportRefIssuerSerial

この要素は、WS-Security 1.0 仕様で指定された Issuer および Serial Number トークン参照を処理できる必要があることを指定します。発行者とシリアル番号は、署名または暗号化要素内で使用される可能性のあるキートークンを識別するためのメカニズムです。Apache CXF にはこの機能が必要です。