12 Oracle Web Services Managerを使用したセキュア通信の構成

この章では、OWSMによるWeb Services Trust (WS-Trust 1.3)およびWeb Services Secure Conversation (WS-SecureConversation 1.3)仕様の実装について説明します。これらはともにWebサービスとそのクライアント間のセキュアな通信を提供します。WS-SecureConversationを使用すると、Webサービスのパフォーマンスとセキュリティを向上できます。

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

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を構成するには:

  1. 「Fusion Middleware Controlを使用したドメインのセキュア通信の構成」の説明に従って、必要に応じて、ドメイン・レベルでWS-Secure通信を構成します。デフォルトでニーズが満たさない場合のみこれを実行する必要があります。
  2. コンテンツ・ペインで、「WebLogicドメイン」「Webサービス」「ポリシー」の順にクリックします。
  3. 「WS-SecureConversationをサポートするOWSMポリシー」のリストから事前構成済WS-SecureConversationポリシーのいずれか、またはWS-SecureConversationを有効にする別のセキュリティ・ポリシーを選択して、コピーを作成します。
  4. ポリシーのクローンを編集します。
  5. 「アサーション」タブを選択します。
  6. ページの「セキュア通信」セクションにスクロールします。

    事前定義済WS-SecureConversationポリシーの場合、セキュアな通信がデフォルトで有効になっています。その他すべてのポリシーで、セキュア通信はデフォルトで無効になります。

  7. デフォルト設定を変更せずにこのポリシーのセキュア通信を単純に有効化する場合は、「有効」「保存」の順にクリックして変更を完了します。
  8. 次の追加コントロールも使用できます。デフォルト設定は、ポリシーのタイプによって異なります。
  9. 次の「ブートストラップ・メッセージ・セキュリティ」オプションを使用できます。
    • アプリケーション設定から継承。これがデフォルトで、内部ポリシーのメッセージ・セキュリティ設定は、外部ポリシーから導出されます。

    • 独立した設定を使用。

      選択された場合、「アルゴリズム・スイート」、「署名の暗号化」、「署名の確認」および「タイムスタンプを含める」のオプションが使用できます。

  10. 「構成」をクリックします。

    「構成」ページには、ポリシーの構成プロパティのリストが表示されます。

    sc.token.lifetimeプロパティにより、セキュア通信セッションが無効になるまでのデフォルト時間をミリ秒で指定します。通信セッションの存続期間中は、このセキュリティ・コンテキストがクライアントとWebサービスによって共有されます。この時間が経過すると、SCTは時間切れとなります。

    この値を明示的に設定しなかった場合、「Fusion Middleware Controlを使用したドメインのセキュア通信の構成」で説明されているように、ドメイン全体の設定が適用されます。

  11. このポリシーがまだWebサービスにアタッチされていない場合は、Webサービスを管理および保護するためのポリシーのアタッチの説明に従ってアタッチしてください。

12.2.2 WLSTを使用したセキュア通信の構成

WSLTを使用してWS-SecureConversationを構成できます。

WS-SecureConversationを構成するには:

  1. 『Webサービスの管理』WebサービスのカスタムWLSTコマンドへのアクセスに関する項の説明に従って、WebLogic Serverの実行中のインスタンスに接続します。
  2. 「WLSTを使用したポリシーを直接アタッチする」で説明するように、beginWSMSessionコマンドを使用してセッションを開始します。次に例を示します。
    wls:/wls_domain/serverConfig> beginWSMSession()
    
    Session started for modification.
    
  3. 使用するポリシー・サブジェクトを選択します。「WLSTを使用したポリシー・サブジェクトの識別と選択」を参照してください。
  4. 「WLSTを使用したポリシーを直接アタッチする」で説明するように、attachWSMPolicyコマンドを使用して、Webサービス・ポートにセキュア通信ポリシーをアタッチします。次に例を示します。
    wls:/wls_domain/serverConfig> attachWSMPolicy('oracle/wss_username_token_over_ssl_wssc_client_policy')
    
    Policy reference "oracle/wss_username_token_over_ssl_wssc_client_policy" added.
    
  5. 「WLSTを使用した直接アタッチされたサービス・ポリシーの構成プロパティのオーバーライド」で説明されているように、setWSMPolicyOverrideコマンドを使用して、ポリシー・プロパティをオーバーライドします。
    setWSMPolicyOverride(policyURI, property, value)
    
  6. commitWSMSession()コマンドを使用して、リポジトリに対して、現在のセッションのコンテンツの書込みを行います。

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サービスの永続性の構成方法について説明します。

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[] ユーザー定義のキーで、KeyInfokeyNameおよび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コマンドに関する項を参照してください。