Sun GlassFish Enterprise Server v3 管理ガイド

第 13 章 メッセージセキュリティーの管理

この章では、Sun GlassFishTM Enterprise Server 環境で、Web サービスのメッセージレイヤーセキュリティーを設定する際の情報と手順について説明します。


注 –

メッセージセキュリティー (JSR 196) は、Enterprise Server の Full Platform Profile のみでサポートされ、Web Profile ではサポートされません。


ここでは、次のテーマを取り上げます。

この章の一部の内容は、セキュリティーと Web サービスに関する基本概念の理解を前提としてます。セキュリティーの詳細は、「Enterprise Server のシステムセキュリティーについて」を参照してください。

本章で説明するタスクを 管理コンソール から実行する手順については、管理コンソール オンラインヘルプを参照してください。

Enterprise Server のメッセージセキュリティーについて

「メッセージセキュリティー」により、サーバーはメッセージレイヤーで Web サービスの呼び出しと応答をエンドツーエンドで認証できます。セキュリティー情報がメッセージ内に挿入され、その情報が完全なメッセージとともにネットワークレイヤー経由でメッセージの送信先に届けられます。メッセージセキュリティーはトランスポートレイヤーセキュリティーと異なり、メッセージの伝送と保護を分離できるため、メッセージは伝送後も保護されたままとなります。

Enterprise Server 上に配備された Web サービスをセキュリティー保護するには、アプリケーションの配備先コンテナ、またはそのアプリケーションがサービスを提供する Web サービスエンドポイントのいずれかに対し、SOAP レイヤーメッセージセキュリティープロバイダとメッセージ保護ポリシーをバインドします。Enterprise Server のクライアント側コンテナで SOAP レイヤーメッセージセキュリティー機能を設定するには、クライアントコンテナ、またはクライアントアプリケーションによって宣言されたポータブルサービス参照のいずれかに対し、SOAP レイヤーメッセージセキュリティープロバイダとメッセージ保護ポリシーをバインドします。

メッセージレベルのセキュリティーは、Enterprise Server 全体に対して、または特定のアプリケーションやメソッドに対して設定できます。アプリケーションレベルでのメッセージセキュリティーの設定については、『Sun GlassFish Enterprise Server v3 Application Development Guide 』を参照してください。

ここでは、次のテーマを取り上げます。

セキュリティートークンとセキュリティーメカニズム

WS-Security は、Web サービスにセキュリティーを適用するための通信プロトコルを提供する仕様です。セキュリティーメカニズムはこの仕様を実装します。WSIT (Web Services Interoperability Technologies) は、WS-Security を実装して、メッセージが送信先のエンドポイントに達するまでに中間ノードを通過する場合でも、相互運用可能なメッセージコンテンツの完全性と機密性を提供します。WSIT によって提供される WS-Security は、既存のトランスポートレベルのセキュリティーに付加され、トランスポートレベルのセキュリティーもそのまま使用できます。Enterprise Server とともにインストールされる SOAP (Simple Object Access Protocol) レイヤーメッセージセキュリティープロバイダを使用すると、ユーザー名とパスワードのセキュリティートークンおよび X.509 証明書セキュリティートークンを利用して、SOAP Web サービスメッセージを認証および暗号化することができます。

認証プロバイダ

「認証レイヤー」とは、認証処理を実行する必要のあるメッセージレイヤーです。Enterprise Server は、SOAP レイヤーで Web サービスメッセージセキュリティーを適用します。サポートされている認証には次のタイプが含まれます。

Enterprise Server は、「認証プロバイダ」を呼び出して SOAP メッセージレイヤーセキュリティーを処理します。メッセージセキュリティープロバイダは、要求メッセージおよび応答メッセージに必要な認証のタイプなどの情報を提供します。Enterprise Server には、次のメッセージセキュリティープロバイダが用意されています。

「デフォルトサーバープロバイダ」は、特定のサーバープロバイダがバインドされていない任意のアプリケーションに対して呼び出されるサーバー側プロバイダを識別するために使用されます。

メッセージ保護ポリシー

「要求ポリシー」は、認証プロバイダが実行する要求処理に関連付けられた認証ポリシー要件を定義します。ポリシーはメッセージ送信者による順序で示されるので、「コンテンツのあと」ではメッセージ受信者が署名の検証前にメッセージを復号化することを意味します。「応答ポリシー」は、認証プロバイダが実行する応答処理に関連付けられた認証ポリシー要件を定義します。

メッセージ保護ポリシーは、要求メッセージの処理および応答メッセージの処理に対して定義されます。ポリシーは、ソース認証または受信者認証に関する要件として表現されます。プロバイダは、特定のメッセージセキュリティーメカニズムを適用することで、SOAP Web サービスメッセージにおけるメッセージ保護ポリシーを実現します。

要求および応答メッセージ保護ポリシーは、セキュリティープロバイダがコンテナ内に設定されるときに定義されます。また、アプリケーションやアプリケーションクライアントの Sun 固有の配備記述子内で、アプリケーション固有のメッセージ保護ポリシー (Web サービスのポートまたは処理の範囲でのポリシー) を設定することも可能です。メッセージ保護ポリシーを定義する場合は常に、クライアントの要求と応答に対するメッセージ保護ポリシーが、サーバー側の要求と応答に対するメッセージ保護ポリシーと同じである必要があります。アプリケーション固有のメッセージ保護ポリシーの定義については、『Sun GlassFish Enterprise Server v3 Application Development Guide』の第 5 章「Securing Applications」を参照してください。

アプリケーション固有の Web サービスセキュリティー

アプリケーション固有の Web サービスセキュリティー機能を (アプリケーション構築上で) 設定するには、対象アプリケーションの Sun 固有の配備記述子内で message-security-binding 要素を定義します。これらの message-security-binding 要素は、特定のセキュリティープロバイダまたはメッセージ保護ポリシーを Web サービスエンドポイントまたはサービス参照に関連付けるために使用されます。また、この要素を修飾することで、それらのプロバイダやポリシーが対応するエンドポイントまたは参照サービスの特定のポートやメソッドに適用されるようにすることも可能です。

アプリケーション固有のメッセージ保護ポリシーの定義については、『Sun GlassFish Enterprise Server v3 Application Development Guide』の第 5 章「Securing Applications」を参照してください。

メッセージセキュリティーの管理

Enterprise Server のインストール時に、SOAP レイヤーメッセージセキュリティープロバイダが Enterprise Server のクライアント側コンテナとサーバー側コンテナ内に設定され、コンテナまたはコンテナ内に配備された個々のアプリケーションまたはクライアントからバインドして利用できるようになります。インストール中、デフォルトのプロバイダには単純なメッセージ保護ポリシーが設定されます。このポリシーをコンテナまたはコンテナ内のアプリケーションまたはクライアントにバインドした場合、すべての要求メッセージと応答メッセージに含まれるコンテンツのソースが、XML デジタル署名によって認証されるようになります。

Enterprise Server の管理インタフェースを使用して、次の操作を実行できます。

アプリケーションクライアントコンテナの SOAP メッセージレイヤーセキュリティー構成でも、これと同様の管理操作を実行できます。Enterprise Server に配備されたすべての Web サービスアプリケーションを Web サービスセキュリティーで保護する場合は、「アプリケーションクライアントのメッセージセキュリティーの有効化」を参照してください。

Enterprise Server では、メッセージレイヤーセキュリティーはデフォルトで無効になっています。Enterprise Server でメッセージレイヤーセキュリティーを設定するには、「Web サービスのデフォルトメッセージセキュリティープロバイダの有効化」を参照してください。

ほとんどの場合、管理タスクを実行したあとに Enterprise Server を再起動する必要があります。特に、操作実行時に Enterprise Server にすでに配備されているアプリケーションに対して管理上の変更を適用する場合は、これに該当します。

メッセージセキュリティーのタスク

メッセージセキュリティーの一般的な実装タスクには、次のタスクの一部またはすべてが含まれます。

  1. バージョン 1.5.0 より前のバージョンの Java SDK を使用し、暗号化テクノロジを使用する場合は、JCE プロバイダを設定します。

  2. ユーザー名トークンを使用している場合は、ユーザーデータベースが適切なレルムに対して設定されていることを確認します。

    ユーザー名およびパスワードトークンを使用する場合は、適切なレルムを設定し、このレルムに対してユーザーデータベースを設定する必要があります。

  3. 必要に応じて証明書と非公開鍵を管理します。

  4. Enterprise Server のデフォルトのプロバイダを有効にします。

  5. 新しいメッセージセキュリティープロバイダを設定します。

メッセージセキュリティーのロール

Enterprise Server では、メッセージセキュリティー設定の主要責任者として、管理者とアプリケーション配備担当者が適任です。状況に応じて、アプリケーション開発者もこれに加わります。

システム管理者

システム管理者は、次のメッセージセキュリティータスクに責任を持ちます。

アプリケーション配備担当者

アプリケーション配備担当者は、次のメッセージセキュリティータスクに責任を持ちます。

アプリケーション開発者およびアセンブリ担当者

アプリケーション開発者およびアセンブリ担当者は、次のメッセージセキュリティータスクに責任を持ちます。

Web サービスのサンプルアプリケーション

Enterprise Server には、xms という名前のサンプルアプリケーションが用意されています。xms アプリケーションは、Java EE EJB エンドポイントと Java サーブレットエンドポイントの両方を使って実装された、単純な Web サービスです。両エンドポイントは同一のサービスエンドポイントインタフェースを共有しています。サービスエンドポイントインタフェースには、sayHello という処理のみが定義されています。この処理は、文字列の引数を 1 つ受け取り、その呼び出し引数の前に Hello を付加した String を返します。

xms サンプルアプリケーションは、Enterprise Server の WS-Security 機能を使って、既存の Web サービスアプリケーションをセキュリティー保護する方法を示すことを目的としています。サンプルに付属する手順では、Enterprise Server の WS-Security 機能を有効にして xms アプリケーションを保護する方法が説明されています。また、このサンプルは、「アプリケーション固有の Web サービスセキュリティー」アプリケーションで説明されているように、WS-Security 機能をアプリケーションに直接バインドする方法も示しています。

xms サンプルアプリケーションのコンパイル、パッケージ化、および実行については、『Sun GlassFish Enterprise Server v3 Application Development Guide』の第 5 章「Securing Applications」を参照してください。

xms サンプルアプリケーションは、as-install/samples/webservices/security/ejb/apps/xms/ にインストールされます。

Web サービスのデフォルトメッセージセキュリティープロバイダの有効化

Enterprise Server では、メッセージセキュリティーはデフォルトで無効になっています。デフォルトメッセージセキュリティープロバイダは作成されていますが、有効化するまではアクティブになりません。プロバイダを有効にしたあと、メッセージセキュリティーが有効になります。

ここでは、次のテーマを取り上げます。

Procedureデフォルトサーバープロバイダを有効にする

Enterprise Server に配備された Web サービスエンドポイントのメッセージセキュリティーを有効にするには、サーバー側でデフォルトで使用されるセキュリティープロバイダを指定する必要があります。メッセージセキュリティーのデフォルトのプロバイダを有効にする場合、Enterprise Server に配備された Web サービスのクライアントが使用するプロバイダも有効にする必要があります。

  1. set(1) サブコマンドを使用して、デフォルトサーバープロバイダを指定します。

    次の構文を使用します。


    asadmin  set --port admin-port 
    server-config.security-service.message-security-config.SOAP.
    default_provider=ServerProvider
  2. すでに実行されているアプリケーションに変更を適用するには、Enterprise Server を再起動します。

    「ドメインの再起動」を参照してください。

Procedureデフォルトクライアントプロバイダを有効にする

配備済みエンドポイントからの Web サービス呼び出しに対してメッセージセキュリティーを有効にするには、デフォルトクライアントプロバイダを指定する必要があります。Enterprise Server のデフォルトクライアントプロバイダを有効にした場合、Enterprise Server に配備されたエンドポイントから呼び出されるすべてのサービスが、メッセージ層セキュリティーと互換性を持つように設定されていることを確認する必要があります。

  1. set(1) サブコマンドを使用して、デフォルトクライアントプロバイダを指定します。

    次の構文を使用します。


    asadmin  set --port admin-port 
    server-config.security-service.message-security-config.SOAP.
    default_client_provider=ClientProvider
  2. すでに実行されているアプリケーションに変更を適用するには、Enterprise Server を再起動します。

    「ドメインの再起動」を参照してください。

メッセージ保護ポリシーの設定

メッセージ保護ポリシーは、要求メッセージの処理および応答メッセージの処理に対して定義されます。ポリシーは、ソース認証または受信者認証に関する要件として表現されます。プロバイダは、特定のメッセージセキュリティーメカニズムを適用することで、SOAP Web サービスメッセージにおけるメッセージ保護ポリシーを実現します。

ここでは、次のテーマを取り上げます。

メッセージ保護ポリシーの設定と処理の対応

次の表に、メッセージ保護ポリシーの構成と、その設定の結果として WS-Security SOAP メッセージセキュリティープロバイダが実行するメッセージセキュリティー処理を示します。

表 13–1 メッセージ保護ポリシーと WS-Security SOAP 処理の対応

メッセージ保護ポリシー 

結果として実行される WS-Security SOAP メッセージ保護処理 

auth-source="sender"

メッセージに wsse:Security ヘッダーが格納され、そのヘッダー内に wsse:UsernameToken (パスワード付き) が格納されます。

auth-source="content"

SOAP メッセージ本体のコンテンツが署名されます。メッセージに wsse:Security ヘッダーが格納され、そのヘッダー内にメッセージ本体の署名が ds: Signature として格納されます。

auth-source="sender"

auth-recipient="before-content"

または 

auth-recipient="after-content"

SOAP メッセージ本体のコンテンツが暗号化され、その結果得られた xend:EncryptedData で置換されます。メッセージに wsse:Security ヘッダーが格納され、そのヘッダー内に wsse:UsernameToken (パスワード付き) と xenc:EncryptedKey が格納されます。また、xenc:EncryptedKey には SOAP メッセージ本文の暗号化に使用する鍵が含まれます。この鍵は、受信者の公開鍵内で暗号化されています。

auth-source="content"

auth-recipient="before-content"

SOAP メッセージ本体のコンテンツが暗号化され、その結果得られた xend:EncryptedData で置換されます。xenc:EncryptedData は署名されています。メッセージに wsse:Security ヘッダーが格納され、そのヘッダー内に xenc:EncryptedKeyds: Signature が格納されます。また、xenc:EncryptedKey には SOAP メッセージ本文の暗号化に使用する鍵が含まれます。この鍵は、受信者の公開鍵内で暗号化されています。

auth-source="content"

auth-recipient="after-content"

SOAP メッセージ本体のコンテンツが、署名されたあと暗号化され、その結果得られた xend:EncryptedData で置換されます。メッセージに wsse:Security ヘッダーが格納され、そのヘッダー内に xenc:EncryptedKeyds:Signature が格納されます。また、xenc:EncryptedKey には SOAP メッセージ本文の暗号化に使用する鍵が含まれます。この鍵は、受信者の公開鍵内で暗号化されています。

auth-recipient="before-content"

または 

auth-recipient="after-content"

SOAP メッセージ本体のコンテンツが暗号化され、その結果得られた xend:EncryptedData で置換されます。メッセージには、xenc:EncryptedKey を含む wsse:Security ヘッダーが含まれます。また、xenc:EncryptedKey には SOAP メッセージ本文の暗号化に使用する鍵が含まれます。この鍵は、受信者の公開鍵内で暗号化されています。

ポリシーを何も指定しない。 

モジュールはセキュリティー処理を一切行いません。 

Procedureプロバイダのメッセージ保護ポリシーを設定する

一般的には、プロバイダを再設定することはありません。ただし必要な場合は、プロバイダのタイプ、実装クラス、およびプロバイダ固有の構成プロパティーを変更して、プロバイダのメッセージ保護ポリシーを変更できます。設定の組み合わせの結果については、表 13–1 を参照してください。

set(1) サブコマンドを使用して応答ポリシーを設定します。そのあと、各コマンドの request の文字を response に置き換えて実行します。

  1. set(1) サブコマンドを使用して、要求ポリシーをクライアントに追加し、認証のソースを設定します。

    次に例を示します。


    asadmin> set server-config.security-service.message-security-config.SOAP.
    provider-config.ClientProvider.request-policy.auth_source=[sender | content]
    
  2. set サブコマンドを使用して、要求ポリシーをサーバーに追加し、認証のソースを設定します。

    次に例を示します。


    asadmin> set server-config.security-service.message-security-config.SOAP.
    provider-config.ServerProvider.request-policy.auth_source=[sender | content]
  3. set サブコマンドを使用して、要求ポリシーをクライアントに追加し、認証の受信者を設定します。

    次に例を示します。


    asadmin> set server-config.security-service.message-security-config.SOAP.
    provider-config.ClientProvider.request-policy.auth_recipient=[before-content | after-content]
    
  4. set サブコマンドを使用して、要求ポリシーをサーバーに追加し、認証の受信者を設定します。

    次に例を示します。


    asadmin> set server-config.security-service.message-security-config.SOAP.
    provider-config.ServerProvider.request-policy.auth_recipient=[before-content | after-content]
    

アプリケーションクライアント構成の要求および応答ポリシーの設定

「要求および応答ポリシー」は、認証プロバイダが実行する要求および応答処理に関連付けられた認証ポリシー要件を定義します。ポリシーはメッセージ送信者による順序で示されるので、「コンテンツのあと」ではメッセージ受信者が署名の検証前にメッセージを復号化することを意味します。

メッセージセキュリティーを実現するには、サーバーとクライアントの両方で要求ポリシーと応答ポリシーが有効化されている必要があります。クライアントおよびサーバーのポリシーを設定する場合は、クライアントポリシーがアプリケーションレベルのメッセージのバインドで要求および応答保護のサーバーポリシーと一致する必要があります。

アプリケーションクライアント構成の要求ポリシーを設定するには、「アプリケーションクライアントのメッセージセキュリティーの有効化」の説明に従って、アプリケーションクライアントコンテナの Enterprise Server 固有の構成を変更します。


例 13–1 アプリケーションクライアントのメッセージセキュリティーのポリシー設定

アプリケーションクライアント構成ファイルの request-policy 要素および response-policy 要素は、次のコード例に示すように、要求ポリシーの設定に使用されます (要素を定義している箇所以外のコードは説明用のものです。実際のインストールでは異なる場合があります。これらのコードは変更しないでください)。


<client-container>
  <target-server name="your-host" address="your-host"
      port="your-port"/>
  <log-service file="" level="WARNING"/>
  <message-security-config auth-layer="SOAP"
      default-client-provider="ClientProvider">
    <provider-config
        class-name="com.sun.enterprise.security.jauth.ClientAuthModule"
        provider-id="ClientProvider" provider-type="client">
      <request-policy auth-source="sender | content"
        auth-recipient="after-content | before-content"/>
      <response-policy auth-source="sender | content"
        auth-recipient="after-content | before-content"/>
       <property name="security.config"
           value="as-install/lib/appclient/wss-client-config.xml"/>
    </provider-config>
  </message-security-config>
</client-container>

auth-source の有効な値には、sendercontent があります。auth-recipient の有効な値には、before-contentafter-content があります。これらの値の組み合わせの結果については、「メッセージ保護ポリシーの設定」の表を参照してください。

要求または応答ポリシーを指定しない場合は、この要素を空白のままにします。次に例を示します。


<response-policy/>

デフォルト以外のメッセージセキュリティープロバイダの管理

ここでは、次のテーマを取り上げます。

Procedureメッセージセキュリティープロバイダを作成する

セキュリティーサービスの新しいメッセージプロバイダを作成するには、リモートモードで create–message–security–provider サブコマンドを使用します。メッセージレイヤーが存在しない場合は、メッセージレイヤーが作成され、そのレイヤーにプロバイダが作成されます。

  1. サーバーが実行されていることを確認します。

    リモートサブコマンドには、実行中のサーバーが必要です。

  2. create-message-security-provider(1) サブコマンドを使用して、メッセージセキュリティープロバイダを作成します。

    このサブコマンドのプロパティーについては、このマニュアルページに記載されています。

  3. (省略可能) 必要な場合は、サーバーを再起動します。

    プロパティーの中には、サーバーの再起動を求めるものもあります。「サーバーの再起動が必要な構成の変更」を参照してください。サーバーを再起動する必要がある場合は、「ドメインの再起動」を参照してください。


例 13–2 メッセージセキュリティープロバイダの作成

この例では、mySecurityProvider という名前の新しいメッセージセキュリティープロバイダを作成します。


asadmin> create-message-security-provider 
--classname com.sun.enterprise.security.jauth.ClientAuthModule
--providertype client mySecurityProvider
Command create-message-security-provider executed successfully.

参照

コマンド行に asadmin help create–message–security–provider と入力して、このサブコマンドの完全な構文とオプションを確認することもできます。

Procedureメッセージセキュリティープロバイダを一覧表示する

セキュリティーレイヤーのメッセージプロバイダを一覧表示するには、リモートモードで list–message–security–providers サブコマンドを使用します。

  1. サーバーが実行されていることを確認します。

    リモートサブコマンドには、実行中のサーバーが必要です。

  2. list-message-security-providers(1) サブコマンドを使用して、メッセージセキュリティープロバイダを一覧表示します。


例 13–3 メッセージセキュリティープロバイダの一覧表示

この例では、メッセージレイヤーのメッセージセキュリティープロバイダを一覧表示します。


asadmin> list-message-security-providers --layer SOAP
XWS_ClientProvider 
ClientProvider
XWS_ServerProvider
ServerProvider
Command list-message-security-providers executed successfully.

参照

コマンド行に asadmin help list–message–security–providers と入力して、このサブコマンドの完全な構文とオプションを確認することもできます。

Procedureメッセージセキュリティープロバイダを更新する

  1. サーバーが実行されていることを確認します。

    リモートサブコマンドには、実行中のサーバーが必要です。

  2. list-message-security-providers(1) サブコマンドを使用して、メッセージセキュリティープロバイダを一覧表示します。

  3. set(1) サブコマンドを使用して、指定したメッセージセキュリティープロバイダの値を変更します。

    メッセージセキュリティープロバイダは、ドット表記名で識別されます。

Procedureメッセージセキュリティープロバイダを削除する

メッセージセキュリティープロバイダを削除するには、リモートモードで delete-message-security-provider サブコマンドを使用します。

  1. サーバーが実行されていることを確認します。

    リモートサブコマンドには、実行中のサーバーが必要です。

  2. list-message-security-providers(1) サブコマンドを使用して、メッセージセキュリティープロバイダを一覧表示します。

  3. delete-message-security-provider(1) サブコマンドを使用して、メッセージセキュリティープロバイダを削除します。


例 13–4 メッセージセキュリティープロバイダの削除

この例では、myServerityProvider という名前のメッセージセキュリティープロバイダを削除します。


asadmin> delete-message-security-provider --layer SOAP myServerityProvider
Command delete-message-security-provider executed successfully.

参照

コマンド行に asadmin help delete–message–security–provider と入力して、このサブコマンドの完全な構文とオプションを確認することもできます。

アプリケーションクライアントのメッセージセキュリティーの有効化

クライアントプロバイダのメッセージ保護ポリシーは、通信相手となるサーバー側プロバイダのメッセージ保護ポリシーと等しくなるように設定する必要があります。Enterprise Server のインストール時に、プロバイダはデフォルトでそのように設定されます (ただし、有効化されていません)。

クライアントアプリケーションのメッセージセキュリティーを有効にするには、アプリケーションクライアントコンテナの Enterprise Server 固有の構成を変更します。処理は、「メッセージ保護ポリシーの設定」の処理と同様です。

メッセージセキュリティープロバイダに関する追加情報

メッセージセキュリティーの追加情報については、次を参照してください。