12 Oracle Web Services Managerを使用したセキュア通信の構成
この章の内容は次のとおりです。
12.1 Webサービス・セキュア通信の言語仕様の概要
Web Services Secure Conversation Language (WS-SecureConversation)仕様では、Web Services Security (WS-Security) 1.1、1.0およびWeb Services Trust Language (WS-Trust)に基づく拡張が定義されています。これらの拡張により、1つ以上のメッセージにまたがる通信を保護できます。この仕様では、セキュリティ・コンテキストを確立および共有し、そのセキュリティ・コンテキスト(または共有秘密)からキーを派生させるためのメカニズムが定義されています。
仕様ドキュメントへのリンク: http://docs.oasis-open.org/ws-sx/ws-secureconversation/v1.4/os/ws-secureconversation-1.4-spec-os.doc
WS-SecureConversationの特に重要な用途は、『Oracle Web Services Managerの理解』のWS-ReliableMessagingとWS-SecureConversationの使用に関する項で説明するように、WS-ReliableMessaging (WS-RM)ポリシーのセキュリティを提供することです。WS-SecureConversationポリシーとWS-RMポリシーの両方をアタッチすると、WS-RMポリシーはセキュア通信の使用による利点を得て、シーケンス攻撃を回避できます。
WS-RMポリシーを使用して、または使用しないで、非同期WebサービスにWS-SecureConversationポリシーをアタッチすることもできます。次の組合せが可能です。
-
WS-RMポリシーおよびWS-SecureConversationポリシー
-
非同期Webサービス、WS-RMポリシーおよびWS-SecureConversationポリシー
セキュア通信およびそれを使用する必要がある場合の詳細は、『Oracle Web Services Managerの理解』のセキュア通信の概要に関する項を参照してください。
12.2 セキュア通信の構成について
多くの場合、ポリシーの作成とセキュア通信の有効化以外にWS-SecureConversation固有の構成を実行する必要はありません。
「WS-SecureConversationをサポートするOWSMポリシー」で説明される事前定義済WS-SecureConversationポリシーを使用する場合は、WS-SecureConversationがすでに有効になっています。必要とされる他の構成のすべてがWS-SecureConversationを使用しないポリシーと同じです。
WS-SecureConversationを構成する場合、Webサービスおよびクライアント・ポリシーの両方に対して構成する必要があります。これは、OWSMクライアントおよびサーバー・エージェントがハンドシェイク・プロセスに参加し、通信を保護するために使用されるSecurity Context Token (SCT)を確立するためです。OWSMクライアントはRST (リクエスト・セキュリティ・トークン)をサービスに送信し、その後そのサービスがSCTを含むRSTR (リクエスト・セキュリティ・トークン・レスポンス)を返します。
「WS-SecureConversationをサポートするOWSMポリシー」で説明されるOWSMセキュリティ・ポリシーには、そのポリシーのWS-SecureConversationを有効化および構成することが可能な構成設定が含まれています。これらの事前定義済ポリシーを使用するとセキュリティ・タスクを簡単に表示および管理できるようになることがわかります。
また、多数の事前定義済アサーション・テンプレートに基づいたポリシーはWS-SecureConversationもサポートしています。詳細は、Oracle Web Services Managerの事前定義済アサーション・テンプレートを参照してください。
この項では、次の項目について説明します。
12.2.1 Fusion Middleware Controlを使用したセキュア通信の構成
このトピックでは、Fusion Middleware Controlを使用してWS-SecureConversationを構成するために実行する必要がある手順について説明します。
WS-SecureConversationを構成するには:
12.2.2 WLSTを使用したセキュア通信の構成
WSLTを使用してWS-SecureConversationを構成できます。
WS-SecureConversationを構成するには:
WLSTコマンドおよびその引数の詳細は、『WebLogic Server WLSTコマンド・リファレンス』のWebサービスのカスタムWLSTコマンドに関する項を参照してください。
12.3 設計時のセキュア通信ポリシーのアタッチ
設計時に、注釈APIを使用してWS-SecureConversationポリシーをアタッチできます。
このAPIについては、設計時におけるWebサービスおよびクライアントへのポリシーのアタッチの理解で説明されています。
次の例は、oracle/wss11_username_token_with_message_protection_wssc_service_policy
ポリシーのみをポリシー・セットにアタッチしています。
@PortableWebService
@oracle.webservices.annotations.SecurityPolicy(
"oracle/wss11_username_token_with_message_protection_wssc_service_policy")
public class TestService {
...... }
@PortableWebService @PolicySet(references= {@PolicyReference(value="oracle/wss11_username_token_with_message_protection_wssc_service_policy"), @PolicyReference(value="oracle/wsrm11_policy") }) public class TestService { ...... }
12.4 永続性の構成について
各クライアントおよびWebサービスでは、1つ以上(ポートごとに1つ)の永続性プロバイダを指定できます。Coherenceプロバイダまたはメモリー内プロバイダのいずれかの指定が可能です。
詳細は、Oracle Web Services Managerの理解の永続性に関する項を参照してください。
この項では、次の項目について説明します。
12.4.1 永続性の概要
Coherence永続性プロバイダがWebLogic Serverで実行されている場合は、このプロバイダが、Webサービス・クライアントとWebサービスの両方に対してデフォルトになります。それ以外の場合は、メモリー内プロバイダがデフォルトになります。
注意:
Oracle Infrastructure Webサービスおよびクライアントに対してのみ、この項で説明されているように永続性を構成できます。
WebLogic (Java EE) Webサービスの場合は、『Oracle WebLogic Server JAX-WS Webサービスの高度な機能のプログラミング』のWebサービス永続性の構成に関する項に従って、永続性を構成します。
次の構成ルールが適用されます。
-
デフォルトで、クライアントがWebLogic Serverで実行している場合はCoherenceプロバイダを使用し、それ以外の場合は、メモリー内プロバイダを使用します。WebLogic Serverにデプロイされる場合、WebサービスはCoherenceプロバイダを使用します。それ以外の場合は、メモリー内プロバイダを使用します。
-
サービス品質要件で示すように、Webサービスに対してある永続性メカニズム(ポートごと)を指定し、クライアントに対しては別のメカニズムを指定できます。構成が同じではない場合があるため、クライアントとWebサービスが同じ
providerName
タイプを使用する必要はありません。 -
選択したメカニズムにかかわらず、
providerName
が空の場合、使用可能な場合はoracle:jrf:Coherence
が使用され、それ以外の場合はoracle:jrf:Memory
が使用されます。 -
oracle:jrf:Coherence
を明示的に設定していて、使用できない場合、エラーが戻されます。
永続性を構成するには、次のメカニズムのいずれかを使用できます。それぞれの場合において、providerName
のみを指定します。これは、oracle:jrf:Memory
またはoracle:jrf:Coherence
のみ指定できます。
12.4.2 Webサービスの永続性の構成
このトピックでは、Webサービスの永続性の構成方法について説明します。
-
「@Persistence」で説明され、次の例に示すように、設計時にWebサービスに
@Persistence
ポリシー注釈を使用します。@PortableWebService @SecurityPolicy("oracle/wss11_username_token_with_message_protection_wssc_service_policy")
@Persistence(providerName="oracle:jrf:Coherence")
public class TestService { ...... } -
設計時におけるWebサービスおよびクライアントへのポリシーのアタッチの理解で説明され、次の例に示すように、設計時にWebサービスに
@PolicyReference
ポリシー注釈を使用します。@PortableWebService @SecurityPolicy("oracle/wss11_username_token_with_message_protection_wssc_service_policy") @PolicySet(references={ @PolicyReference(value="oracle/wss11_username_token_with_message_protection_wssc_service_policy"),
@PolicyReference(value="oracle/persistence_policy")
}) public class TestService { ...... } -
「Fusion Middleware Controlを使用したWebサービスおよびクライアントへのポリシーのアタッチについて」および「WLSTを使用したWebサービスおよびクライアントへのポリシーのアタッチについて」で説明されているように、デプロイ後にFusion Middleware ControlまたはWLSTを使用して
oracle/persistence_policy
をアタッチし、providerName
属性を設定します。
12.4.3 クライアントの永続性の構成
このトピックでは、クライアントの永続性の構成方法について説明します。
-
次の例に示すように、設計時にクライアントに
policy-reference
要素を使用し、provider.name
プロパティを設定します。String configString = "<port-info>\n" + " <policy-references>\n" + " <policy-reference uri=\"oracle/wss11_username_token_with_message_protection_wssc_client_policy\" category=\"security\"/>\n" + "
<policy-reference uri=\"oracle/persistence_policy\" category=\"wsconfig\">"
+ "<property name=\"provider.name\" value=\"oracle:jrf:Memory\"/>
" + " </policy-reference>" + " </policy-references>\n" + "</port-info>"; // convert configString to Element ((BindingProvider) port).getRequestContext().put( ClientConstants.CLIENT_CONFIG, configElement); -
次の例に示すように、設計時に
PersistenceFeature
を設定します。PersistenceFeature persistenceFeature =
PersistenceFeature.builder().providerName("oracle:jrf:Memory").build();
port = service.getPort(new WebServiceFeature[] {persistenceFeature});
-
「Fusion Middleware Controlを使用したWebサービスおよびクライアントへのポリシーのアタッチについて」および「WLSTを使用したWebサービスおよびクライアントへのポリシーのアタッチについて」で説明されているように、デプロイ後にFusion Middleware ControlまたはWLSTを使用して
oracle/persistence_policy
をアタッチし、providerName
属性を設定します。
12.5 セキュア通信セッションの理解
OWSMは、計算されたセッションIDに基づいて、クライアントとサーバーのセキュア通信セッション情報を保持します。OWSM (内部セッション・メカニズムを介して)は実行時にメッセージごとにセッションIDを計算し、1つのセッションに1つ以上のリクエストを関連付けます。
これについては、WS-SecureConversationのアーキテクチャで説明されています。
次の場合、一般的にセッションIDは再利用されます。
-
同じクライアントから後続のリクエストを受信し、セッションIDがまだ解放されていない場合。(セッションIDがすでに解放されている場合は、新規セッションIDが作成されます。)
-
sc.token.lifetimeプロパティが期限切れになっていない場合。
セキュア通信セッションIDは一度作成されると、WebLogic Serverインスタンスの起動に使用された規定のJava仮想マシンが停止されるまで、自動的に削除されません。
セッション管理WLSTコマンドでは、次の状況でサーバー上のセッションIDを解放する手段が用意されています。
-
サーバーのパフォーマンスに問題が検出され、サーバー上のリソースを解放する場合。
-
SCTトークンが期限切れになった場合。
getWebServiceSessionInfo()
コマンドで表示される有効期限があります。SCTトークンが期限切れになった後は、セッションIDを削除できます。
注意:
セッションのスコープは、現在の永続性プロバイダです。つまり、現在の永続性プロバイダに格納されているセッションIDのみをリスト表示し、削除できます。
OWSMでは、セキュア通信セッションの管理に使用できる次のWLSTコマンドがあります。
注意:
WLSTコマンドが成功するには、ドメイン内のすべてのWebLogic Serverインスタンスが実行されている必要があります。
-
listWebServiceSessionNames()
- 稼働中のサーバーのインスタンス内で表示可能なすべてのセッションの名前をリストします。返された名前は、getWebServiceSessionInfo(String)
およびremoveWebServiceSession(String)
コマンドへの以降の呼び出しで名前パラメータとして使用するのに適しています。次に例を示します。
wls:/base_domain/serverConfig>
listWebServiceSessionNames()
215d0d4a5ebbc3fec662f46adedc5bc74ecbc87b -
getWebServiceSessionInfo()
- セッション名を渡すと、そのセッションの現在の情報を表すデータ・オブジェクトを取得します。返される情報は次のとおりです。-
名前
-
作成時間
-
最終更新時間
-
有効期限
-
KeyInfo[]
ユーザー定義のキーで、KeyInfo
はkeyName
およびkeyValue
です。次に例を示します。
wls:/base_domain/serverConfig>
getWebServiceSessionInfo('215d0d4a5ebbc3fec662f46adedc5bc74ecbc87b'
) Name: 215d0d4a5ebbc3fec662f46adedc5bc74ecbc87b Creation time: Mon Nov 04 17:47:39 PST 2013 Last update time: Mon Nov 04 17:47:42 PST 2013 Expiration time: Mon Nov 04 18:17:41 PST 2013 Key info: [oracle.wsm.security.secconv.util.property.SCT, 0x0000014225F1A1260AE4F30351FD1544DC10ED14201988C8CFEDFDBE8E0E4B09 ]
-
-
listWebServiceSessionNamesForKey()
-keyName
およびkeyValue
によって識別されるすべてのセッションの名前がリスト表示されます。返された名前は、
getWebServiceSessionInfo(String)
およびremoveWebServiceSession(String)
コマンドへの以降の呼び出しで名前パラメータとして使用するのに適しています。次に例を示します。
wls:/base_domain/serverConfig>
listWebServiceSessionNamesForKey('oracle.wsm.security.secconv.util.property.SCT',
'0x0000014225F1A1260AE4F30351FD1544DC10ED14201988C8CFEDFDBE8E0E4B09')
215d0d4a5ebbc3fec662f46adedc5bc74ecbc87b -
removeWebServiceSession()
— セッション名を渡すと、そのセッション名に関連づけられたセッション・オブジェクトを削除します。次に例を示します。
wls:/base_domain/serverConfig>
removeWebServiceSession('215d0d4a5ebbc3fec662f46adedc5bc74ecbc87b')
WLSTコマンドおよびその引数の詳細は、『WebLogic Server WLSTコマンド・リファレンス』のセッション管理WLSTコマンドに関する項を参照してください。