この章では、Oracle Service Busのメッセージ・レベルのセキュリティを構成する方法について説明します。
メッセージ・レベルのセキュリティでは、Webサービス・クライアントがOracle Service Busプロキシ・サービスまたはビジネス・サービスとの接続を確立した後、プロキシ・サービスまたはビジネス・サービスがこのメッセージを処理する前にSOAPメッセージに対してセキュリティ・チェックが適用されます。
メッセージ・レベルのセキュリティは、次のように分類されます。
インバウンドメッセージ・レベルのセキュリティは、クライアントとOracle Service Busプロキシ・サービス間のメッセージに適用されます。このセキュリティは、クライアントからのリクエストおよびクライアントに返されるレスポンス・メッセージの両方に適用されます。
これを、プロキシ・サービスのセキュリティと考えることができます。
アウトバウンドメッセージ・レベルのセキュリティは、Oracle Service Busプロキシ・サービスとSOAP-HTTPビジネス・サービス間のメッセージ、またはOracle Service Busプロキシ・サービスとSOAP-JMSビジネス・サービス間のメッセージに適用されます。また、このセキュリティはリクエストとレスポンスの両方に適用されます。
これを、ビジネス・サービスのセキュリティと考えることができます。
この章の内容は次のとおりです。
|
注意: メッセージ・レベルのセキュリティの実装には、メッセージ・レベルのカスタム認証(カスタム・トークンまたはユーザー名/パスワードのどちらか)で構成されたプロキシ・サービスが含まれます。 この項で説明されるメッセージ・レベルのセキュリティ・メカニズムは、単独またはメッセージ・レベルのカスタム認証メカニズムとともに機能します。これについては、第54章「カスタム認証の構成」で説明します。両方のタイプのセキュリティの使用については、54.9項「WS-Securityおよびカスタム・ユーザー名/パスワードとトークンの組合せ」を参照してください。 |
Oracle Service Busでは、HTTP (HTTPS含む)またはJMSプロトコル経由で送信されるSOAPメッセージに対し、メッセージ・レベルのセキュリティをサポートします。通常、これらのプロトコルで提供されるトランスポート・レベルのセキュリティに加えて、メッセージ・レベルのセキュリティを使用します。トランスポート・レベル、メッセージ・レベル、または両方のレベルで資格証明を提供するようにWebサービス・クライアントに要求できます。両方のレベルで資格証明を提供するようにクライアントに要求する場合、Oracle Service Busはプロキシ・サービスの認証および認可に対してメッセージ・レベルの資格証明を使用します。
Webサービスであるプロキシ・サービスまたはビジネス・サービスのメッセージ・レベルのセキュリティ要件を指定するには、Webサービス・ポリシー(WS-Policy)フレームワークを使用します。Webサービス・ポリシー(WS-Policy)フレームワークについては、第52章「Webサービスのメッセージ・レベルでのセキュリティの構成」で説明しています。
メッセージ・レベルのセキュリティでは、プロキシ・サービスまたはビジネス・サービスが、保護される操作、およびWebサービス・クライアントがSOAPメッセージ(操作を呼び出すリクエストを含む)に適用する必要がある次のセキュリティ対策を指定します。
認証
ドメインの認証プロバイダにあるユーザー・アカウントと比較できるIDの提示をクライアントに要求します。
デジタル署名によるメッセージの整合性
ある操作の呼出しをリクエストするクライアントのIDを立証し、そのリクエストを改ざんした仲介者がいないことを保証します。また、その操作の戻り値が、仲介者によって改ざんされることなくクライアントに返されたことを保証します。
XML暗号化によるメッセージの機密性
リクエストおよびレスポンスの戻り値を暗号化し、リクエストまたはレスポンスを参照した仲介者がいないことを保証します。
これらのセキュリティ対策のすべてで、SOAPメッセージのセキュリティ・トークンをコード化することがクライアントに要求されます。プロキシ・サービスまたはビジネス・サービスは、SOAPメッセージでのコード化を要求するセキュリティ・トークンのタイプを指定します。
メッセージ・レベルのセキュリティを要求するプロキシ・サービスにSOAPメッセージを送信するために、次のアクションが発生します。
Webサービス・クライアントがSOAPヘッダーを生成し、そのヘッダーをSOAPメッセージ・エンベロープに追加します。そのヘッダーには、デジタル署名、セキュリティ・トークン、および他の構成要素が含まれます。
プロキシ・サービスは、保護されたエンベロープを処理するときに、メッセージを復号化して、セキュリティ・ヘッダーを削除します。
次に、メッセージがセキュリティ要件に準拠していることを確認します。たとえば、必要なメッセージ部分が署名または暗号化(またはその両方)されているかどうか、また必要なトークンが必要なクレームと共に存在するかどうかをプロキシ・サービスが確認します。
プロキシ・サービスからクライアントへのレスポンスでは、プロセス全体が逆方向に繰り返されます。
メッセージの整合性とメッセージの機密性によってメッセージが仲介で参照または改ざんされていないことが保証され、メッセージ認証によってクライアントは既知のユーザーであるという立証を要求されますが、これは どの 既知のユーザーがプロキシ・サービス操作を呼び出すことを許可(認可)されているかを指定するものではありません。
認可されたユーザーにアクセスを制限するには、Oracle Service Bus管理コンソールを使用してメッセージ・レベルのアクセス制御ポリシーを作成します。これらのポリシーにより、認可されたクライアントからのSOAPメッセージのみをプロキシ・サービスで処理できます。
インバウンド・メッセージ・レベルのセキュリティ用に次のいずれかの方法をサポートするように、プロキシ・サービスを構成できます。
アクティブな仲介
プロキシ・サービスは、クライアントのSOAPメッセージのヘッダーを処理し、そのメッセージに対してメッセージ・レベルのアクセス制御ポリシーを強制します。
たとえば、クライアントはSOAPメッセージを暗号化して署名し、そのメッセージをプロキシ・サービスに送信します。プロキシ・サービスはメッセージを復号化してデジタル署名を確認してから、メッセージをルーティングします。プロキシ・サービスは、レスポンスをクライアントに返す前に、メッセージに署名して暗号化します。クライアントはメッセージを復号化し、プロキシ・サービスのデジタル署名を確認します。
パススルー
プロキシ・サービスは、クライアントのSOAPメッセージのヘッダーを処理するかわりに、メッセージをそのままビジネス・サービスに渡します。プロキシ・サービスはSOAPメッセージの保護されたセクションを処理しませんが、ヘッダーの値に基づいてメッセージをルーティングできます。ビジネス・サービスは、メッセージを受け取ると、セキュリティ・ヘッダーを処理し、リクエストに応答します。ビジネス・サービスはWebサービス・ポリシー(WS-Policy)フレームワークを使用して、メッセージ・レベルのセキュリティで保護されている操作を記述する必要があります。ビジネス・サービスはレスポンスをプロキシ・サービスに送信し、プロキシ・サービスはレスポンスをそのままクライアントに渡します。
たとえば、クライアントはメッセージを暗号化して署名し、そのメッセージをプロキシ・サービスに送信します。プロキシ・サービスはメッセージの復号化、またはデジタル署名の確認を行いません。単にメッセージをビジネス・サービスにルーティングします。ビジネス・サービスはメッセージを復号化してデジタル署名を確認してから、リクエストを処理します。レスポンス・パスは同様です。
アクティブな仲介として動作するようにプロキシ・サービスを作成するには
テキスト・エディタまたはIDEで、プロキシ・サービスを定義するWSDLドキュメントを作成します。
ポリシーをOracle Service Bus管理コンソールから直接バインドする場合は、WSDLにポリシー文を含める必要はありません。
ポリシーをWSDLベースにする場合は、WSDLドキュメントに、定義済のポリシーなどの、1つまたは複数のWebサービス・ポリシー(WS-Policy)文を追加します。
Oracle Service Bus管理コンソールで、WSDLドキュメントをOracle Service Bus WSDLリポジトリにインポートし、WSDL依存関係を解決します。
『Oracle Fusion Middleware Oracle Service Bus管理者ガイド』のWSDLの追加に関する項を参照してください。
Oracle Service BusをサポートするようにWebLogicセキュリティ・フレームワークをまだ構成していない場合は、クライアントからプロキシ・サービスへの リクエスト を保護するセキュリティ・ポリシー・アサーションが、プロキシ・サービスのいずれかの操作のWS-Policyに含まれるかどうかに応じて、次の処理(1つまたは複数)を行います。
操作のリクエスト・ポリシーでWS-Security X.509証明書トークンによる認証を要求する場合は、__SERVICE_BUS_INBOUND_WEB_SERVICE_SECURITY_MBEAN__というWebサービス・セキュリティ構成を行います。45.7項「Oracle WebLogicセキュリティ・フレームワークの構成:主な手順」を参照してください。
操作のリクエスト・ポリシーでパスワード・ダイジェストを使用したWS-Securityユーザー名/パスワード・トークンによる認証を要求する場合は、必ずパスワード・ダイジェストを有効にします。45.7項「Oracle WebLogicセキュリティ・フレームワークの構成:主な手順」を参照してください。
操作のリクエスト・ポリシーでSAMLトークンの使用を要求する場合は、このプロキシ・サービスのSAMLアサーション側を構成する必要があります。53.3項「プロキシ・サービス・リクエストでのSAMLトークンの認証」を参照してください。
操作のリクエスト・ポリシーでデジタル署名を要求する場合は、受け入れられたクライアント署名検証証明書をOracle WebLogic Server証明書レジストリに登録します。45.7項「Oracle WebLogicセキュリティ・フレームワークの構成:主な手順」を参照してください。
操作のリクエスト・ポリシーでデジタル暗号化を要求する場合は、暗号化の資格証明を持つサービス・キー・プロバイダを構成します。プロキシ・サービスはこの資格証明を使用して、暗号化されたSOAPメッセージを復号化します。『Oracle Fusion Middleware Oracle Service Bus管理者ガイド』の「サービス・キー・プロバイダ」のサービス・キー・プロバイダの追加に関する項を参照してください。
Oracle Service Bus管理コンソールで、プロキシ・サービスからクライアントへのレスポンスを保護するセキュリティ・ポリシー・アサーションが、プロキシ・サービスのいずれかの操作のWS-Policyに含まれるかどうかに応じて、次の処理(1つまたは複数)を行います。
操作のレスポンス・ポリシーでデジタル署名を要求する場合は、デジタル署名資格証明を持つサービス・キー・プロバイダを構成します。1つで暗号化とデジタル署名の両方の資格証明を持つサービス・キー・プロバイダを作成できます。『Oracle Fusion Middleware Oracle Service Bus管理者ガイド』のサービス・キー・プロバイダの追加に関する項を参照してください。
操作のレスポンス・ポリシーで暗号化を指定する場合、クライアントはリクエスト時に証明書をプロキシ・サービスに送信する必要があります。プロキシ・サービスはクライアントの公開鍵を使用してレスポンスを暗号化します。クライアントの証明書は、プロキシ・サービスの暗号化証明書と異なる必要があります。
Oracle Service Bus管理コンソールで、インポートしたWSDLからプロキシ・サービスを作成します。変更をアクティブ化してください。
WSDLドキュメントにWS-Policy添付ファイルが含まれておらず、それらを追加する場合、または、WSDLに含まれるものとは別のWS-Policyを指定する場合は、作成したプロキシ・サービスを編集して、 「ポリシー」 タブで次を行います。
「事前定義ポリシーまたはWS-Policyリソースから」を選択します。
サービス全体に適用するポリシーを指定するには、サービス名エントリを展開します。「追加」をクリックしてポリシーを検索し、選択します。
操作またはその操作のリクエスト/レスポンスに適用するポリシーを指定するには、操作名エントリを展開します。「追加」をクリックしてポリシーを検索し、選択します。
ポリシー・バインディングを更新します。
作成したプロキシ・サービスを編集して、 「セキュリティ」 タブから次を行います。
作成したサービス・キー・プロバイダを指定します。
「WS-Securityヘッダーの処理」オプションで「はい」を選択します。
(オプション)ユーザー、グループ、またはロールが保護された操作を呼び出すことができる条件を指定する、プロキシ・サービスのデフォルトのメッセージ・レベルでのアクセス制御ポリシーを変更します。『Oracle Fusion Middleware Oracle Service Bus管理者ガイド』のメッセージ・レベルのアクセス・ポリシーの編集に関する項を参照してください。
(オプション)プロキシ・サービスのメッセージ・レベルの認証設定を変更します。
パススルー・プロキシ・サービスを作成するには
プロキシ・サービスが、処理されていないSOAPメッセージを渡すビジネス・サービスを作成します。構成の方法には、次の2通りがあります。
ビジネス・サービスを、WS-Policy文を含むWebサービスとします。
ビジネス・サービスで、WS-Policyを直接バインドします。サービスのベースとなるWSDLには、WS-Policy文を含めないでください。
WSDLドキュメントにWS-Policy添付ファイルが含まれておらず、それらを追加する場合、または、WSDLに含まれるものとは別のWS-Policyを指定する場合は、作成したビジネス・サービスを編集して、 「ポリシー」 タブで次を行います。
「事前定義ポリシーまたはWS-Policyリソースから」を選択します。
サービス全体に適用するポリシーを指定するには、サービス名エントリを展開します。「追加」をクリックしてポリシーを検索し、選択します。
操作またはその操作のリクエスト/レスポンスに適用するポリシーを指定するには、操作名エントリを展開します。「追加」をクリックしてポリシーを検索し、選択します。
ポリシー・バインディングを更新します。
Oracle Service Bus管理コンソールで、WSDLドキュメントからプロキシ・サービスを作成します。作成したビジネス・サービスで使用したWSDLドキュメントと同じドキュメントを使用できます。変更をアクティブ化してください。
作成したプロキシ・サービスを後で編集する場合は、「セキュリティ」タブの「WS-Securityヘッダーの処理」オプションで「いいえ」を選択してください。
作成したビジネス・サービスにルーティングするプロキシ・サービスを構成します。
クライアントのSOAPメッセージが呼出しをリクエストする操作に基づいてビジネス・サービスにルーティングする場合は、SOAP本体のアルゴリズム以外の操作選択アルゴリズムを指定するようにルーティングを構成する必要があります。プロキシ・サービス・パイプラインのアクションによって、署名または暗号化されたWS-SecurityヘッダーまたはSOAPエンベロープの部分が変更されないことを確認します。デジタル署名されたクリア・テキストのメッセージ部分を変更すると、ほとんどの場合、デジタル署名は壊れます。これは、後で署名を検証できないためです。
2.3項「プロキシ・サービスの操作」を参照してください。
アウトバウンド メッセージ・レベルのセキュリティは、Oracle Service Busプロキシ・サービスとSOAP-HTTPビジネス・サービス間のメッセージ、またはOracle Service Busプロキシ・サービスとSOAP-JMSビジネス・サービス間のメッセージに適用されます。また、このセキュリティはリクエストとレスポンスの両方に適用されます。
SOAP-HTTPまたはSOAP-JMS Webサービスを表すビジネス・サービスに対してアウトバウンド・メッセージ・レベルのセキュリティを構成するには
テキスト・エディタまたはIDEで、ポリシーを定義するWSDLドキュメントを作成します。
Oracle Service Bus管理コンソールで、WebサービスのWSDLドキュメントをOracle Service Bus WSDLリポジトリにインポートし、WSDL依存関係を解決します。
『Oracle Fusion Middleware Oracle Service Bus管理者ガイド』のWSDLの追加に関する項を参照してください。
Oracle Service Bus管理コンソールで、プロキシ・サービスからビジネス・サービスへのリクエストを保護するWS-Policy文がWSDLドキュメントに含まれるかどうかに応じて次の処理(1つまたは複数)を行います。
いずれかの操作のリクエスト・ポリシーに、サポートされるトークンのタイプの1つとしてWS-Securityユーザー名トークンによるIDアサーションが含まれる場合は、ビジネス・サービスに対するサービス・アカウントを構成します。このサービス・アカウントで、プロキシ・サービスがビジネス・サービスに送信するユーザー名とパスワードを提供します。このビジネス・サービスにルーティングするプロキシ・サービスは、このサービス・アカウントからユーザー名とパスワードを取得します。2.1.15項「サービス・アカウント・リソースの作成」および2.2項「ビジネス・サービスの操作」を参照してください。
操作のリクエスト・ポリシーでパスワード・ダイジェストを使用したWS-Securityユーザー名/パスワード・トークンによる認証を要求する場合は、必ずパスワード・ダイジェストを有効にします。45.7項「Oracle WebLogicセキュリティ・フレームワークの構成:主な手順」を参照してください。
操作のリクエスト・ポリシーでデジタル署名を要求する場合は、デジタル署名資格証明を持つサービス・キー・プロバイダを構成します。1つで暗号化とデジタル署名の両方の資格証明を持つサービス・キー・プロバイダを作成できます。『Oracle Fusion Middleware Oracle Service Bus管理者ガイド』のサービス・キー・プロバイダの追加に関する項を参照してください。
ビジネス・サービスの操作の レスポンス ポリシーで暗号化を要求する場合(つまり、ビジネス・サービスが、プロキシ・サービスの暗号化公開鍵でレスポンスを暗号化します)、サービス・キー・プロバイダを構成して暗号化の資格証明をサービス・キー・プロバイダに割り当ててください。
|
注意: 暗号化されるバックエンドのレスポンス・メッセージ: ビジネス・サービスのレスポンス・ポリシーで暗号化を指定する場合、プロキシ・サービスはリクエスト時に暗号化証明書をビジネス・サービスに送信します。ビジネス・サービスは、プロキシ・サービスの公開鍵を使用してレスポンスを暗号化します。プロキシ・サービスの暗号化資格証明は、ビジネス・サービスの暗号化資格証明と異なることが必要です。 |
ビジネス・サービスのポリシーがSAMLアサーションの使用を指定している場合は、WebLogic SAML資格証明マッピング・プロバイダV2のアサーション側を構成します。詳細は、53.1項「IDのSAMLトークンへのマッピング」を参照してください。
インポートしたWSDLからビジネス・サービスを作成します。変更をアクティブ化してください。
2.2項「ビジネス・サービスの操作」を参照してください。
ポリシーをサービスに直接付加する場合は、作成したビジネス・サービスを編集して、「ポリシー」タブで次を行います。
「事前定義ポリシーまたはWS-Policyリソースから」を選択します。
サービス全体に適用するポリシーを指定するには、サービス名エントリを展開します。「追加」をクリックしてポリシーを検索し、選択します。
操作またはその操作のリクエスト/レスポンスに適用するポリシーを指定するには、操作名エントリを展開します。「追加」をクリックしてポリシーを検索し、選択します。
「更新」をクリックして、ビジネス・サービスを更新します。
SOAPメッセージをビジネス・サービスにルーティングするプロキシ・サービスを作成します。アクティブな仲介プロキシ・サービスまたはパススルー・プロキシ・サービスを使用できます。
52.3.1項「アクティブな仲介プロキシ・サービスの作成: 主な手順」を参照してください。
次の項では、WS-Policy仕様に基づき、Oracle独自のセキュリティ・ポリシー・スキーマを使用して記述されたカスタムWS-Policy文の例を示します。
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では次のことも行われます。
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>
ビジネス・サービスへのメッセージを暗号化する場合は、カスタム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-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-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は、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-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>
|
注意: Oracle Web Services Managerのサービス・ポリシーを含む他のプロキシ(ローカル・プロキシなど)に転送されるプロキシ・サービスでは、アウトバウンドWS-Security処理が無効化されます。Oracle Service Busでは、この動作が自動的に行われ、doOutboundWssプロパティは使用されません。詳細は、31.5項「ローカル・プロキシでのOracle WSMセキュリティの使用」を参照してください。 この項の残り部分では、他の設計パターンでアウトバウンドWS-Security処理を無効にする方法について説明します。 |
使用頻度の少ない設計パターンには、プロキシ・サービスによるアウトバウンドWS-Security SOAPエンベロープの自動生成が回避され、XQuery式を使用してエンベロープを作成できるものがあります。この設計パターンを使用する場合、プロキシ・サービスによるアウトバウンドWS-Security SOAPエンベロープの自動生成を回避するには、$outboundメッセージ・コンテキスト変数の./ctx:security/ctx:doOutboundWss要素の値をxs:boolean("false")に設定するアクションをプロキシ・サービスのメッセージ・フローに作成する必要があります。このアクションは、次のいずれかの場所で作成できます。
パイプライン・ペアのリクエスト段階。2.4.16項「メッセージ・フローへのパイプライン・ペア・ノードの追加と構成」を参照してください。
ルート・ノードのリクエスト・アクション内。2.4.25項「メッセージ・フローへのルート・ノードの追加と構成」を参照してください。
$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の今後のリリースで、アウトバウンド・メッセージ・レベルのセキュリティの無効化を容易にする方法が提供される予定です。