この章では、Webサービス・セキュリティのクライアント側およびサーバー側の構成について説明します。これらのセキュリティ構成はXMLファイルに格納されます。サーバーでは、この構成はoracle-webservices.xml
デプロイメント・ディスクリプタ・ファイルに保存されます。クライアントでは、この構成は<
generated_name
>_Stub.xml
デプロイメント・ディスクリプタ・ファイルに保存されます。
次のいずれかの方法で、これらのファイルを作成してセキュリティ要素を構成できます。
Oracle JDeveloper IDE: Oracle JDeveloper IDEを使用して、Webサービスとクライアント・セキュリティを作成および構成します。このツールにはセキュリティ構成の作成に役立つウィザードが用意されています。結果は、サーバーではoracle-webservices.xml
デプロイメント・ディスクリプタ、クライアントでは<
generated_name
>_Stub.xml
デプロイメント・ディスクリプタに保存されます。
Application Server Control: Application Server Controlを使用して、特定のWebサービス・ポートにおけるすべての操作のセキュリティを構成するか、ポートの個々の操作に対する特定のセキュリティ設定を構成します。oracle-webservices.xml
および<
generated_name
>_Stub.xml
ファイルのコンテンツは変更されません。現在有効なWebサービス・セキュリティおよび管理ポリシーを含むwsmgmt.xml
ファイルが変更されます。Application Server Controlは、クライアントではなくWebサービスのみの構成を変更できます。
詳細は、Application Server Controlのオンライン・ヘルプでWebサービスのセキュリティ構成に関するトピックを参照してください。
WebServicesAssembler: このコマンドライン・ツールを使用して、Webサービスとクライアントにおけるセキュリティ要素を構成およびアセンブルします。
手動構成: セキュリティを手動で構成するには、サーバーおよびクライアントのデプロイメント・ディスクリプタ・ファイルに直接、セキュリティ要素の値を入力します。
クライアントおよびサーバーに対するWebサービス・セキュリティ構成はインバウンド・ポリシーおよびアウトバウンド・ポリシーに基づいています。これらのポリシーは「セキュリティ・ポリシー」で定義されます。
図2-1に、Webサービス・セキュリティの構成時に生成されたデプロイメント・ディスクリプタと、クライアントおよびサービスに対する情報の流れを示します。次のステップは図中の番号にそれぞれ対応します。
Webサービス・クライアントに対するセキュリティ構成。クライアントに対するセキュリティの構成によって、セキュリティ構成が保存された<
generated_name
>_Stub.xml
デプロイメント・ディスクリプタが生成されます。クライアント・インターセプタは実行時に<
generated_name
>_Stub.xml
デプロイメント・ディスクリプタを使用して、セキュリティ・ヘッダーを生成(<outbound>
要素が構成されている場合)、またはセキュリティ・ポリシーを実行(<inbound>
要素が構成されている場合)します。
Webサービス(サーバー側)に対するセキュリティ構成。Webサービス・アプリケーションに対するセキュリティの構成によって、セキュリティ構成が保存されたoracle-webservices.xml
デプロイメント・ディスクリプタが生成されます。
Webサービスをデプロイするとき、ステップ2で説明したoracle-webservices.xml
デプロイメント・ディスクリプタで構成されたWebサービス・セキュリティによってwsmgmt.xml
ファイルが更新されます。wsmgmt.xml
ファイルはインスタンス・レベルの構成ファイルで、OC4JインスタンスにデプロイされたWebサービスのセキュリティ構成全体を保持しています。サーバー・インターセプタは実行時にwsmgmt.xml
ファイルを使用して、セキュリティ・ポリシーを実行(inbound要素が構成されている場合)、またはセキュリティ・ヘッダーを生成(outbound要素が構成されている場合)します。
図中で、破線のボックスはWebサービスのクライアント構成で指定された<outbound>
要素に対して、対応するWebサービス構成の<inbound>
要素があることを示しています。同様に、Webサービスで指定された<outbound>
要素に対して、対応するクライアント構成ファイルの<inbound>
要素があることを示しています。
たとえば、クライアントの<outbound>
要素の<username-token>
下位要素は、クライアントがユーザー名トークンを送信することを示します。Webサービスの<inbound>
要素には、これに対応する、Webサービスがユーザー名トークンを検証する必要があることを示す<verify-username-token>
要素があります。
この項ではセキュリティ構成要素の定義を説明します。一連の同じセキュリティ構成要素がグローバル、ポートおよび操作のレベルに表示される場合があります。操作レベルで設定されたセキュリティ構成要素の値は、ポートおよびグローバル・レベルにおける設定を上書きします。ポート・レベルの設定はグローバル・レベルの設定を上書きします。
通常、OracleAS Web Servicesセキュリティの要素は、SOAPメッセージのヘッダーまたはボディに表示されます。クライアントはサーバー側と同じ一連のセキュリティ構成要素を使用します。例2-1に、サーバー側のoracle-webservices.xml
デプロイメント・ディスクリプタで使用されるセキュリティ構成要素を示します。
例2-1 サーバー側の構成ファイルのセキュリティ構成要素
<oracle-webservices xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://xmlns.oracle.com/oracleas/schema/oracle-webservices-10_0.xsd"> <webservice-description name="XYZService "> <port-component name="XYZPort"> <runtime enabled="security"> <security> <key-store store-pass="abc" path="./mykeystore.jks"/> <signature-key alias="signkey" key-pass="signkeypass"/> <encryption-key alias="enckey" key-pass="enckeypass"/> </security> </runtime> <operations> <operation name="sayHello" input="{http://tempuri.org/}/sayHello"> <runtime> <security> <inbound> <verify-username-token /> <verify-x509-token /> <verify-saml-token/> <verify-signature> <signature-methods> <signature-method> RSA-SHA1 </signature-method> </signature-methods> <tbs-elements> <element name-space="http://schemas.xmlsoap.org/soap/envelope" local-part="Body"/> </tbs-elements> <verify-timestamp expiry="28800" created="true"/> </verify-signature> <decrypt> <encryption-methods> <encryption-method> 3DES </encryption-method> </encryption-methods> <keytransport-methods> <keytransport-method> RSA-1_5 </keytransport-method> </keytransport-methods> <tbe-elements> <element name-space="http://schemas.xmlsoap.org/soap/envelope" local-part="Body" mode="CONTENT"/> </tbe-elements> </decrypt> </inbound> <outbound> <signature> <tbs-elements> <tbs-element name-space="http://schemas.xmlsoap.org/soap/envelope/" local-part="Body"/> </tbs-elements> </signature> <encrypt> <recipient-key alias="enckey"/> <tbe-elements> <tbe-element name-space="http://schemas.xmlsoap.org/soap/envelope/" local-part="Body" /> </tbe-elements> </encrypt> </outbound> </security> </runtime> </operation> </operations> </port-component> </webservice-description> </oracle-webservices>
例2-2に、クライアント側の<
generated_name
>_Stub.xml
デプロイメント・ディスクリプタで使用されるセキュリティ構成要素を示します。
例2-2 クライアント側の構成ファイルのセキュリティ構成要素
<oracle-webservice-clients> <webservice-client> <port-info> <runtime enabled="security"> <key-store path="mykeystore.jks" store-pass="password"/> <signature-key alias="signkey" key-pass="signkeypass"/> <security> <outbound> <username-token name="SCOTT" password="TIGER"/> <signature> <tbs-elements> <tbs-element name-space="http://schemas.xmlsoap.org/soap/envelope/" local-part="Body"/> </tbs-elements> <add-timestamp created="true" expiry="28800"/> </signature> <encrypt> <recipient-key alias="reckey"/> <tbe-elements> <tbe-element name-space="http://schemas.xmlsoap.org/soap/envelope/" local-part="Body"/> </tbe-elements> </encrypt> </outbound> </security> </runtime> <operations> <operation name="sayHello"/> </operations> </port-info> </webservice-client> </oracle-webservice-clients>
<key-store>
要素はサーバー側のグローバルおよびポート・レベルで、またクライアント側のポート・レベルで必須となり、使用されます。グローバル・キーストア設定はインスタンス内にデプロイされたすべてのアプリケーションに適用されます。これは特定のポート・レベル・キーストアで上書きされる可能性があります。<key-store>
要素の値を変更した場合は、新しい値を有効にするためアプリケーションを再起動する必要があります。
表2-1 キーストア設定
要素名 | 説明 |
---|---|
<key-store> |
キーストアへのパスを指定します。この要素はグローバルまたはポート・レベルで表示される場合があります。この要素には次の属性があります。 |
ポート・レベル・キーストアが指定されている場合、または鍵をグローバル・キーストアから選択する際は、<signature-key>
および<encryption-key>
が必要です。これらの鍵がポート・レベルで構成されていない場合は、グローバル・レベルの値が使用されます。
<signature-key>
または<encryption-key>
要素の値を変更した場合は、新しい値を有効にするためアプリケーションを再起動する必要があります。
表2-2 一般セキュリティ設定
要素名 | 説明 |
---|---|
<signature-key> |
|
<encryption-key> |
メッセージの復号化に必要な鍵を示します。この要素には次の属性があります。
|
Nonceは、リプレイ攻撃を防止するためユーザー名トークンに含まれるランダム値です。Nonceはサーバーでキャッシュされます。OracleAS Web Servicesセキュリティでは、ユーザー名トークンに挿入可能なNonce値を構成できます。Nonceの構成の詳細は、「ダイジェスト・パスワードによるNonceキャッシュの構成」を参照してください。
次の項では、インバウンド・メッセージに対して設定可能なセキュリティ要素について説明します。
oracle-webservices.xml
および<
generated_name
>_Stub.xml
デプロイメント・ディスクリプタ内のインバウンド・メッセージ・セクションは、<inbound>
要素で区切られます。<inbound>
要素は受信メッセージに関連するセキュリティ構成ポリシーをカプセル化します。<inbound>
要素は、<security>
の下位要素としてグローバル、ポートおよび操作レベルで使用できます。
インバウンド・セキュリティは、受信メッセージに対するコンテキスト固有のセキュリティ・ポリシーを定義します。クライアントの場合、これはレスポンスの受信に関連付けられたセキュリティ・ポリシーを表します。サービスの場合、これはリクエストの受信に関連付けられたセキュリティ・ポリシーを表します。
<verify-username-token>
、<verify-x509-token>
および<verify-saml-token>
の要素は、インバウンド・メッセージに対する認証要素です。認証要素はオプションで、サーバー側に対して構成できます。Webサービス・アプリケーションはユーザー名トークン、X.509トークンおよびSAMLトークンをどのような組合せでも許容するように選択できます。
Webサービス・クライアントは認証トークンを送信することは求められません。認証トークンが必要な場合は、1つのみ送信できます。ユーザーは、SOAPリクエストで送信されたトークンに基づいて認証されます。
表2-4に、インバウンド・メッセージ構成に挿入可能なセキュリティ・トークンの概要を示します。
表2-4 インバウンド・メッセージに対する認証要素
要素名 | 説明 |
---|---|
ユーザー名トークンに対するセキュリティ・ポリシーを指定します。このセキュリティ・トークンの詳細は、「インバウンド・メッセージに対するユーザー名トークン要素」を参照してください。 |
|
X.509トークンに関連する認証ポリシーを指定します。このセキュリティ・トークンの詳細は、「インバウンド・メッセージに対するX.509トークン要素」を参照してください。 |
|
SAMLアサーションを保持する受信SOAPメッセージを検証するかどうか指定します。このセキュリティ・トークンの詳細は、「インバウンド・メッセージに対するSAMLトークン要素」を参照してください。 |
<verify-username-token>
要素は、ユーザー名トークンに対するセキュリティ・ポリシーを指定します。これは<inbound>
要素のオプションの下位要素で、要素内で1回だけ使用できます。この下位要素には次の属性があります。
password-type
: パスワード認証タイプで、plaintext
またはdigest
になります。デフォルトはplaintext
です。
require-nonce
: Nonceをユーザー名トークンに含める必要があるかどうかを指定します。この属性はDigest認証に必須です。デフォルトはfalse
です。
require-created
: 作成時間をユーザー名トークンに含める必要があるかどうかを指定します。この属性はプレーン・テキストまたはダイジェストのパスワード認証のどちらかで使用できます。ただし、Digest認証の場合はtrue
に設定する必要があります。デフォルトはfalse
です。
<verify-username-token>
要素にはオプションの<property>
下位要素もあります。表2-5でproperty要素およびその値について説明します。
表2-5 <verify-username-token>要素の下位要素
要素名 | 説明 |
---|---|
<property> |
OracleAS Web Servicesセキュリティは
このプロパティの使用方法の例は、「パスワードを要求しないサービスの構成」を参照してください。 |
<verify-x509-token>
要素は、X.509トークンに関連する認証ポリシーを指定します。これは<inbound>
要素のオプションの下位要素です。
<verify-saml-token>
要素は<inbound>
要素のオプションの下位要素です。SAMLアサーションを保持する受信SOAPメッセージを検証するかどうか指定します。
表2-6に<verify-saml-token>
要素の下位要素を一覧表示します。下位要素はすべてオプションです。
<verify-signature>
要素は<inbound>
要素のオプションの下位要素です。これは受信者の整合性または署名要件を指定します。この要件には、署名検証アルゴリズムの名前と検証対象のメッセージ部分が含まれます。<verify-signature>
要素は<inbound>
要素内で1回だけ使用できます。表2-7で<verify-signature>
要素の下位要素について説明します。下位要素はすべてオプションです。
表2-7 <verify-signature>要素の下位要素
要素名 | 説明 |
---|---|
|
|
受信リクエストで署名されていることが求められる要素の一覧。この要素には次の属性があります。 |
|
受信したSOAPメッセージのタイムスタンプを検証します。(このタイムスタンプは表2-17に説明のある |
|
<property> |
OracleAS Web Servicesセキュリティは
|
<decrypt>
要素は<inbound>
要素のオプションの下位要素です。これは受信者の秘匿性要件を指定します。<decrypt>
要素は<inbound>
要素内で1回だけ使用できます。
表2-8で、インバウンド・メッセージに対する復号化の詳細の設定に使用できる要素について説明します。下位要素はすべてオプションです。
表2-8 <decrypt>要素の下位要素
要素名 | 説明 |
---|---|
表2-9に、Webサービス・セキュリティで認識される暗号化アルゴリズムURIおよび対応する短縮名を一覧表示します。
|
|
表2-10に、Webサービス・セキュリティで認識されるアルゴリズムURIおよび対応する短縮名を一覧表示します。 |
|
|
|
<property> |
OracleAS Web Servicesセキュリティは
|
表2-9に、Webサービス・セキュリティと対応する短縮名で認識される暗号化アルゴリズムのURIを一覧表示します。
表2-9 暗号化アルゴリズムに対するURIと短縮名
アルゴリズムのURI | 短縮名 |
---|---|
http://www.w3.org/2001/04/xmlenc#3des-cbc |
3DES |
http://www.w3.org/2001/04/xmlenc#aes128-cbc |
AES-128(デフォルト) |
http://www.w3.org/2001/04/xmlenc#aes256-cbc |
AES-256 |
表2-10に、Webサービス・セキュリティと対応する短縮名で認識される鍵トランスポート・アルゴリズムのURIを一覧表示します。
次の項では、アウトバウンド・メッセージに対して設定可能なセキュリティ要素について説明します。
oracle-webservices.xml
および<
generated_name
>_Stub.xml
デプロイメント・ディスクリプタ内のアウトバウンド・メッセージ・セクションは、<outbound>
要素で区切られます。アウトバウンド・セキュリティは、送信メッセージに対するコンテキスト固有のセキュリティ・ポリシーを定義します。クライアントの場合、これはリクエストの送信に関連付けられたセキュリティ・ポリシーを表します。サービスの場合、これはレスポンスの送信に関連付けられたセキュリティ・ポリシーを表します。
表2-11に、アウトバウンド・メッセージ構成に挿入可能なセキュリティ・トークンの概要を示します。
表2-11 アウトバウンド・セキュリティ・トークン
要素名 | 説明 |
---|---|
ユーザー名トークンをセキュリティ・ヘッダー・ブロックに挿入することを指定します。このセキュリティ・トークンの詳細は、「アウトバウンド・メッセージに対するユーザー名トークン要素」を参照してください。 |
|
この要素が存在する場合、X.509証明書がセキュリティ・ヘッダー・ブロックに挿入されます。「アウトバウンド・メッセージに対するX.509トークン要素」を参照してください。 |
|
クライアント・インターセプタはこの要素のコンテンツを使用して、ユーザーIDに対するSAMLアサーションを作成します。このセキュリティ・トークンの詳細は、「アウトバウンド・メッセージに対するSAMLトークン要素」を参照してください。 |
|
送信するメッセージまたは個別メッセージ要素の署名に対するアルゴリズムを指定します。このセキュリティ・トークンの詳細は、「アウトバウンド・メッセージに対する署名要素」を参照してください。 |
|
送信するメッセージまたはメッセージ要素の暗号化に対する暗号化アルゴリズム、鍵トランスポート・アルゴリズム、および受信者の鍵を指定します。このセキュリティ・トークンの詳細は、「アウトバウンド・メッセージに対する暗号化要素」を参照してください。 |
<username-token>
要素はアウトバウンド・ポリシーのオプションの要素です。この要素は、ユーザー名トークンをセキュリティ・ヘッダー・ブロックに挿入することを指定します。要素の1つのインスタンスのみが許容されます。
クライアントはコールバック・ハンドラを使用してユーザー名とパスワードを渡すことができます。コールバック・ハンドラは、javax.security.auth.Namecallback
およびPasswordcallback
を取り扱うユーザー定義クラスです。クラスの名前は<username-token>
要素のcbhandler-name
属性で指定できます。
この要素が存在しない場合、クライアント・ランタイムはJAX-RPCでサポートされているStub.USERNAME_PROPERTY
およびStub.PASSWORD_PROPERTY
を使用してユーザー名トークンを構築できます。Webサービス・クライアントはデプロイメント・ディスクリプタでユーザー名およびパスワードを指定して、Stub
プロパティまたは静的構成のどちらかを使用できます。Stub
プロパティの詳細は、「Stubプロパティによるユーザー名およびパスワードの受渡し」を参照してください。
表2-12で<username-token>
属性について説明します。属性はすべてオプションです。
表2-12 <username-token>要素の属性
属性名 | 説明 |
---|---|
トークンに挿入されるユーザー名。 |
|
ユーザーの実際のパスワード。 |
|
パスワード・タイプで、 |
|
ユーザー名トークンをSOAPメッセージに挿入するコールバック・ハンドラの名前。コールバック・ハンドラは、 |
|
Nonceをリクエストに追加するかどうか指定します。Digest認証では、この属性は必須であり |
|
作成時間をリクエストに追加するかどうか指定します。ダイジェスト・パスワード認証では、この属性は必須であり |
<x509-token>
要素は<outbound>
構成のオプションの要素です。この要素は、X.509署名証明書がリクエストに挿入されることを示します。X.509証明書(署名者の証明書)への直接参照が追加されます。ユーザーは、この構成が動作するように構成された署名鍵を保持する必要があります。
(直接参照を使用して)証明書を渡すかわりに、証明書のサブジェクト鍵識別子を渡すこともできます。サブジェクト鍵識別子の受渡し方法については、「署名用のサブジェクト鍵識別子の使用方法」を参照してください。
表2-13で<x509-token>
要素の下位要素について説明します。
表2-13 <x509-token>要素の下位要素
要素名 | 説明 |
---|---|
<property> |
OracleAS Web Servicesセキュリティは
|
<saml-token>
要素は<outbound>
ポリシーのオプションの要素です。クライアント・インターセプタは、ユーザーIDに対する実際のSAMLアサーションの作成のため、アウトバウンド・ポリシーの<saml-token>
要素を参照します。SAMLトークンの動的および静的な構成方法については、「クライアント側のSAMLトークンの構成方法」を参照してください。表2-14で<saml-token>
要素の属性について説明します。属性はすべてオプションです。
表2-14 <saml-token>要素の属性
属性 | 説明 |
---|---|
(必須)アサーション・サブジェクトの名前を、 [realm-name nameはアサーションの名前を表します。アサーションの名前の先頭にはアサーションのrealm-nameを付加できます。レルム名がすでに存在する場合、これはname修飾子として設定されます。
|
|
アサーション・サブジェクト名の書式を指定します。この要素は次のいずれかの値になります。
|
|
コールバック・ハンドラがSAMLトークン・コールバックを処理できるようにする必要があります。このハンドラの書込み方法の詳細は、「SAMLトークン・コールバック・ハンドラの書込み」を参照してください。 |
|
SAMLアサーションの発行者名の取得に使用されます。デフォルト値は |
表2-15で<saml-token>
要素の下位要素を説明します。下位要素はすべてオプションです。
表2-15 <saml-token>要素の下位要素
要素名 | 説明 |
---|---|
サポートされている確認メソッドは 確認メソッドおよびこの要素の構成方法については、「確認メソッドの構成」を参照してください。 |
|
このプロパティ・ファイルには、ユーザーのIDのアサーションを行うための1つ以上の属性名/値のペアが含まれます。属性名の先頭にはオプションのネームスペースが付属する場合があります。次に例を示します。 [attribute-name-space
|
|
外部SAML認証局からSAMLトークンを取得することができます。詳細は、「外部SAML認証局からSAMLトークンを取得するための要素」を参照してください。 |
<saml-authority>
要素は<saml-token>
のオプションの下位要素です。<saml-authority>
要素およびその属性の構成では、SAMLPリクエストを発行することで外部SAML認証局からSAMLトークンを取得することができます。この要素の構成の詳細は、「外部SAML認証局からのSAMLトークンの取得」を参照してください。表2-16で<saml-authority>
の属性について説明します。
表2-16 <saml-authority>要素の属性
名前 | 説明 |
---|---|
(必須)SAML応答者のURLを指定します。 |
|
SAML認証局への認証の提供に使用されるユーザー名を指定します。この属性は |
|
(オプション)SAML認証局への認証の提供に使用されるパスワードを指定します。 |
|
(オプション)このブール属性が キーストアおよび署名鍵の構成の詳細は、「キーストア要素」と「署名および暗号の鍵の要素」を参照してください。 |
表2-17で<signature>
要素の下位要素について説明します。下位要素では、アウトバウンド・メッセージの署名に使用できるオプションを説明します。
表2-17 <signature>要素の下位要素
要素名 | 説明 |
---|---|
表2-18「署名アルゴリズムと短縮名」に、OracleAS Web Servicesセキュリティで認識されるアルゴリズムURIおよび対応する短縮名を一覧表示します。 |
|
|
|
アウトバウンドSOAPメッセージにタイムスタンプを追加します。(このタイムスタンプは表2-7に説明のある |
表2-18に、Webサービス・セキュリティと対応する短縮名で認識される署名アルゴリズムを一覧表示します。
<encrypt>
要素は<outbound>
要素のオプションの下位要素です。これは送信者の秘匿性要件を指定します。<encrypt>
要素は<outbound>
要素内で1回だけ使用できます。
表2-19で、アウトバウンド・メッセージに対して使用できる暗号化要素について説明します。
表2-19 <encrypt>要素の下位要素
要素名 | 説明 |
---|---|
アウトバウンドSOAPメッセージの要素の暗号化に使用される暗号化メソッドを指定します。
表2-9に、Webサービス・セキュリティで認識される暗号化アルゴリズムのURIおよび対応する短縮名を一覧表示します。 |
|
表2-10に、Webサービス・セキュリティで認識されるアルゴリズムのURIおよび対応する短縮名を一覧表示します。 |
|
|
|
受信者の鍵別名で、データ暗号鍵の暗号化に使用されます。データ暗号鍵は、実際のデータの暗号化に使用される生成済の対称鍵です。データ暗号鍵自体も、受信者の公開鍵を使用して暗号化されます。 受信者の鍵には鍵用途拡張領域がある場合とない場合があります。受信者の鍵に鍵用途拡張領域がある場合、これは この要素には次の属性があります。 |
|
Webサービス・クライアントが署名済SOAPメッセージを送信し、Webサービス・アプリケーションが署名を正常に検証しました。Webサービス・アプリケーションが同じクライアントに対してレスポンスを送り返すとき、クライアントが最初のメッセージ交換で送信した署名証明書を使用して、そのレスポンスを暗号化することを選択できます。
|