プライマリ・コンテンツに移動
Oracle® Fusion Middleware Oracle Service Busでのサービスの開発
12c (12.1.3)
E53004-06
目次へ移動
目次

前
次

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

この章では、Service Busのメッセージ・レベルのセキュリティを構成する方法について説明します。

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

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

この章の内容は次のとおりです。

プロキシ・サービスのメッセージ・レベルのセキュリティを構成する手順については、「Service Busクライアント・アクセス・セキュリティの構成」を参照してください。

注意:

メッセージ・レベルのセキュリティの実装には、メッセージ・レベルのカスタム認証(カスタム・トークンまたはユーザー名/パスワードのどちらか)で構成されたプロキシ・サービスが含まれます。

この項で説明されるメッセージ・レベルのセキュリティ・メカニズムは、単独またはメッセージ・レベルのカスタム認証メカニズムとともに機能します。これについては、「カスタム認証の構成」で説明します。両方のタイプのセキュリティの使用について詳しくは、「WS-Securityおよびカスタム・ユーザー名/パスワードとトークンの組合せ」を参照してください。

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

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

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

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

  • 認証

    ドメインの認証プロバイダにあるユーザー・アカウントと比較できるIDの提示をクライアントに要求します。

  • デジタル署名によるメッセージの整合性

    ある操作の呼出しをリクエストするクライアントのIDを立証し、そのリクエストを改ざんした仲介者がいないことを保証します。また、その操作の戻り値が、仲介者によって改ざんされることなくクライアントに返されたことを保証します。

  • XML暗号化によるメッセージの機密性

    リクエストおよびレスポンスの戻り値を暗号化し、リクエストまたはレスポンスを参照した仲介者がいないことを保証します。

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

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

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

  1. Webサービス・クライアントがSOAPヘッダーを生成し、そのヘッダーをSOAPメッセージ・エンベロープに追加します。そのヘッダーには、デジタル署名、セキュリティ・トークン、および他の構成要素が含まれます。
  2. プロキシ・サービスは、保護されたエンベロープを処理するときに、メッセージを復号化して、セキュリティ・ヘッダーを削除します。
  3. 次に、メッセージがセキュリティ要件に準拠していることを確認します。たとえば、必要なメッセージ部分が署名または暗号化(またはその両方)されているかどうか、また必要なトークンが必要なクレームと共に存在するかどうかをプロキシ・サービスが確認します。
  4. プロキシ・サービスからクライアントへのレスポンスでは、プロセス全体が逆方向に繰り返されます。

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

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

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

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

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

  • アクティブな仲介

    プロキシ・サービスは、クライアントのSOAPメッセージのヘッダーを処理し、そのメッセージに対してメッセージ・レベルのアクセス制御ポリシーを強制します。

    たとえば、クライアントはSOAPメッセージを暗号化して署名し、そのメッセージをプロキシ・サービスに送信します。プロキシ・サービスはメッセージを復号化してデジタル署名を確認してから、メッセージをルーティングします。プロキシ・サービスは、レスポンスをクライアントに返す前に、メッセージに署名して暗号化します。クライアントはメッセージを復号化し、プロキシ・サービスのデジタル署名を確認します。

  • パススルー

    プロキシ・サービスは、クライアントのSOAPメッセージのヘッダーを処理するかわりに、メッセージをそのままビジネス・サービスに渡します。プロキシ・サービスはSOAPメッセージの保護されたセクションを処理しませんが、ヘッダーの値に基づいてメッセージをルーティングできます。ビジネス・サービスは、メッセージを受け取ると、セキュリティ・ヘッダーを処理し、リクエストに応答します。ビジネス・サービスはWebサービス・ポリシー(WS-Policy)フレームワークを使用して、メッセージ・レベルのセキュリティで保護されている操作を記述する必要があります。ビジネス・サービスはレスポンスをプロキシ・サービスに送信し、プロキシ・サービスはレスポンスをそのままクライアントに渡します。

    たとえば、クライアントはメッセージを暗号化して署名し、そのメッセージをプロキシ・サービスに送信します。プロキシ・サービスはメッセージの復号化、またはデジタル署名の確認を行いません。単にメッセージをビジネス・サービスにルーティングします。ビジネス・サービスはメッセージを復号化してデジタル署名を確認してから、リクエストを処理します。レスポンス・パスは同様です。

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

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

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

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

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

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

    WSDLファイルの詳細は、「WSDLドキュメントの操作」を参照してください。

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

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

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

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

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

  6. プロキシ・サービスにOWSMポリシーをアタッチするには、次のいずれかの項を参照してください。

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

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

    2. (オプション)ユーザー、グループ、またはロールが保護された操作を呼び出すことができる条件を指定する、プロキシ・サービスのデフォルトのメッセージ・レベルでのアクセス制御ポリシーを変更します。詳細は、「メッセージ・レベルのアクセス・ポリシーの構成方法」を参照してください。

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

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

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

  1. プロキシ・サービスが、処理されていないSOAPメッセージを渡すビジネス・サービスを作成します。構成の方法には、次の2通りがあります。
    • ビジネス・サービスを、WS-Policy文を含むWebサービスとします。

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

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

  2. プロキシ・サービスにOWSMポリシーをアタッチするには、次のいずれかの項を参照してください。
  3. Oracle Service Busコンソールで、WSDLドキュメントからプロキシ・サービスを作成します。作成したビジネス・サービスで使用したWSDLドキュメントと同じドキュメントを使用できます。変更をアクティブ化します。
  4. プロキシ・サービスで関連付けられているセキュリティ・ポリシーを施行しない場合は、「セキュリティ」タブの「セキュリティ設定」にある「受動的なセキュリティ仲介」を選択します。
  5. 作成したビジネス・サービスにルーティングするプロキシ・サービスを構成します。

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

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

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

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

  1. テキスト・エディタまたはIDEで、ポリシーを定義するWSDLドキュメントを作成します。
  2. Oracle Service Busコンソールで、WebサービスのWSDLドキュメントをService Bus WSDLリポジトリにインポートし、すべてのWSDLの依存関係を解決します。

    WSDLファイルの詳細は、「WSDLドキュメントの操作」を参照してください。

  3. Oracle Service Busコンソールで、プロキシ・サービスからビジネス・サービスへの リクエスト を保護するWS-Policy文がWSDLドキュメントに含まれるかどうかに応じて次の処理(1つまたは複数)を行います。
    • いずれかの操作のリクエスト・ポリシーに、サポートされるトークンのタイプの1つとしてWS-Securityユーザー名トークンによるIDアサーションが含まれる場合は、ビジネス・サービスに対するサービス・アカウントを構成します。このサービス・アカウントで、プロキシ・サービスがビジネス・サービスに送信するユーザー名とパスワードを提供します。このビジネス・サービスにルーティングするプロキシ・サービスは、このサービス・アカウントからユーザー名とパスワードを取得します。「サービス・アカウントの操作」および「ビジネス・サービスの作成と構成」を参照してください。

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

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

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

    警告:

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

  5. ビジネス・サービスのポリシーがSAMLアサーションの使用を指定している場合は、WebLogic SAML資格証明マッピング・プロバイダV2のアサーション側を構成します。詳細は、「IDのSAMLトークンへのマッピング」を参照してください。
  6. インポートしたWSDLファイルからビジネス・サービスを作成します。変更をアクティブ化します。
  7. ビジネス・サービスにOWSMポリシーをアタッチするには、次のいずれかの項を参照してください。
  8. SOAPメッセージをビジネス・サービスにルーティングするプロキシ・サービスを作成します。アクティブな仲介プロキシ・サービスまたはパススルー・プロキシ・サービスを使用できます。

50.5 サービス・アイデンティティ証明書拡張の使用方法

Service Busは、OWSMメッセージ保護ポリシーでアタッチされたWSDL SOAPプロキシおよびビジネス・サービスの証明書ID拡張の発行と消費をサポートしています。

50.5.1 プロキシ・サービスの有効なWSDLの証明書ID拡張の発行

OWSMメッセージ保護ポリシーを実装するWSDL SOAPプロキシ・サービスは、WSDLファイルでのサービス用にbase64エンコード済の公開証明書を発行します。証明書は、ポリシーによってデータが暗号化されるか復号化されるかに関係なく、メッセージ保護ポリシーに対して内包されます。

証明書はアタッチされたポリシーの暗号化キー構成に基づいています。プロキシ・サービス・クライアントは、暗号化を目的に、WSDLファイルに埋め込まれた証明書を使用できます。

詳細は、『Oracle Web Services ManagerによるWebサービスの保護とポリシーの管理』のサービス・アイデンティティ証明書拡張の使用方法に関する項を参照してください。

注意:

OWSMの以前のリリースでは、ビジネス・サービスとプロキシ・サービスのクライアントは、プロキシ・サービスの公開証明書をドメイン・レベルのキーストアに格納する必要がありました。

その後、クライアントはkeystore.recipient.aliasプロパティを使用して、キーストア内の証明書を識別します。

50.5.2 ビジネス・サービスでの証明書ID拡張の消費方法

OWSMメッセージ保護ポリシーを実装するWSDL SOAPビジネス・サービスは、WSDLファイルからの証明書ID拡張を消費します。WSDLファイルで公開鍵証明書が見つからない場合は、keystore.recipient.aliasプロパティが使用され、証明書はビジネス・サービスのドメイン・レベルのキーストアに存在している必要があります。

ホスト名検証機能によって、WSDLファイルから取得した証明書が置換攻撃や中間者攻撃の対象になることなく、本当に予期したとおりの証明書であることが保証されます。

ホスト名を検証するため、OWSMは、証明書の共通名(CN)またはサブジェクト・グループ・ベース識別名(DN)がサービスのホスト名と一致することを確認します。この機能は、証明書のサブジェクトDNに依存します。

OWSMは、WSDLファイルでX509証明書を公開してWebサービス・ポリシーを適用するかどうか、およびホスト名検証機能を使用するかどうかを指定できるドメイン構成プロパティを提供します。これらのプロパティの設定方法の詳細は、『Oracle Web Services ManagerによるWebサービスの保護とポリシーの管理』のFusion Middleware Controlを使用したID拡張プロパティの構成に関する項を参照してください。

50.6 カスタムWS-Policy文の例

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

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

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

この項に示す例は、実行する抽象WS-Policy文で、次を行います。

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

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

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

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

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

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

また、例では、

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

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

例 - 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>

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

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

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

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

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

  • ポリシーによって一意のIDが提供され、WSDLファイルはURIフラグメントを使用してそのIDを参照します。

例 - 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>

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

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

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

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

また、この例のノートでは、

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

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

例 - カスタム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>

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

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

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

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

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

  • メッセージ本文

例 - 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>

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

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

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

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)を指定します。

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

例 - 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>

50.6.6 例: SAML Sender-Vouchesによる認証、署名および暗号化

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

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

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

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

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

  • 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を使用して、本体およびセキュリティ・ヘッダーを暗号化する必要があります。

例 - 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>

50.7 アウトバウンドWS-Securityの無効化

注意:

Oracle Web Services Managerのサービス・ポリシーを含む他のプロキシ(ローカル・プロキシなど)に転送されるプロキシ・サービスでは、アウトバウンドWS-Security処理が無効化されます。Service Busでは、この動作が自動的に行われ、doOutboundWssプロパティは使用されません。詳細は、「ローカル・プロキシ・サービスでのOWSMセキュリティの使用」を参照してください。

この項の残り部分では、他の設計パターンでアウトバウンドWS-Security処理を無効にする方法について説明します。

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

$outboundメッセージ・コンテキスト変数の詳細は、「メッセージ・コンテキスト」を参照してください。

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

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

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