この章では、Service Busのメッセージ・レベルのセキュリティを構成する方法について説明します。
メッセージ・レベルのセキュリティでは、Webサービス・クライアントがService Busプロキシ・サービスまたはビジネス・サービスとの接続を確立した後、プロキシ・サービスまたはビジネス・サービスがこのメッセージを処理する前にSOAPメッセージに対してセキュリティ・チェックが適用されます。
メッセージ・レベルのセキュリティは、次のように分類されます。
インバウンド・メッセージ・レベルのセキュリティは、クライアントとService Busプロキシ・サービス間のメッセージに適用されます。このセキュリティは、クライアントからのリクエストおよびクライアントに返されるレスポンス・メッセージの両方に適用されます。
これを、プロキシ・サービスのセキュリティと考えることができます。
アウトバウンド・メッセージ・レベルのセキュリティは、Service Busプロキシ・サービスとSOAP-HTTPビジネス・サービス間のメッセージ、またはService Busプロキシ・サービスとSOAP-JMSビジネス・サービス間のメッセージに適用されます。また、このセキュリティはリクエストとレスポンスの両方に適用されます。
これを、ビジネス・サービスのセキュリティと考えることができます。
この章の内容は次のとおりです。
プロキシ・サービスのメッセージ・レベルのセキュリティを構成する手順については、「Service Busクライアント・アクセス・セキュリティの構成」を参照してください。
注意:
メッセージ・レベルのセキュリティの実装には、メッセージ・レベルのカスタム認証(カスタム・トークンまたはユーザー名/パスワードのどちらか)で構成されたプロキシ・サービスが含まれます。
この項で説明されるメッセージ・レベルのセキュリティ・メカニズムは、単独またはメッセージ・レベルのカスタム認証メカニズムとともに機能します。これについては、「カスタム認証の構成」で説明します。両方のタイプのセキュリティの使用について詳しくは、「WS-Securityおよびカスタム・ユーザー名/パスワードとトークンの組合せ」を参照してください。
Service Busでは、HTTP (HTTPS含む)またはJMSプロトコル経由で送信されるSOAPメッセージに対し、メッセージ・レベルのセキュリティをサポートします。通常、これらのプロトコルで提供されるトランスポート・レベルのセキュリティに加えて、メッセージ・レベルのセキュリティを使用します。トランスポート・レベル、メッセージ・レベルまたは両方のレベルで資格証明を提供するようにWebサービス・クライアントに要求できます。両方のレベルで資格証明を提供するようにクライアントに要求する場合、Service Busはプロキシ・サービスの認証および認可に対してメッセージ・レベルの資格証明を使用します。
Webサービスであるプロキシ・サービスまたはビジネス・サービスのメッセージ・レベルのセキュリティ要件を指定するには、Webサービス・ポリシー(WS-Policy)フレームワークを使用します。
メッセージ・レベルのセキュリティでは、プロキシ・サービスまたはビジネス・サービスが、保護される操作、およびWebサービス・クライアントがSOAPメッセージ(操作を呼び出すリクエストを含む)に適用する必要がある次のセキュリティ対策を指定します。
認証
ドメインの認証プロバイダにあるユーザー・アカウントと比較できるIDの提示をクライアントに要求します。
デジタル署名によるメッセージの整合性
ある操作の呼出しをリクエストするクライアントのIDを立証し、そのリクエストを改ざんした仲介者がいないことを保証します。また、その操作の戻り値が、仲介者によって改ざんされることなくクライアントに返されたことを保証します。
XML暗号化によるメッセージの機密性
リクエストおよびレスポンスの戻り値を暗号化し、リクエストまたはレスポンスを参照した仲介者がいないことを保証します。
これらのセキュリティ対策のすべてで、SOAPメッセージのセキュリティ・トークンをコード化することがクライアントに要求されます。プロキシ・サービスまたはビジネス・サービスは、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ドキュメントをService Bus WSDLリポジトリにインポートし、すべてのWSDLの依存関係を解決します。
WSDLファイルの詳細は、「WSDLドキュメントの操作」を参照してください。
Service BusをサポートするようにWebLogicセキュリティ・フレームワークをまだ構成していない場合は、クライアントからプロキシ・サービスへのリクエストを保護するセキュリティ・ポリシー・アサーションが、プロキシ・サービスのいずれかの操作のWS-Policyに含まれるかどうかに応じて、次の処理(1つまたは複数)を行います。
操作のリクエスト・ポリシーでWS-Security X.509証明書トークンによる認証を要求する場合は、__SERVICE_BUS_INBOUND_WEB_SERVICE_SECURITY_MBEAN__
というWebサービス・セキュリティ構成を行います。「Oracle WebLogicセキュリティ・フレームワークの構成:主な手順」を参照してください。
操作のリクエスト・ポリシーでパスワード・ダイジェストを使用したWS-Securityユーザー名/パスワード・トークンによる認証を要求する場合は、必ずパスワード・ダイジェストを有効にします。「Oracle WebLogicセキュリティ・フレームワークの構成:主な手順」を参照してください。
操作のリクエスト・ポリシーでSAMLトークンの使用を要求する場合は、このプロキシ・サービスのSAMLアサーション側を構成する必要があります。「プロキシ・サービス・リクエストでのSAMLトークンの認証」を参照してください。
操作の要求ポリシーでデジタル署名を要求する場合は、受け入れられたクライアント署名検証証明書をWebLogic Server証明書レジストリに登録する。「Oracle WebLogicセキュリティ・フレームワークの構成:主な手順」を参照してください。
操作のリクエスト・ポリシーでデジタル暗号化を要求する場合は、暗号化の資格証明を持つサービス・キー・プロバイダを構成します。プロキシ・サービスはこの資格証明を使用して、暗号化されたSOAPメッセージを復号化します。サービス・キー・プロバイダの詳細は、「サービス・キー・プロバイダの操作」を参照してください。
Oracle Service Busコンソールで、プロキシ・サービスからクライアントへの レスポンス を保護するセキュリティ・ポリシー・アサーションが、プロキシ・サービスのいずれかの操作のWS-Policyに含まれるかどうかに応じて、次の処理(1つまたは複数)を行います。
操作のレスポンス・ポリシーでデジタル署名を要求する場合は、デジタル署名資格証明を持つサービス・キー・プロバイダを構成します。1つで暗号化とデジタル署名の両方の資格証明を持つサービス・キー・プロバイダを作成できます。サービス・キー・プロバイダの詳細は、「サービス・キー・プロバイダの操作」を参照してください。
操作のレスポンス・ポリシーで暗号化を指定する場合、クライアントはリクエスト時に証明書をプロキシ・サービスに送信する必要があります。プロキシ・サービスはクライアントの公開鍵を使用してレスポンスを暗号化します。クライアントの証明書は、プロキシ・サービスの暗号化証明書と異なる必要があります。
Oracle Service Busコンソールで、インポートしたWSDLファイルからプロキシ・サービスを作成します。変更をアクティブ化します。
プロキシ・サービスにOWSMポリシーをアタッチするには、次のいずれかの項を参照してください。
作成したプロキシ・サービスを編集して、 「セキュリティ」 タブから次を行います。
作成したサービス・キー・プロバイダを指定します。
(オプション)ユーザー、グループ、またはロールが保護された操作を呼び出すことができる条件を指定する、プロキシ・サービスのデフォルトのメッセージ・レベルでのアクセス制御ポリシーを変更します。詳細は、「メッセージ・レベルのアクセス・ポリシーの構成方法」を参照してください。
(オプション)プロキシ・サービスのメッセージ・レベルの認証設定を変更します。
アウトバウンド・メッセージ・レベルのセキュリティは、Service Busプロキシ・サービスとSOAP-HTTPビジネス・サービス間のメッセージ、またはService Busプロキシ・サービスとSOAP-JMSビジネス・サービス間のメッセージに適用されます。また、このセキュリティはリクエストとレスポンスの両方に適用されます。
SOAP-HTTPまたはSOAP-JMS Webサービスを表すビジネス・サービスに対してアウトバウンド・メッセージ・レベルのセキュリティを構成するには:
Service Busは、OWSMメッセージ保護ポリシーでアタッチされたWSDL SOAPプロキシおよびビジネス・サービスの証明書ID拡張の発行と消費をサポートしています。
OWSMメッセージ保護ポリシーを実装するWSDL SOAPプロキシ・サービスは、WSDLファイルでのサービス用にbase64エンコード済の公開証明書を発行します。証明書は、ポリシーによってデータが暗号化されるか復号化されるかに関係なく、メッセージ保護ポリシーに対して内包されます。
証明書はアタッチされたポリシーの暗号化キー構成に基づいています。プロキシ・サービス・クライアントは、暗号化を目的に、WSDLファイルに埋め込まれた証明書を使用できます。
詳細は、『Oracle Web Services ManagerによるWebサービスの保護とポリシーの管理』のサービス・アイデンティティ証明書拡張の使用方法に関する項を参照してください。
注意:
OWSMの以前のリリースでは、ビジネス・サービスとプロキシ・サービスのクライアントは、プロキシ・サービスの公開証明書をドメイン・レベルのキーストアに格納する必要がありました。
その後、クライアントはkeystore.recipient.alias
プロパティを使用して、キーストア内の証明書を識別します。
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拡張プロパティの構成に関する項を参照してください。
次の項では、WS-Policy仕様に基づき、Oracle独自のセキュリティ・ポリシー・スキーマを使用して記述されたカスタムWS-Policy文の例を示します。
SOAPメッセージの本文全体ではなく、特定の部分を暗号化またはデジタル署名するように指定する必要がある場合は、カスタムWS-Policyファイルを作成する必要があります。
この項に示す例は、実行する抽象WS-Policy文で、次を行います。
クライアントのメッセージに認証用のユーザー名とパスワード・トークンを要求します
クライアントに(セキュリティ・ヘッダーにある)ユーザー名およびパスワード・トークンの暗号化を要求します。
クライアントに/definitions/message/CreditCardNumber
要素の暗号化を要求します。
このポリシーは抽象的であるため、ビジネス・サービスでは使用できません: その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" 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>
通常、ビジネス・サービスへのメッセージを送信するプロキシ・サービスがパススルー・プロキシ・サービスである場合は、ビジネス・サービスへのメッセージを暗号化する必要があります。つまり、クライアントからメッセージを受信するプロキシ・サービスは、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>
この項の例は、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>
この項の例は、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>
この項の例は、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>
この項の例は、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>
注意:
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の今後のリリースで、アウトバウンド・メッセージ・レベルのセキュリティの無効化を容易にする方法が提供される予定です。