ヘッダーをスキップ
Oracle® Fusion Middleware Oracle Web Services ManagerによるWebサービスの保護とポリシーの管理
12c (12.1.3)
E59414-02
  目次へ移動
目次

前
 
次
 

12 セキュア通信の構成

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

Web Services Secure Conversation Language (WS-SecureConversation)仕様(http://docs.oasis-open.org/ws-sx/ws-secureconversation/v1.4/os/ws-secureconversation-1.4-spec-os.doc)は、Web Services Security (WS-Security) 1.1と1.0およびWeb Services Trust Language (WS-Trust)で構築する拡張を定義し、1つ以上のメッセージを介してセキュアな通信を提供します。この仕様では、セキュリティ・コンテキストを確立および共有し、そのセキュリティ・コンテキスト(または共有秘密)からキーを派生させるためのメカニズムが定義されています。

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ポリシーをアタッチすることもできます。次の組合せが可能です。

セキュア通信およびそれを使用する必要がある場合の詳細は、『Oracle Web Services Managerの理解』のセキュア通信の概要に関する項を参照してください。

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

12.1 セキュア通信の構成

多くの場合、ポリシーの作成とセキュア通信の有効化以外にWS-SecureConversation固有の構成を実行する必要はありません。「WS-SecureConversationをサポートするOWSMポリシー」で説明される事前定義済WS-SecureConversationポリシーを使用する場合は、WS-SecureConversationがすでに有効になっています。必要とされる他の構成のすべてがWS-SecureConversationを使用しないポリシーと同じです。

WS-SecureConversationを構成する場合、Webサービスおよびクライアント・ポリシーの両方に対して構成する必要があります。これは、OWSMクライアントおよびサーバー・エージェントがハンドシェイク・プロセスに参加し、通信を保護するために使用されるSecurity Context Token (SCT)を確立するためです。OWSMクライアントはRST (リクエスト・セキュリティ・トークン)をサービスに送信し、その後そのサービスがSCTを含むRSTR (リクエスト・セキュリティ・トークン・レスポンス)を返します。

「S-SecureConversationをサポートするOWSMポリシー」で説明されるOWSMセキュリティ・ポリシーには、そのポリシーのWS-SecureConversationを有効化および構成することが可能な構成設定が含まれています。これらの事前定義済ポリシーを使用するとセキュリティ・タスクを簡単に表示および管理できるようになることがわかります。

また、多数の事前定義済アサーション・テンプレートに基づいたポリシーはWS-SecureConversationもサポートしています。詳細は、第18章「事前定義済アサーション・テンプレート」を参照してください。

12.1.1 Fusion Middleware Controlを使用したセキュア通信の構成

Fusion Middleware Controlを使用してWS-SecureConversationを構成する手順は次のとおりです。

  1. 「Fusion Middleware Controlを使用したドメインのセキュア通信の構成」の説明に従って、ドメイン・レベルでWS-Secure通信を構成します。デフォルトでニーズが満たさない場合のみこれを実行する必要があります。

  2. コンテンツ・ペインで、「WebLogicドメイン」「Webサービス」「ポリシー」の順にクリックします。

  3. 「S-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サービスにアタッチされていない場合は、第4章「ポリシーのアタッチ」の説明に従ってアタッチしてください。

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

WLSTを使用して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.2 設計時のセキュア通信ポリシーのアタッチ

「設計時におけるWebサービスおよびクライアントへのポリシーのアタッチ」の手順に従って、注釈APIを使用して設計時にWS-SecureConversationポリシーをアタッチできます。

例12-1および例12-2の例を検討します。ここでは、oracle/wss11_username_token_with_message_protection_wssc_service_policyポリシーを単独で、およびポリシー・セットでアタッチします。

例12-1 WS-SecureConversationポリシーのアタッチ

@PortableWebService 
@oracle.webservices.annotations.SecurityPolicy(
"oracle/wss11_username_token_with_message_protection_wssc_service_policy")
 
public class TestService { 
 
...... } 

例12-2 ポリシー・セットでのWS-SecureConversationポリシーのアタッチ

@PortableWebService 
@PolicySet(references=
{@PolicyReference(value="oracle/wss11_username_token_with_message_protection_wssc_service_policy"), 
  @PolicyReference(value="oracle/wsrm11_policy")
}) 
 
public class TestService { 
 
...... } 

12.3 永続性の構成

『Oracle Web Services Managerの理解』の永続性に関する項で説明されるように、各クライアントおよびWebサービスは、1つ以上の(ポートごとに)永続性プロバイダを指定できます。永続性プロバイダにはCoherenceプロバイダまたはメモリー内プロバイダのいずれかを指定できます。


注意:

Oracle Infrastructure Webサービスおよびクライアントに対してのみ、この項で説明されているように永続性を構成できます。

WebLogic (Java EE) Webサービスの場合は、『Oracle WebLogic Server JAX-WS Webサービスの高度な機能のプログラミング』のWebサービス永続性の構成に関する項に従って、永続性を構成します。


Coherence永続性プロバイダがWebLogic Serverで実行されている場合は、このプロバイダが、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のみ指定できます。

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属性を設定します。

クライアントの永続性の構成

  • 次の例に示すように、設計時にクライアントに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.4 セキュア通信セッションの管理

「WS-SecureConversationアーキテクチャ」で説明したように、OWSMは計算されたセッションIDに基づいて、クライアントとサーバーの安全な会話セッション情報を保持します。OWSM (内部セッション・メカニズムを介して)は実行時にメッセージごとにセッションIDを計算し、1つのセッションに1つ以上のリクエストを関連付けます。

次の場合、一般的にセッションIDは再利用されます。

  • 同じクライアントから後続のリクエストを受信し、セッションIDがまだ解放されていない場合。(セッションIDがすでに解放されている場合は、新規セッションIDが作成されます。)

  • sc.token.lifetimeプロパティが期限切れになっていない場合。

セキュア通信セッションIDは一度作成されると、WebLogic Serverインスタンスの起動に使用された規定のJava仮想マシンが停止されるまで、自動的に削除されません。

セッション管理WLSTコマンドでは、次の状況でサーバー上のセッションIDを解放する手段が用意されています。

  • サーバーのパフォーマンスに問題が検出され、サーバー上のリソースを解放する場合。

  • SCTトークンが期限切れになった場合。getWebServiceSessionInfo()コマンドで表示される有効期限があります。SCTトークンが期限切れになった後は、セッションIDを削除できます。


注意:

セッションのスコープは、現在の永続性プロバイダです。つまり、現在の永続性プロバイダに格納されているセッションIDのみをリスト表示し、削除できます。

12.4.1 セキュア通信セッションを管理するためのWLSTコマンド

OWSMでは、セキュア通信セッションの管理に使用できる次のWLSTコマンドがあります。


注意:

WLSTコマンドが成功するには、ドメイン内のすべてのWebLogic Serverインスタンスが実行されている必要があります。

  • listWebServiceSessionNames() - 稼働中のサーバーのインスタンス内で表示可能なすべてのセッションの名前をリストします。返された名前は、getWebServiceSessionInfo(String)およびremoveWebServiceSession(String)コマンドへの以降の呼び出しで名前パラメータとして使用するのに適しています。

    例:

    wls:/base_domain/serverConfig> listWebServiceSessionNames()
    215d0d4a5ebbc3fec662f46adedc5bc74ecbc87b
    
  • getWebServiceSessionInfo() - セッション名を渡すと、そのセッションの現在の情報を表すデータ・オブジェクトを取得します。返される情報は次のとおりです。

    • name

    • 作成時間

    • 最終更新時間

    • 有効期限

    • 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コマンドに関する項を参照してください。