ヘッダーをスキップ
Oracle® Fusion Middleware Oracle Service Bus開発者ガイド
11g リリース1 (11.1.1.3)
B61435-01
  ドキュメント・ライブラリへ移動
ライブラリ
製品リストへ移動
製品
目次へ移動
目次

前
 
次
 

52 Webサービスのメッセージ・レベルでのセキュリティの構成

メッセージ・レベルのセキュリティでは、Webサービス・クライアントがOracle Service Busプロキシ・サービスまたはビジネス・サービスとの接続を確立した後、プロキシ・サービスまたはビジネス・サービスがこのメッセージを処理する前にSOAPメッセージに対してセキュリティ・チェックが適用されます。

メッセージ・レベルのセキュリティは、次のように分類されます。

以下の項では、プロキシ・サービスまたはビジネス・サービスのメッセージ・レベルでのセキュリティの構成について説明します。

52.1 メッセージ・レベルのセキュリティについて

Oracle Service Busでは、HTTP (HTTPS含む)またはJMSプロトコル経由で送信されるSOAPメッセージに対し、メッセージ・レベルのセキュリティをサポートします。通常、これらのプロトコルで提供されるトランスポート・レベルのセキュリティに加えて、メッセージ・レベルのセキュリティを使用します。トランスポート・レベル、メッセージ・レベル、または両方のレベルで資格証明を提供するようにWebサービス・クライアントに要求できます。両方のレベルで資格証明を提供するようにクライアントに要求する場合、Oracle Service Busはプロキシ・サービスの認証および認可に対してメッセージ・レベルの資格証明を使用します。

Webサービスであるプロキシ・サービスまたはビジネス・サービスのメッセージ・レベルのセキュリティ要件を指定するには、Webサービス・ポリシー(WS-Policy)フレームワークを使用します。Webサービス・ポリシー(WS-Policy)フレームワークについては、第52章「Webサービスのメッセージ・レベルでのセキュリティの構成」で説明しています。

メッセージ・レベルのセキュリティでは、プロキシ・サービスまたはビジネス・サービスが、保護される操作、およびWebサービス・クライアントがSOAPメッセージ(操作を呼び出すリクエストを含む)に適用する必要がある次のセキュリティ対策を指定します。

これらのセキュリティ対策のすべてで、SOAPメッセージのセキュリティ・トークンをコード化することがクライアントに要求されます。プロキシ・サービスまたはビジネス・サービスは、SOAPメッセージでのコード化を要求するセキュリティ・トークンのタイプを指定します。

52.1.1 メッセージ・レベルのセキュリティの一連のアクションのサンプル

メッセージ・レベルのセキュリティを要求するプロキシ・サービスにSOAPメッセージを送信するために、以下のアクションが発生します。

  1. Webサービス・クライアントがSOAPヘッダーを生成し、そのヘッダーをSOAPメッセージ・エンベロープに追加します。そのヘッダーには、デジタル署名、セキュリティ・トークン、および他の構成要素が含まれます。

  2. プロキシ・サービスは、保護されたエンベロープを処理するときに、メッセージを復号化して、セキュリティ・ヘッダーを削除します。

  3. 次に、メッセージがセキュリティ要件に準拠していることを確認します。たとえば、必要なメッセージ部分が署名または暗号化(またはその両方)されているかどうか、また必要なトークンが必要なクレームと共に存在するかどうかをプロキシ・サービスが確認します。

  4. プロキシ・サービスからクライアントへのレスポンスでは、プロセス全体が逆方向に繰り返されます。

52.2 プロキシ・サービスのメッセージ・レベルのアクセス制御ポリシー

メッセージの整合性とメッセージの機密性によってメッセージが仲介で参照または改ざんされていないことが保証され、メッセージ認証によってクライアントは既知のユーザーであるという立証を要求されますが、これは どの 既知のユーザーがプロキシ・サービス操作を呼び出すことを許可(認可)されているかを指定するものではありません。

認可されたユーザーにアクセスを制限するには、Oracle Service Busコンソールを使用してメッセージ・レベルのアクセス制御ポリシーを作成します。これらのポリシーにより、認可されたクライアントからのSOAPメッセージのみをプロキシ・サービスで処理できます。

52.3 プロキシ・サービスのメッセージ・レベルのセキュリティの構成

インバウンド・メッセージ・レベルのセキュリティ用に次のいずれかの方法をサポートするように、プロキシ・サービスを構成できます。

52.3.1 アクティブな仲介プロキシ・サービスの作成:主な手順

アクティブな仲介として動作するようにプロキシ・サービスを作成するには

  1. テキスト・エディタまたはIDEで、プロキシ・サービスを定義するWSDLドキュメントを作成します。

    • ポリシーをコンソールから直接バインドする場合は、WSDLにポリシー文を含める必要はありません。

    • ポリシーをWSDLベースにする場合は、WSDLドキュメントに、定義済みのポリシーなどの、1つまたは複数のWebサービス・ポリシー(WS-Policy)文を追加します。

  2. Oracle Service Busコンソールで、WSDLドキュメントをOracle Service Bus WSDLリポジトリにインポートし、すべてのWSDLの依存関係を解決します。

    『Oracle Fusion Middleware Oracle Service Bus管理者ガイド』の「WSDLの追加」を参照してください。

  3. Oracle Service BusをサポートするようにWebLogic Securityフレームワークをまだ構成していない場合は、クライアントからプロキシ・サービスへのリクエストを保護するセキュリティ・ポリシー・アサーションが、プロキシ・サービスのいずれかの操作のWS-Policyに含まれるかどうかに応じて、次の処理(1つまたは複数)を行います。

    • 操作のリクエスト・ポリシーでWS-Security X.509証明書トークンによる認証を要求する場合は、__SERVICE_BUS_INBOUND_WEB_SERVICE_SECURITY_MBEAN__というWebサービス・セキュリティ構成を行います。45.7項「Oracle WebLogic Securityフレームワークの構成:主な手順」を参照してください。

    • 操作のリクエスト・ポリシーでパスワード・ダイジェストを使用したWS-Securityユーザー名/パスワード・トークンによる認証を要求する場合は、必ずパスワード・ダイジェストを有効にします。45.7項「Oracle WebLogic Securityフレームワークの構成:主な手順」を参照してください。

    • 操作のリクエスト・ポリシーでSAMLトークンの使用を要求する場合は、このプロキシ・サービスのSAMLアサーション側を構成する必要があります。53.3項「プロキシ・サービス・リクエストでのSAMLトークンの認証」を参照してください。

    • 操作のリクエスト・ポリシーでデジタル署名を要求する場合は、受け入れられたクライアント署名検証証明書をOracle WebLogic Server証明書レジストリに登録します。45.7項「Oracle WebLogic Securityフレームワークの構成:主な手順」を参照してください。

    • 操作のリクエスト・ポリシーでデジタル暗号化を要求する場合は、暗号化の資格証明を持つサービス・キー・プロバイダを構成します。プロキシ・サービスはこの資格証明を使用して、暗号化されたSOAPメッセージを復号化します。『Oracle Fusion Middleware Oracle Service Bus管理者ガイド』の「サービス・キー・プロバイダ」の「サービス・キー・プロバイダの追加」を参照してください。

  4. Oracle Service Busコンソールで、プロキシ・サービスからクライアントへのレスポンスを保護するセキュリティ・ポリシー・アサーションが、プロキシ・サービスのいずれかの操作のWS-Policyに含まれるかどうかに応じて、次の処理(1つまたは複数)を行います。

    • 操作のレスポンス・ポリシーでデジタル署名を要求する場合は、デジタル署名資格証明を持つサービス・キー・プロバイダを構成します。1つで暗号化とデジタル署名の両方の資格証明を持つサービス・キー・プロバイダを作成できます。『Oracle Fusion Middleware Oracle Service Bus管理者ガイド』の「サービス・キー・プロバイダの追加」を参照してください。

    • 操作のレスポンス・ポリシーで暗号化を指定する場合、クライアントはリクエスト時に証明書をプロキシ・サービスに送信する必要があります。プロキシ・サービスはクライアントの公開鍵を使用してレスポンスを暗号化します。クライアントの証明書は、プロキシ・サービスの暗号化証明書と異なる必要があります。

  5. Oracle Service Busコンソールで、インポートしたWSDLからプロキシ・サービスを作成し、変更をアクティブ化します。

  6. WSDLドキュメントにWS-Policy添付ファイルが含まれておらず、それらを追加する場合、または、WSDLに含まれるものとは別のWS-Policyを指定する場合は、作成したプロキシ・サービスを編集して、「ポリシー」タブで以下を行います。

    1. カスタム・ポリシー・バインドを選択します。

    2. サービス全体に適用するポリシーを指定するには、サービス名エントリを展開します。「追加」をクリックしてポリシーを検索し、選択します。

    3. 操作またはその操作のリクエスト/レスポンスに適用するポリシーを指定するには、操作名エントリを展開します。「追加」をクリックしてポリシーを検索し、選択します。

    ポリシー・バインディングを更新します。

  7. 作成したプロキシ・サービスを編集して、「セキュリティ」タブから以下を行います。

    1. 作成したサービス・キー・プロバイダを指定します。

    2. 「WS-Securityヘッダーの処理」チェック・ボックスを選択します。

    3. (オプション)ユーザー、グループ、またはロールが保護された操作を呼び出すことができる条件を指定する、プロキシ・サービスのデフォルトのメッセージ・レベルでのアクセス制御ポリシーを変更します。『Oracle Fusion Middleware Oracle Service Bus管理者ガイド』の「メッセージ・レベルのアクセス・ポリシーの編集」を参照してください。

    4. (オプション)プロキシ・サービスのメッセージ・レベルの認証設定を変更します。

52.3.2 パススルー・プロキシ・サービスの作成:主な手順

パススルー・プロキシ・サービスを作成するには

  1. プロキシ・サービスが、処理されていないSOAPメッセージを渡すビジネス・サービスを作成します。構成の方法には、以下の2通りがあります。

    • ビジネス・サービスを、WS-Policy文を含むWebサービスとします。

    • ビジネス・サービスで、WS-Policyを直接バインドします。サービスのベースとなるWSDLには、WS-Policy文を含めないでください。

    52.4項「ビジネス・サービスのメッセージ・レベルのセキュリティの構成:主な手順」を参照してください。

  2. WSDLドキュメントにWS-Policy添付ファイルが含まれておらず、それらを追加する場合、または、WSDLに含まれるものとは別のWS-Policyを指定する場合は、作成したビジネス・サービスを編集して、「ポリシー」タブで以下を行います。

    1. カスタム・ポリシー・バインドを選択します。

    2. サービス全体に適用するポリシーを指定するには、サービス名エントリを展開します。「追加」をクリックしてポリシーを検索し、選択します。

    3. 操作またはその操作のリクエスト/レスポンスに適用するポリシーを指定するには、操作名エントリを展開します。「追加」をクリックしてポリシーを検索し、選択します。

    ポリシー・バインディングを更新します。

  3. Oracle Service Busコンソールで、WSDLドキュメントからプロキシ・サービスを作成します。作成したビジネス・サービスで使用したWSDLドキュメントと同じドキュメントを使用できます。変更をアクティブ化します。

  4. 作成したプロキシ・サービスを後で編集する場合は、「セキュリティ」タブの「WS-Securityヘッダーの処理」チェック・ボックスを選択しないでください

  5. 作成したビジネス・サービスにルーティングするプロキシ・サービスを構成します。

    クライアントのSOAPメッセージが呼出しをリクエストする操作に基づいてビジネス・サービスにルーティングする場合は、SOAP本体のアルゴリズム以外の操作選択アルゴリズムを指定するようにルーティングを構成する必要があります。プロキシ・サービス・パイプラインのアクションによって、署名または暗号化されたWS-SecurityヘッダーまたはSOAPエンベロープの部分が変更されないことを確認します。デジタル署名されたクリア・テキストのメッセージ部分を変更すると、ほとんどの場合、デジタル署名は壊れます。これは、後で署名を検証できないためです。

    2.3項「プロキシ・サービスの操作」を参照してください。

52.4 ビジネス・サービスのメッセージ・レベルのセキュリティの構成:主な手順

アウトバウンドメッセージ・レベルのセキュリティは、Oracle Service Busプロキシ・サービスとSOAP-HTTPビジネス・サービス間のメッセージ、またはOracle Service Busプロキシ・サービスとSOAP-JMSビジネス・サービス間のメッセージに適用されます。また、このセキュリティはリクエストとレスポンスの両方に適用されます。

SOAP-HTTPまたはSOAP-JMS Webサービスを表すビジネス・サービスに対してアウトバウンド・メッセージ・レベルのセキュリティを構成するには

  1. テキスト・エディタまたはIDEで、ポリシーを定義するWSDLドキュメントを作成します。

  2. Oracle Service Busコンソールで、WebサービスのWSDLドキュメントをOracle Service Bus WSDLリポジトリにインポートし、すべてのWSDLの依存関係を解決します。

    『Oracle Fusion Middleware Oracle Service Bus管理者ガイド』のWSDLの追加に関する項を参照してください。

  3. Oracle Service Busコンソールで、プロキシ・サービスからビジネス・サービスへのリクエストを保護するWS-Policy文がWSDLドキュメントに含まれるかどうかに応じて次の処理(1つまたは複数)を行います。

    • いずれかの操作のリクエスト・ポリシーに、サポートされるトークンのタイプの1つとしてWS-Securityユーザー名トークンによるIDアサーションが含まれる場合は、ビジネス・サービスに対するサービス・アカウントを構成します。このサービス・アカウントで、プロキシ・サービスがビジネス・サービスに送信するユーザー名とパスワードを提供します。このビジネス・サービスにルーティングするプロキシ・サービスは、このサービス・アカウントからユーザー名とパスワードを取得します。2.1.16項「サービス・アカウント・リソースの作成」および2.2項「ビジネス・サービスの操作」を参照してください。

    • 操作のリクエスト・ポリシーでパスワード・ダイジェストを使用したWS-Securityユーザー名/パスワード・トークンによる認証を要求する場合は、必ずパスワード・ダイジェストを有効にします。45.7項「Oracle WebLogic Securityフレームワークの構成:主な手順」を参照してください。

    • 操作のリクエスト・ポリシーでデジタル署名を要求する場合は、デジタル署名資格証明を持つサービス・キー・プロバイダを構成します。1つで暗号化とデジタル署名の両方の資格証明を持つサービス・キー・プロバイダを作成できます。『Oracle Fusion Middleware Oracle Service Bus管理者ガイド』の「サービス・キー・プロバイダの追加」を参照してください。

  4. ビジネス・サービスの操作のレスポンスポリシーで暗号化を要求する場合(つまり、ビジネス・サービスが、プロキシ・サービスの暗号化公開鍵でレスポンスを暗号化します)、サービス・キー・プロバイダを構成して暗号化の資格証明をサービス・キー・プロバイダに割り当ててください。


    注意:

    暗号化されるバックエンドのレスポンス・メッセージ: ビジネス・サービスのレスポンス・ポリシーで暗号化を指定する場合、プロキシ・サービスはリクエスト時に暗号化証明書をビジネス・サービスに送信します。ビジネス・サービスは、プロキシ・サービスの公開鍵を使用してレスポンスを暗号化します。プロキシ・サービスの暗号化資格証明は、ビジネス・サービスの暗号化資格証明と異なることが必要です。

  5. ビジネス・サービスのポリシーがSAMLアサーションの使用を指定している場合は、WebLogic SAML資格証明マッピング・プロバイダV2のアサーション側を構成します。詳細については、53.1項「SAML資格証明マッピングの構成:主な手順」を参照してください。

  6. インポートしたWSDLからビジネス・サービスを作成します。変更をアクティブ化してください。

    2.2項「ビジネス・サービスの操作」を参照してください。

  7. ポリシーをサービスに直接付加する場合は、作成したビジネス・サービスを編集して、「ポリシー」タブで以下を行います。

    1. カスタム・ポリシー・バインドを選択します。

    2. サービス全体に適用するポリシーを指定するには、サービス名エントリを展開します。「追加」をクリックしてポリシーを検索し、選択します。

    3. 操作またはその操作のリクエスト/レスポンスに適用するポリシーを指定するには、操作名エントリを展開します。「追加」をクリックしてポリシーを検索し、選択します。

    「更新」をクリックして、ビジネス・サービスを更新します。

  8. SOAPメッセージをビジネス・サービスにルーティングするプロキシ・サービスを作成します。アクティブな仲介プロキシ・サービスまたはパススルー・プロキシ・サービスを使用できます。

    52.3.1項「アクティブな仲介プロキシ・サービスの作成:主な手順を参照してください。

52.5 カスタムWS-Policy文の例

以下の項では、WS-Policy仕様に基づき、Oracle独自のセキュリティ・ポリシー・スキーマを使用して記述されたカスタムWS-Policy文の例を示します。

52.5.1 例: SOAP本体およびヘッダー部分の暗号化

SOAPメッセージの本文全体ではなく、特定の部分を暗号化またはデジタル署名するように指定する必要がある場合は、カスタムWS-Policyファイルを作成する必要があります。

例52-1は、以下を実行する抽象WS-Policy文です。

  • クライアントのメッセージに認証用のユーザー名とパスワード・トークンを要求します

  • クライアントに(セキュリティ・ヘッダーにある)ユーザー名およびパスワード・トークンの暗号化を要求します。

  • クライアントに/definitions/message/CreditCardNumber要素の暗号化を要求します。

このポリシーは抽象的であるため、ビジネス・サービスでは使用できません: そのKeyInfo要素には、暗号化用の証明書が含まれません。そのかわりに、このWS-Policy文を使用するプロキシ・サービスをアクティブ化すると、Oracle Service Busは、プロキシ・サービスと関連付けられたサービス・キー・プロバイダからの暗号化証明書をWS-Policy文にバインドします。『Oracle Fusion Middleware Oracle Service Bus管理者ガイド』の「サービス・キー・プロバイダ」を参照してください。

図52-1 抽象ポリシーへの証明書のバインディング

図52-1の説明が続きます
図52-1「抽象ポリシーへの証明書のバインディング」の説明

例52-1では以下のことも行われます。

  • KeyWrappingAlgorithm要素で、対称キーをラップするRSA 1.5アルゴリズムをクライアントが使用する必要があることを指定します。

  • EncryptionAlgorithmで、クライアントがTriple DES (Data Encryption Standard)アルゴリズムを使用してセキュリティ・ヘッダーとメッセージ本体の暗号化を実行する必要があることを指定します。

例52-1 SOAP本体およびヘッダー部分の暗号化

<wsp:Policy
   xmlns:wsp="http://schemas.xmlsoap.org/ws/2004/09/policy"
   xmlns:wssp="http://www.bea.com/wls90/security/policy"
   xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-
     wssecurity-utility-1.0.xsd"
   xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-
     wssecurity-secext-1.0.xsd"
   xmlns:m="http://example.org"
   wsu:Id="encrypt-custom-body-element-and-username-token">
    <!-- Require messages to provide a user name and password token 
         for authentication --> 
   <wssp:Identity>
      <wssp:SupportedTokens>
        <wssp:SecurityToken IncludeInMessage="true"
            TokenType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-
               wss-username-token-profile-1.0#UsernameToken">
            <wssp:UsePassword Type="http://docs.oasis-open.org/wss/2004/01/
                oasis-200401-wss-username-token-profile-1.0#PasswordText"/>
        </wssp:SecurityToken>
      </wssp:SupportedTokens>
   </wssp:Identity>
   <wssp:Confidentiality>
      <wssp:KeyWrappingAlgorithm
        URI="http://www.w3.org/2001/04/xmlenc#rsa-1_5"/>
      <!-- Require the user name and password in the security header
           to be encrypted --> 
      <wssp:Target>
        <wssp:EncryptionAlgorithm
           URI="http://www.w3.org/2001/04/xmlenc#tripledes-cbc"/>
        <wssp:MessageParts
          Dialect="http://www.bea.com/wls90/security/policy/wsee#part">
          wls:SecurityHeader(wsse:UsernameToken)
        </wssp:MessageParts>
      </wssp:Target>
      <!-- Require the /definitions/message/CreditCardNumber element to 
           be encrypted --> 
      <wssp:Target>
        <wssp:EncryptionAlgorithm
           URI="http://www.w3.org/2001/04/xmlenc#tripledes-cbc"/>
        <wssp:MessageParts>
          wsp:GetBody(.)/m:CreditCardNumber
        </wssp:MessageParts>
      </wssp:Target>
      <!-- This is an abstract policy because the KeyInfo element is
          empty. The KeyInfo data is bound to the policy at runtime --> 
      <wssp:KeyInfo/>
   </wssp:Confidentiality>
</wsp:Policy>

52.5.2 例:ビジネス・サービスの暗号化ポリシー

ビジネス・サービスへのメッセージを暗号化する場合は、カスタムWS-Policyを作成する必要があります。ポリシーは具象的(サービス・キー・プロバイダの証明書を使用するのではなく、暗号化証明書を含む必要があります)であること、および参照によって含めるのではなく、WSDLドキュメントに直接記述することが必要です。

通常、ビジネス・サービスへのメッセージを送信するプロキシ・サービスがパススルー・プロキシ・サービスである場合は、ビジネス・サービスへのメッセージを暗号化する必要があります。つまり、クライアントからメッセージを受信するプロキシ・サービスは、SOAPメッセージを処理しません。かわりに、プロキシ・サービスはメッセージをビジネス・サービスにルーティングし、ビジネス・サービスがWebサービス・セキュリティを確保します。第52章「Webサービスのメッセージ・レベルでのセキュリティの構成」を参照してください。

例52-2は、具象ポリシーを含むWSDLドキュメントです。この例では、以下に注意してください。

  • ポリシーによって、メッセージ本体の暗号化をクライアントに要求します。

  • クライアントが提供するトークンのタイプを指定するKeyInfo要素は、暗号化証明書を記述して埋め込むために使用する親要素です。BinarySecurityToken要素には、base-64エンコード形式の暗号化証明書が含まれます(例では、値は切り捨てられています)。証明書がPEM形式の場合、PEMファイル(PEM接頭辞と接尾辞なし)の内容はbase-64エンコード形式で表される証明書です。暗号化証明書がJDKキーストアに格納されている場合は、簡単にPEMファイルにエクスポートできます。

  • ポリシーによってユニークなIDが提供され、WSDLはURIフラグメントを使用してそのIDを参照します。51.4項「WSDLドキュメントへのWS-Policy文の付加」を参照してください。

例52-2 具象ポリシーによる本体の暗号化、WSDLドキュメントへのポリシーの埋め込み

<definitions name="WssServiceDefinitions"
  targetNamespace="http://com.bea.alsb/tests/wss"
  xmlns="http://schemas.xmlsoap.org/wsdl/"
  xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-
    wssecurity-utility-1.0.xsd"
  xmlns:wsp="http://schemas.xmlsoap.org/ws/2004/09/policy"
  ...>
  <wsp:UsingPolicy xmlns:n1="http://schemas.xmlsoap.org/wsdl/"
      n1:Required="true"/>
  <!-- The policy provides a unique ID -->
  <wsp:Policy wsu:Id="myEncrypt.xml">
    <wssp:Confidentiality
        xmlns:wssp="http://www.bea.com/wls90/security/policy">
    <wssp:KeyWrappingAlgorithm
        URI="http://www.w3.org/2001/04/xmlenc#rsa-1_5"/>
    <!-- Require the user name and password in the security header
         to be encrypted --> 
    <wssp:Target>
      <wssp:EncryptionAlgorithm
         URI="http://www.w3.org/2001/04/xmlenc#tripledes-cbc"/>
      <wssp:MessageParts Dialect="http://schemas.xmlsoap.org/2002/12/wsse#part">
         wsp:Body()
      </wssp:MessageParts>
    </wssp:Target>
      <!-- Embed the token type and encryption certificate --> 
      <wssp:KeyInfo>
        <wssp:SecurityToken 
            TokenType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-
               wss-x509-token-profile-1.0#X509v3"/>
        <wssp:SecurityTokenReference>
          <wssp:Embedded>
            <wsse:BinarySecurityToken
                EncodingType="http://docs.oasis-open.org/wss/2004/01/oasis-
                   200401-wss-soap-message-security-1.0#Base64Binary"
                ValueType="http://docs.oasis-open.org/wss/2004/01/oasis-
                   200401-wss-x509-token-profile-1.0#X509v3"
                 xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-
                   200401-wss-wssecurity-secext-1.0.xsd">
                 MIICfjCCAeegAwIBAgIQV/PDyj3...
            </wsse:BinarySecurityToken>
          </wssp:Embedded>
        </wssp:SecurityTokenReference>
      </wssp:KeyInfo>
    </wssp:Confidentiality>
  </wsp:Policy>
  <binding name="WssServiceSoapBinding" type="tns:WssService">
    <soap:binding style="document"
        transport="http://schemas.xmlsoap.org/soap/http"/>
    <operation name="getPurchaseOrder">
      <soap:operation soapAction="" style="document"/>
      <input>
        <soap:body parts="parameters" use="literal"/>
        <!-- Use a URI fragment to refer to the unique policy ID -->
        <wsp:Policy>
          <wsp:PolicyReference URI="#myEncrypt.xml"/>
        </wsp:Policy>
      </input>
      <output>
          <soap:body parts="parameters" use="literal"/>
        </output>
      </operation>
    </binding>
    ...
</definitions>

52.5.3 例:カスタムSOAPヘッダーの暗号化

<例52-3は、CreditCardNumberというカスタム・ヘッダーを暗号化する抽象WS-Policy文です。

SOAPメッセージの本文全体ではなく、特定の部分を暗号化またはデジタル署名するように指定する必要がある場合は、カスタムWS-Policyファイルを作成する必要があります。

このポリシーは抽象的であるため、ビジネス・サービスでは使用できません: そのKeyInfo要素には、暗号化用の証明書が含まれません。そのかわりに、このWS-Policy文を使用するプロキシ・サービスをアクティブ化すると、Oracle Service Busは、プロキシ・サービスと関連付けられたサービス・キー・プロバイダからの暗号化証明書をWS-Policy文にバインドします。『Oracle Fusion Middleware Oracle Service Bus管理者ガイド』の「サービス・キー・プロバイダ」を参照してください。

例52-3では以下のことも行われます。

  • KeyWrappingAlgorithm要素で、対称キーをラップするRSA 1.5アルゴリズムをクライアントが使用する必要があることを指定します。

  • EncryptionAlgorithmで、クライアントがTriple DES (Data Encryption Standard)アルゴリズムを使用してセキュリティ・ヘッダーの暗号化を実行する必要があることを指定します。

例52-3 カスタムSOAPヘッダーの暗号化

<wsp:Policy
   xmlns:wsp="http://schemas.xmlsoap.org/ws/2004/09/policy"
   xmlns:wssp="http://www.bea.com/wls90/security/policy"
   xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-
     wssecurity-utility-1.0.xsd"
   wsu:Id="dig-sig-for-get-header">
   <wssp:Confidentiality>
     <wssp:KeyWrappingAlgorithm
       URI="http://www.w3.org/2001/04/xmlenc#rsa-1_5"/>
     <!-- Require the custom CreditCardNumber header to be encrypted --> 
     <wssp:Target>
        <wssp:EncryptionAlgorithm
           URI="http://www.w3.org/2001/04/xmlenc#tripledes-cbc"/>
        <wssp:MessageParts
           Dialect="http://www.w3.org/TR/1999/REC-xpath-19991116">
           wsp:GetHeader(.)/n:CreditCardNumber
         </wssp:MessageParts>
     </wssp:Target>
     <wssp:KeyInfo/>
  </wssp:Confidentiality>
</wsp:Policy>

52.5.4 例:メッセージ本体とヘッダーの署名

例52-4は、SOAPメッセージの次の内容へのアクセスにデジタル署名を要求するWS-Policy文です。

  • header1というカスタム・ヘッダー

  • すべてのシステム・ヘッダー

  • タイム・スタンプ・セキュリティ・ヘッダー

  • メッセージ本体

例52-4 SOAPヘッダーと本体の署名の要求

<wsp:Policy
   xmlns:wsp="http://schemas.xmlsoap.org/ws/2004/09/policy"
   xmlns:wssp="http://www.bea.com/wls90/security/policy"
   xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-
   wssecurity-utility-1.0.xsd"
   wsu:Id="sign-custom-header-policy">
   <wssp:Integrity>
     <wssp:SignatureAlgorithm
       URI="http://www.w3.org/2000/09/xmldsig#rsa-sha1"/>
     <wssp:CanonicalizationAlgorithm
       URI="http://www.w3.org/2001/10/xml-exc-c14n#"/>
     <!-- Require the custom header header1 to be signed --> 
     <wssp:Target>
       <wssp:DigestAlgorithm URI="http://www.w3.org/2000/09/xmldsig#sha1"/>
       <wssp:MessageParts
         Dialect="http://www.w3.org/TR/1999/REC-xpath-19991116"
         xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-
           wssecurity-secext-1.0.xsd"
         xmlns:n="http://example.org">
         wsp:GetHeader(.)/n:header1
       </wssp:MessageParts>
     </wssp:Target>
     <!-- Require the system headers to be signed --> 
     <wssp:Target>
        <wssp:DigestAlgorithm URI="http://www.w3.org/2000/09/xmldsig#sha1"/>
           <wssp:MessageParts
              Dialect="http://www.bea.com/wls90/security/policy/wsee#part">
              wls:SystemHeaders()
           </wssp:MessageParts>
     </wssp:Target>
     <!-- Require the Timestamp header to be signed --> 
     <wssp:Target>
        <wssp:DigestAlgorithm URI="http://www.w3.org/2000/09/xmldsig#sha1"/>
        <wssp:MessageParts
          Dialect="http://www.bea.com/wls90/security/policy/wsee#part">
          wls:SecurityHeader(wsu:Timestamp)
        </wssp:MessageParts>
     </wssp:Target>
     <!-- Require the message body to be signed --> 
     <wssp:Target>
       <wssp:DigestAlgorithm URI="http://www.w3.org/2000/09/xmldsig#sha1"/>
       <wssp:MessageParts
         Dialect="http://schemas.xmlsoap.org/2002/12/wsse#part">
         wsp:Body()
       </wssp:MessageParts>
    </wssp:Target>
  </wssp:Integrity>
<wssp:MessageAge/>
</wsp:Policy>

52.5.5 例: SAML Holder-of-KeyによるSOAP本体の署名

例52-5は、holder-of-keyメソッドを使用してメッセージ本体に署名するようSAMLアサーション・プロバイダに要求するWS-Policy文です。「holder-of-key」サブジェクト確認が指定されたSAMLトークンは、リクエスト・メッセージの整合性を確保するために、受信側で信頼されていない可能性のあるX.509証明書をサブジェクトで使用できるようにすることを目的としたものです。

2つのSAML確認メソッド(sender-vouchesまたはholder-of-key)の詳細は、『Oracle Fusion Middleware Oracle WebLogic Serverセキュリティの理解』の「WebLogic WebサービスでのSAMLトークン・プロファイルのサポート」を参照してください。

『Oracle Fusion Middleware Oracle WebLogic Server Webサービス・リファレンス』の「Oracle WebLogic Serverセキュリティ・ポリシー・アサーションのリファレンス」で、ポリシーの要素について詳しく説明しています。

この例では、以下に注意してください。

  • Integrityは、SOAPメッセージの署名に使用するアルゴリズムやキーに加え、SOAPメッセージの一部または全体にデジタル署名することを指定します。

  • SignatureAlgorithmは、デジタル署名の計算に使用する暗号アルゴリズムを指定します。

  • CanonicalizationAlgorithmは、デジタル署名するSOAPメッセージの要素を標準化する(単純なまたは標準の形式で使用する)ために使用するアルゴリズムを指定します。指定できるのは、http://www.w3.org/2001/10/xml-exc-cl4n#のみです。

  • DigestAlgorithmは、SOAPメッセージの指定部分にデジタル署名する際に使用するダイジェスト・アルゴリズムを指定します。指定できるのは、http://www.w3.org/2000/09/xmldsig#sha1のみです。

  • MessagePartsは、署名されるべきSOAPメッセージの部分を指定します。この場合は本体です。

  • Dialectは、署名されるべきSOAPメッセージの部分の識別に使用される固有言語を指定します。

  • SupportedTokensは、デジタル署名で使用できる、サポートされているセキュリティ・トークンのリストを指定します。

  • SecurityTokenは、デジタル署名でサポートされているセキュリティ・トークンを指定します。

    IncludeInMessageは、SOAPメッセージにトークンを含めるかどうかを指定します。有効な値はtrueまたはfalseです。<Integrity>アサーションで使用される場合、この属性のデフォルト値はtrueです。

    TokenTypeは、セキュリティ・トークンのタイプを指定します。この場合、SAMLトークンを指定します。

  • Claimsは、特定のタイプのセキュリティ・トークンに関連付けられる追加メタデータ情報を指定します。SAMLトークンの場合、<ConfirmationMethod>子要素を定義して、SAML確認のタイプ(sender-vouchesまたはholder-of-key)を指定する必要があります。

  • ConfirmationMethodは、IDにSAMLトークンを使用する場合に使う確認メソッドのタイプ(sender-vouchesまたはholder-of-key)を指定します。

    <ConfirmationMethod>アサーション内の<ConfirmationMethod>アサーションを指定します。この確認メソッドのための<Integrity>アサーションにSAMLトークンを含めるのは、Webサービス・ランタイムで、sender-vouchesでは必要でないメッセージの整合性の証明が必要なためです。

例52-5 SAML Holder-of-KeyメソッドによるSOAP本体の署名

<wsp:Policy
   xmlns:wsp="http://schemas.xmlsoap.org/ws/2004/09/policy"
   xmlns:wssp="http://www.bea.com/wls90/security/policy"
   xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-
     wssecurity-utility-1.0.xsd"
   xmlns:wls="http://www.bea.com/wls90/security/policy/wsee#part"
   wsu:Id="saml-holder-of-key-signed">
  <wssp:Integrity>
     <wssp:SignatureAlgorithm
      URI="http://www.w3.org/2000/09/xmldsig#rsa-sha1"/>
     <wssp:CanonicalizationAlgorithm
      URI="http://www.w3.org/2001/10/xml-exc-c14n#"/>
     <wssp:Target>
       <wssp:DigestAlgorithm URI="http://www.w3.org/2000/09/xmldsig#sha1"/>
       <wssp:MessageParts
         Dialect="http://schemas.xmlsoap.org/2002/12/wsse#part">
         wsp:Body()
       </wssp:MessageParts>
     </wssp:Target>
     <wssp:SupportedTokens>
       <wssp:SecurityToken IncludeInMessage="true"
         TokenType="http://docs.oasis-open.org/wss/2004/01/oasis-2004-01-saml-
         token-profile-1.0#SAMLAssertionID">
         <wssp:Claims>
          <wssp:ConfirmationMethod>holder-of-key</wssp:ConfirmationMethod>
         </wssp:Claims>
       </wssp:SecurityToken>
     </wssp:SupportedTokens>
   </wssp:Integrity>
</wsp:Policy>

52.5.6 例: SAML Sender-VouchesによるSOAP本体とヘッダーの認証、署名、および暗号化

例52-6は、sender-vouchesメソッドを使用してメッセージ本体とヘッダーに署名するようSAMLアサーション・プロバイダに要求するWS-Policy文です。

sender-vouchesでは、(サブジェクトとは異なる)アサーション側がサブジェクトの検証を保証します。受信側がアサーション側との信頼関係を確立している必要があります。

2つのSAML確認メソッド(sender-vouchesまたはholder-of-key)の詳細は、『Oracle Fusion Middleware Oracle WebLogic Serverセキュリティの理解』の「WebLogic WebサービスでのSAMLトークン・プロファイルのサポート」を参照してください。

『Oracle Fusion Middleware Oracle WebLogic Server WebLogic Webサービス・リファレンス』の「Oracle Web Servicesセキュリティ・ポリシー・アサーションのリファレンス」で、ポリシーの要素について詳しく説明しています。

この例では、以下に注意してください。

  • Identityは、セキュリティ・トークンのタイプを指定します。

  • SupportedTokensは、デジタル署名で使用できる、サポートされているセキュリティ・トークンのリストを指定します。

  • SecurityTokenは、デジタル署名でサポートされているセキュリティ・トークンを指定します。

    IncludeInMessageは、この属性の値が常にtrueであるため、<Identity>アサーションに使用された場合、明示的にfalseに設定されても、指定されません。

    TokenTypeは、SAMLトークンを指定するためにセキュリティ・トークンのタイプを指定します。

  • Claimsは、特定のタイプのセキュリティ・トークンに関連付けられる追加メタデータ情報を指定します。SAMLトークンの場合、<ConfirmationMethod>子要素を定義して、SAML確認のタイプ(sender-vouchesまたはholder-of-key)を指定する必要があります。

  • ConfirmationMethodは、IDにSAMLトークンを使用する場合に使う確認メソッドのタイプ(sender-vouchesまたはholder-of-key)を指定します。

  • Integrityは、SOAPメッセージの署名に使用するアルゴリズムやキーに加え、SOAPメッセージの一部または全体にデジタル署名することを指定します(この例の場合は、本体とセキュリティ・ヘッダーの両方)。

  • SignatureAlgorithmは、デジタル署名の計算に使用する暗号アルゴリズムを指定します。

  • CanonicalizationAlgorithmは、デジタル署名するSOAPメッセージの要素を標準化する(単純なまたは標準の形式で使用する)ために使用するアルゴリズムを指定します。指定できるのは、http://www.w3.org/2001/10/xml-exc-cl4n#のみです。

  • Targetは、親要素によって異なる、暗号化または署名するSOAPメッセージの対象に関する情報をカプセル化します。子要素も、親要素によって異なります。

    • <Integrity>で使用される場合、<DigestAlgorithm><Transform><MessageParts>の子要素を指定できます。

    • <Confidentiality>で使用される場合、<EncryptionAlgorithm><Transform><MessageParts>の子要素を指定できます。

  • DigestAlgorithmは、SOAPメッセージの指定部分にデジタル署名する際に使用するダイジェスト・アルゴリズムを指定します。指定できるのは、http://www.w3.org/2000/09/xmldsig#sha1のみです。

  • MessagePartsは、署名されるべきSOAPメッセージの部分を指定します。この場合は本体およびセキュリティ・ヘッダーです。

  • Dialectは、署名されるべきSOAPメッセージの部分の識別に使用される固有言語を指定します。

  • Confidentialityは、SOAPメッセージの暗号化に使用するアルゴリズムやキーに加え、SOAPメッセージの一部または全部を暗号化することを指定します。この例では、triple-DESを使用して、本体およびセキュリティ・ヘッダーを暗号化する必要があります。

例52-6 SAML Sender-VouchesメソッドによるSOAP本体とヘッダーの署名

<wsp:Policy
   xmlns:wsp="http://schemas.xmlsoap.org/ws/2004/09/policy"
   xmlns:wssp="http://www.bea.com/wls90/security/policy"
   xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-
     wssecurity-utility-1.0.xsd"
   xmlns:wls="http://www.bea.com/wls90/security/policy/wsee#part"
   wsu:Id="samlPolicy-sender-vouches-signed-encrypted">
   <wssp:Identity>
     <wssp:SupportedTokens>
       <wssp:SecurityToken
         TokenType="http://docs.oasis-open.org/wss/2004/01/oasis-2004-01-
           saml-token-profile-1.0#SAMLAssertionID">
          <wssp:Claims>
            <wssp:ConfirmationMethod>
               sender-vouches
            </wssp:ConfirmationMethod>
          </wssp:Claims>
       </wssp:SecurityToken>
     </wssp:SupportedTokens>
   </wssp:Identity>
   <wssp:Integrity>
     <wssp:SignatureAlgorithm
        URI="http://www.w3.org/2000/09/xmldsig#rsa-sha1"/>
     <wssp:CanonicalizationAlgorithm
        URI="http://www.w3.org/2001/10/xml-exc-c14n#"/>
     <wssp:Target>
        <wssp:DigestAlgorithm
          URI="http://www.w3.org/2000/09/xmldsig#sha1"/>
        <wssp:MessageParts
          Dialect="http://schemas.xmlsoap.org/2002/12/wsse#part">
          wsp:Body()
        </wssp:MessageParts>
     </wssp:Target>
     <wssp:Target>
         <wssp:DigestAlgorithm
            URI="http://www.w3.org/2000/09/xmldsig#sha1"/>
         <wssp:MessageParts
             Dialect="http://www.bea.com/wls90/security/policy/wsee#part">
             wls:SecurityHeader(Assertion)
         </wssp:MessageParts>
       </wssp:Target>
   </wssp:Integrity>
   <wssp:Confidentiality>
      <wssp:KeyWrappingAlgorithm
        URI="http://www.w3.org/2001/04/xmlenc#rsa-1_5"/>
     <wssp:Target>
         <wssp:EncryptionAlgorithm
           URI="http://www.w3.org/2001/04/xmlenc#tripledes-cbc"/>
         <wssp:MessageParts
            Dialect="http://www.bea.com/wls90/security/policy/wsee#part">
            wls:SecurityHeader(Assertion)
         </wssp:MessageParts>
     </wssp:Target>
     <wssp:Target>
        <wssp:EncryptionAlgorithm
          URI="http://www.w3.org/2001/04/xmlenc#tripledes-cbc"/>
        <wssp:MessageParts
           Dialect="http://schemas.xmlsoap.org/2002/12/wsse#part">
           wsp:Body()
        </wssp:MessageParts>
     </wssp:Target>
     <wssp:KeyInfo/>
   </wssp:Confidentiality>
</wsp:Policy>

52.6 ビジネス・サービスのメッセージ・レベルのセキュリティの無効化

使用頻度の少ない設計パターンには、プロキシ・サービスによるアウトバウンドWS-Security SOAPエンベロープの自動生成が回避され、XQuery式を使用してエンベロープを作成できるものがあります。この設計パターンを使用する場合、プロキシ・サービスによるアウトバウンドWS-Security SOAPエンベロープの自動生成を回避するには、$outboundメッセージ・コンテキスト変数の./ctx:security/ctx:doOutboundWss要素の値をxs:boolean("false")に設定するアクションをプロキシ・サービスのメッセージ・フローに作成する必要があります。このアクションは、次のいずれかの場所で作成できます。

$outboundメッセージ・コンテキスト変数の詳細は、『Oracle Fusion Middleware Oracle Service Bus管理者ガイド』の「メッセージ・コンテキスト」を参照してください。

状況によっては、アウトバウンド・メッセージ・レベルのセキュリティを無効にしてプロキシ・サービスを作成または変更したセッションをアクティブ化しようとすると、Oracle Service Busコンソールに検証エラーが表示されます(エラーのあるセッションはコミットできません)。アウトバウンド・メッセージ・レベルのセキュリティを無効にしているためにセッションの検証エラーが表示される場合は、Oracle Service Busの起動コマンドを変更して、次のシステム・プロパティをtrueに設定します: com.bea.wli.sb.security.wss.LaxOutboundWssValidation

次に、Oracle Service Busを再起動します。このプロパティをtrueに設定すると、Oracle Service Busコンソールにはエラーではなく警告が表示されます(警告メッセージが表示されるセッションはコミットできます)。

Oracle Service Busの今後のリリースで、アウトバウンド・メッセージ・レベルのセキュリティの無効化を容易にする方法が提供される予定です。