「メッセージセキュリティー」により、サーバーはメッセージレイヤーで 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 メッセージでユーザー名トークンを使用して、メッセージの送信者を認証します。パスワードが埋め込まれたユーザー名トークンを含むメッセージの受信者は、送信者がユーザーのパスワードを知っているかどうかを確認して、メッセージの送信者がトークンで識別されるユーザーとして振る舞うことを承認されているかどうかを検証します。
ユーザー名トークンを使用する場合は、Enterprise Server 上に有効なユーザーデータベースを設定する必要があります。
「デジタル署名」。Enterprise Server は、XML デジタル署名を使ってメッセージのコンテンツに認証 ID をバインドします。クライアントはデジタル署名を使用して、呼び出し側の ID を確立します。デジタル署名は、メッセージコンテンツのソースを認証するために、メッセージ受信者によって検証されます。このソースは、メッセージ送信者と異なる可能性があります。
デジタル署名を使用する場合は、Enterprise Server 上に有効なキーストアおよびトラストストアファイルを設定する必要があります。
「暗号化」。暗号化の目的は、意図した相手だけが理解できるようにデータを変更することです。これは、元のコンテンツを暗号化された要素に置き換えることにより行われます。公開鍵暗号方式に基づく場合、暗号化はメッセージの読み取りを承認する関係者の ID を確立するために使用されます。
暗号化を使用する場合は、暗号化をサポートする Java 暗号化拡張機能 (JCE) プロバイダをインストールする必要があります。
「認証レイヤー」とは、認証処理を実行する必要のあるメッセージレイヤーです。Enterprise Server は、SOAP レイヤーで Web サービスメッセージセキュリティーを適用します。サポートされている認証には次のタイプが含まれます。
ユーザー名とパスワード認証を含む送信者認証
XML デジタル署名を含むコンテンツ認証
Enterprise Server は、「認証プロバイダ」を呼び出して SOAP メッセージレイヤーセキュリティーを処理します。メッセージセキュリティープロバイダは、要求メッセージおよび応答メッセージに必要な認証のタイプなどの情報を提供します。Enterprise Server には、次のメッセージセキュリティープロバイダが用意されています。
「クライアント側プロバイダ」。署名またはユーザー名とパスワードを使って要求メッセージのソース ID を確立したり、意図した受信者だけがメッセージを参照できるように暗号化を使って要求メッセージを保護したりします。また、クライアント側プロバイダは、受信した応答を正常に復号化することで、その許可された受信者としてコンテナを確立したり、応答内のパスワードまたは署名を検証してその応答に関連付けられたソース ID を認証したりもします。Enterprise Server 内に設定されているクライアント側プロバイダを使えば、ほかのサービスのクライアントとして機能するサーバー側コンポーネント (サーブレットと EJB コンポーネント) によって送信される要求メッセージと受信される応答メッセージを保護することができます。
「デフォルトクライアントプロバイダ」は、特定のクライアントプロバイダがバインドされていない任意のアプリケーションに対して呼び出されるクライアント側プロバイダを識別するために使用されます。
「サーバー側プロバイダ」。受信した要求を正常に復号化することで、許可された受信者としてコンテナを確立したり、要求内のパスワードまたは署名を検証してその要求に関連付けられたソース ID を認証したりします。また、サーバー側プロバイダは、署名またはユーザー名/パスワードを使って応答メッセージのソース ID を確立したり、対象の受信者だけがメッセージを参照できるように暗号化を使って要求メッセージを保護したりもします。サーバー側プロバイダを呼び出すのはサーバー側コンテナだけです。
「デフォルトサーバープロバイダ」は、特定のサーバープロバイダがバインドされていない任意のアプリケーションに対して呼び出されるサーバー側プロバイダを識別するために使用されます。
「要求ポリシー」は、認証プロバイダが実行する要求処理に関連付けられた認証ポリシー要件を定義します。ポリシーはメッセージ送信者による順序で示されるので、「コンテンツのあと」ではメッセージ受信者が署名の検証前にメッセージを復号化することを意味します。「応答ポリシー」は、認証プロバイダが実行する応答処理に関連付けられた認証ポリシー要件を定義します。
メッセージ保護ポリシーは、要求メッセージの処理および応答メッセージの処理に対して定義されます。ポリシーは、ソース認証または受信者認証に関する要件として表現されます。プロバイダは、特定のメッセージセキュリティーメカニズムを適用することで、SOAP Web サービスメッセージにおけるメッセージ保護ポリシーを実現します。
「ソース認証ポリシー」。メッセージを送信したエンティティーまたはメッセージのコンテンツを定義したエンティティーの ID がメッセージ内で確立され、その ID をメッセージ受信者が認証できる、という要件を表します。
「受信者認証ポリシー」。メッセージを受信可能なエンティティーの ID をメッセージ送信者が確立できるようにメッセージが送信される、という要件を表します。
要求および応答メッセージ保護ポリシーは、セキュリティープロバイダがコンテナ内に設定されるときに定義されます。また、アプリケーションやアプリケーションクライアントの Sun 固有の配備記述子内で、アプリケーション固有のメッセージ保護ポリシー (Web サービスのポートまたは処理の範囲でのポリシー) を設定することも可能です。メッセージ保護ポリシーを定義する場合は常に、クライアントの要求と応答に対するメッセージ保護ポリシーが、サーバー側の要求と応答に対するメッセージ保護ポリシーと同じである必要があります。アプリケーション固有のメッセージ保護ポリシーの定義については、『Sun GlassFish Enterprise Server v3 Application Development Guide』の第 5 章「Securing Applications」を参照してください。
アプリケーション固有の 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 の管理インタフェースを使用して、次の操作を実行できます。
プロバイダによって適用されるメッセージ保護ポリシーを変更します。
Enterprise Server のサーバー側コンテナで使用できるように、既存のプロバイダをバインドします。
別のメッセージ保護ポリシーを使用して新しいセキュリティープロバイダの構成を作成します。
アプリケーションクライアントコンテナの SOAP メッセージレイヤーセキュリティー構成でも、これと同様の管理操作を実行できます。Enterprise Server に配備されたすべての Web サービスアプリケーションを Web サービスセキュリティーで保護する場合は、「アプリケーションクライアントのメッセージセキュリティーの有効化」を参照してください。
Enterprise Server では、メッセージレイヤーセキュリティーはデフォルトで無効になっています。Enterprise Server でメッセージレイヤーセキュリティーを設定するには、「Web サービスのデフォルトメッセージセキュリティープロバイダの有効化」を参照してください。
ほとんどの場合、管理タスクを実行したあとに Enterprise Server を再起動する必要があります。特に、操作実行時に Enterprise Server にすでに配備されているアプリケーションに対して管理上の変更を適用する場合は、これに該当します。
メッセージセキュリティーの一般的な実装タスクには、次のタスクの一部またはすべてが含まれます。
バージョン 1.5.0 より前のバージョンの Java SDK を使用し、暗号化テクノロジを使用する場合は、JCE プロバイダを設定します。
ユーザー名トークンを使用している場合は、ユーザーデータベースが適切なレルムに対して設定されていることを確認します。
ユーザー名およびパスワードトークンを使用する場合は、適切なレルムを設定し、このレルムに対してユーザーデータベースを設定する必要があります。
必要に応じて証明書と非公開鍵を管理します。
Enterprise Server のデフォルトのプロバイダを有効にします。
新しいメッセージセキュリティープロバイダを設定します。
Enterprise Server では、メッセージセキュリティー設定の主要責任者として、管理者とアプリケーション配備担当者が適任です。状況に応じて、アプリケーション開発者もこれに加わります。
システム管理者は、次のメッセージセキュリティータスクに責任を持ちます。
サーバーセキュリティー設定と証明書データベースの管理
キーストアおよびトラストストアファイルの管理
Enterprise Server 上のメッセージセキュリティープロバイダの設定
メッセージセキュリティーの有効化
サンプルサーバーのインストール (必要な場合のみ)
アプリケーション配備担当者は、次のメッセージセキュリティータスクに責任を持ちます。
必要なすべてのアプリケーション固有メッセージ保護ポリシーをアプリケーションの再アセンブリ時に指定 (それらのポリシーが開発者またはプログラマによって指定されていない場合)。
Sun 固有の配備記述子を変更し、アプリケーション固有メッセージ保護ポリシー情報 (message-security-binding 要素) を Web サービスエンドポイントとサービス参照に指定。
アプリケーション開発者およびアセンブリ担当者は、次のメッセージセキュリティータスクに責任を持ちます。
アプリケーションに固有のメッセージ保護ポリシーがアプリケーションで必要かどうかの判断
必要な場合は、開発者がアプリケーションのアセンブリ時に必要なポリシーを指定する必要があります。
メッセージセキュリティーに対する Web サービスの設定方法の指定
メッセージセキュリティーの設定を管理者が行う場合、すべての 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/ にインストールされます。