前へ 目次 索引 次へ |
Sun Java System Message Queue 3.5 SP1 管理ガイド

> ## 付録 C
> HTTP/HTTPS サポート (Enterprise Edition)

> Message Queue, Enterprise Edition (「製品エディション」を参照) は、HTTP コネクションと HTTPS コネクションの両方をサポートします。HTTPS は、Secure Socket Layer (SSL) 通信用コネクションを介した HTTP です。このため、クライアントアプリケーションは、直接 TCP コネクションを使用せずに HTTP プロトコルを使用しているブローカと通信できます。この付録では、このようなサポートを有効にするために使用されるアーキテクチャについて説明し、クライアントが Message Queue メッセージングに HTTP ベースのコネクションを使用するために必要となる設定の手順を示します。

> 注 | HTTP/HTTPS サポートは、Java クライアントに対応しており、C クライアントには対応していません。

> ##

> HTTP/HTTPS サポートのアーキテクチャ

> Message Queue メッセージングは、HTTP/HTTPS コネクションで実行できます。HTTP/HTTPS コネクションは、通常ファイアウォールを通して許可されるため、ファイアウォールによってブローカからクライアントアプリケーションを分離できます。

> 図 C-1 に、HTTP/HTTPS サポートの提供に関連する主なコンポーネントを示します。

> - クライアント側では、HTTP または HTTPS の転送ドライバが Message Queue メッセージを HTTP 要求にカプセル化し、これらの要求を正しい手順で Web サーバに確実に送信する
> - クライアントは、HTTP プロキシサーバを使用して、必要に応じてブローカと通信できる。プロキシのアドレスは、クライアントの起動時に、コマンド行オプションを使用して指定する。詳細は、「HTTP プロキシを使用する」を参照
> - HTTP または HTTPS トンネルサーブレット (どちらも Message Queue にバンドルされている) は、Web サーバに読み込まれ、JMS メッセージがブローカに転送される前に、その JMS メッセージをクライアント HTTP 要求から取り出す。また HTTP/HTTPS トンネルサーブレットは、クライアントが作成した HTTP 要求に応じて、ブローカのメッセージをクライアントに返送する。1 つの HTTP/HTTPS トンネルサーブレットが複数のブローカへのアクセスに使用される。

> 図 C-1 HTTP/HTTPS サポートのアーキテクチャ

> - ブローカ側では、httpjms または httpsjms コネクションサービスが、対応するトンネルサーブレットから送られてくるメッセージを開いて、非多重化する
> - Web サーバで障害が生じても再起動すれば、すべてのコネクションが復元され、クライアントへの影響はありません。ブローカに障害が生じ再起動された場合は、例外がスローされ、クライアントはそれぞれのコネクションを再確立する必要があります。発生するのはまれですが、Web サーバとブローカの両方に障害が生じ、ブローカが再起動されなかった場合は、Web サーバはクライアントコネクションを復元し、引き続きブローカコネクションを待機しますがクライアントには通知しません。この状況を避けるために、常に、ブローカを再起動してください。

> 図 C-1 からわかるとおり、HTTP と HTTPS サポートのアーキテクチャは非常に良く似ています。主な相違点は、HTTPS (httpsjms コネクションサービス) の場合、トンネルサーブレットにクライアントアプリケーションとブローカの両方への安全なコネクションがあることです。

> ブローカへの安全なコネクションは、SSL に対応したトンネルサーブレット、つまり Message Queue の HTTPS トンネルサーブレットを通して提供されます。このトンネルサーブレットが、コネクションを要求しているブローカに自己署名型証明書を渡します。ブローカは証明書を使用して、HTTPS トンネルサーブレットへの暗号化されたコネクションを設定します。このコネクションが確立されると、クライアントアプリケーションとトンネルサーブレット間の安全なコネクションについて、クライアントアプリケーションと Web サーバがネゴシエーションを行います。

> ##

> HTTP サポートの有効化

> 次に、HTTP サポートを有効化するのに必要な手順を説明します。

> ##### HTTP サポートを有効にするには

> 1. HTTP トンネルサーブレットを Web サーバに配置します。
> 2. ブローカの httpjms コネクションサービスを設定し、ブローカを起動します。
> 3. HTTP コネクションを設定します。

> ### 手順 1: HTTP トンネルサーブレットを Web サーバに配置する

> HTTP トンネルサーブレットを Web サーバに配置するには、通常 次の 2 つの方法があります。

> - jar ファイルとして配置する (Servlet 2.1 以前をサポートする Web サーバの場合)
> - Web アーカイブ (WAR) として配置する (Servlet 2.2 以降をサポートする Web サーバの場合)

> #### jar ファイルとして配置する

> Message Queue トンネルサーブレットを配置するには、ホスト Web サーバへアクセス可能な適切な jar ファイルを作成し、起動時にサーブレットを読み込むように Web サーバを設定して、サーブレットの URL のコンテキストルート部分を指定します。

> トンネルサーブレットの jar ファイル (imqservlet.jar) には、HTTP トンネルサーブレットが必要とするすべてのクラスが含まれます。このファイルは、オペレーティングシステムに応じて該当するディレクトリに格納されています (付録 A 「Message Queue データの場所」を参照)。

> Servlet 2.x をサポートする Web サーバは、このサーブレットの読み込みに使用できます。サーブレットのクラス名は次のとおりです。

> com.sun.messaging.jmq.transport.
> httptunnel.servlet.HttpTunnelServlet

> Web サーバは、imqservlet.jar ファイルを参照する必要があります。Web サーバとブローカを異なるホストで実行する場合は、Web サーバがアクセスできる場所に、imqservlet.jar ファイルのコピーを置く必要があります。

> また、起動時にこのサーブレットを読み込むように Web サーバを設定する必要があります。サーブレットの URL のコンテキストルート部分を指定する必要が生じる場合もあります (「例 1: HTTP トンネルサーブレットを Sun Java System Web サーバに配置する」を参照)。

> パフォーマンスを向上させるために、Web サーバのアクセスログ作成機能を無効にしておくことをお勧めします。

> #### Web アーカイブファイルとして配置する

> HTTP トンネルサーブレットを WAR ファイルとして配置する作業は、Web サーバから提供されている配置メカニズムを使用することで成り立っています。HTTP トンネルサーブレットの WAR ファイル (imqhttp.war) は、オペレーティングシステムに応じて、.jar、.war、.rar の各ファイルを含むディレクトリに配置されています (付録 A 「Message Queue データの場所」を参照)。

> WAR ファイルには、Web サーバがサーブレットを読み込んで実行するときに必要となる基本的設定情報などの配置記述子が含まれています。Web サーバによっては、サーブレットの URL のコンテキストルート部分を指定しなければならない場合もあります (「例 2: HTTP トンネルサーブレットを Sun Java System Application Server 7.0 に配置する」を参照)。

> ### 手順 2: httpjms コネクションサービスを設定する

> デフォルトでは、HTTP サポートはブローカに対してアクティブになっていないため、httpjms コネクションサービスをアクティブにするようブローカを再設定する必要があります。設定し直すと、「ブローカの起動」で説明されているように、ブローカを起動できます。

> ##### httpjms コネクションサービスをアクティブにするには

> 1. ブローカのインスタンス設定ファイルを開きます。

> インスタンス設定ファイルは、その設定ファイルが関連付けられているブローカインスタンスの名前 (instanceName) によって識別されたディレクトリに書き込まれます (付録 A 「Message Queue データの場所」を参照)。

> .../instances/instanceName/props/config.properties

> 2. httpjms の値を imq.service.activelist プロパティに追加します。

> imq.service.activelist=jms,admin,httpjms

> ブローカは、起動時に Web サーバとそのホストマシン上で実行している HTTP トンネルサーブレットを探します。ただし、リモートトンネルサーブレットにアクセスするには、servletHost と servletPort コネクションサービスプロパティを設定し直します。

> パフォーマンスを向上させるために、pullPeriod プロパティも設定し直します。httpjms コネクションサービス設定プロパティについては、表 C-1 を参照してください。

> 表 C-1 httpjms コネクションサービスのプロパティ

> プロパティ名 | 説明
> --- | ---
> imq.httpjms.http. servletHost | 必要に応じてこの値を変更し、HTTP トンネルサーブレットを実行するホストの名前 (ホスト名または IP アドレス) を指定する。リモートホストか、またはローカルホストの特定のホスト名のどちらかになる デフォルト値: localhost
> imq.httpjms.http. servletPort | この値を変更して、ブローカが HTTP トンネルサーブレットにアクセスするために使用するポート番号を指定する。Web サーバ上でデフォルトのポート番号が変更されている場合は、それに合わせてこのプロパティを変更する デフォルト値: 7675
> imq.httpjms.http. pullPeriod | メッセージをブローカから取り出すために各クライアントランタイムが出す HTTP 要求の間隔を秒単位で指定する。このプロパティはブローカで設定され、クライアントランタイムに伝達される点に注意。値がゼロまたは負の場合、クライアントは常に HTTP 要求の 1 つを保留にして、可能な限り迅速なメッセージの取り出しに備える。クライアント数が多いと、この動作によって Web サーバのリソースが消耗し、サーバの応答が遅くなる場合がある。そのような場合には、pullPeriod プロパティを正の秒数に設定する必要がある。これにより、後続の取り出し要求が出される前の、クライアントの HTTP 転送ドライバの待機時間が設定される。値を正の数に設定すると、クライアントにより監視される応答時間を犠牲にして、Web サーバのリソースが維持される デフォルト値: -1
> imq.httpjms.http. connectionTimeout | クライアントランタイムが例外をスローする前に HTTP トンネルサーブレットからの応答を待機する時間を秒単位で指定する。このプロパティはブローカで設定され、クライアントランタイムに伝達される点に注意。このプロパティは、ブローカが HTTP トンネルサーブレットと通信した後、コネクションを開放するまでの時間も指定する。ブローカとトンネルサーブレットは、HTTP サーブレットへアクセス中のクライアントが異常終了したかどうかを確認する手段を持っていないため、この場合はタイムアウトが必須となる デフォルト値: 60

> ### 手順 3: HTTP コネクションを設定する

> クライアントアプリケーションは、設定済みのコネクションファクトリ管理対象オブジェクトを適切に使用して、ブローカへの HTTP コネクションを確立する必要があります。この節では、HTTP コネクション設定の問題点を説明します。

> #### コネクションファクトリを設定する

> HTTP サポートを有効にするには、コネクションファクトリの imqAddressList 属性を HTTP トンネルサーブレット URL に設定する必要があります。HTTP トンネルサーブレット URL の一般的な構文は次のとおりです。

> http://hostName:port/contextRoot/tunnel

> hostName:port は、HTTP トンネルサーブレットをホスティングする Web サーバの名前とポートです。contextRoot は、Web サーバにトンネルサーブレットを配置したときに設定したパスです。

> コネクションファクトリ属性の概要と、特に imqAddressList 属性の詳細については、『Message Queue Java Client Developer's Guide』を参照してください。

> コネクションファクトリ属性の設定は、次のいずれかの方法で行います。

> - -o オプションを、コネクションファクトリ管理対象オブジェクトを作成する imqobjmgr コマンドに使用するか (「コネクションファクトリの追加」を参照)、管理コンソール (imqadmin) を使用してコネクションファクトリ管理対象オブジェクト作成時に属性を設定する
> - クライアントを起動するコマンドに -D オプションを使用する (『Message Queue Java Client Developer's Guide』を参照)
> - プログラム的にクライアントコードに API 呼び出しを作成したあと、これを使用してコネクションファクトリの属性を設定する (『Message Queue Java Client Developer's Guide』を参照)

> #### 1 つのサーブレットを使用して、複数のブローカにアクセスする

> 複数のブローカを実行している場合、複数の Web サーバとサーブレットインスタンスを設定する必要はありません。現在実行中の複数のブローカで、1 つの Web サーバや HTTP トンネルサーブレットインスタンスを共有できます。複数のブローカインスタンスが 1 つのトンネルサーブレットを共有している場合は、次に示すとおり、imqAddressList コネクションファクトリ属性を設定する必要があります。

> http://hostName:port/contextRoot/tunnel?ServerName=bkrHostName:instanceName

> bkrHostName の部分にはブローカインスタンスのホスト名が入り、instanceName の部分にはクライアントにアクセスさせる特定のブローカインスタンス名が入ります。

> bkrHostName と instanceName に正しい文字列を入力したことを確認するには、ブラウザからサーブレット URL にアクセスして、HTTP トンネルサーブレットの状態レポートを生成します。レポートでは、サーブレットがアクセスしているすべてのブローカが次のように一覧表示されます。

> HTTP tunnel servlet ready. Servlet Start Time :Thu May 30 01:08:18 PDT 2002 Accepting TCP connections from brokers on port : 7675 Total available brokers = 2 Broker List : jpgserv:broker2 cochin:broker1

> #### HTTP プロキシを使用する

> HTTP プロキシを使用して HTTP トンネルサーブレットにアクセスする場合、次の設定を行います。

> - http.proxyHost システムプロパティをプロキシサーバのホスト名に設定する
> - http.proxyPort システムプロパティをプロキシサーバのポート番号に設定する

> クライアントアプリケーションを起動するコマンドに -D オプションを使用して、これらのプロパティを設定できます。

> ### 例 1: HTTP トンネルサーブレットを Sun Java System Web サーバに配置する

> ここでは、HTTP トンネルサーブレットを Sun Java System Web Server に jar ファイルおよび WAR ファイルとして配置する両方の方法を説明します。どちらを使用するかは、Sun Java System Web Server のバージョンによって決まります。Servlet 2.2 またはそれ以降がサポートされていない場合は、WAR ファイルの配置を行えません。

> #### jar ファイルとして配置する

> 次の手順は、ブラウザベースの管理 GUI を使用した Sun Java System Web Server 6.1 への配置を説明しています。この方法では、通常次の手順を実行します。

> 1. サーブレットを追加する
> 2. サーブレットの仮想パスを設定する
> 3. サーブレットを読み込む
> 4. サーブレットアクセスログを無効にする

> 次の項で、これらの手順について説明します。Web ブラウザを使用してサーブレットの URL にアクセスすると、HTTP トンネルサーブレットが問題なく配置されたことが確認できます。ステータス情報も表示されます。

> ##### サーブレットを追加する

> ##### トンネルサーブレットを追加するには

> 1. 「Servlet」タブを選択します。
> 2. 「Configure Servlet Attributes」を選択します。
> 3. 「Servlet Name」フィールドに、トンネルサーブレットの名前を指定します。
> 4. 「Servlet Code (class name)」フィールドに次の値を設定します。

> com.sun.messaging.jmq.transport.
> httptunnel.servlet.HttpTunnelServlet

> 5. 「Servlet Classpath」フィールドに imqservlet.jar への絶対パスを入力します。たとえば、次のように指定します。

> /usr/share/lib/imq/imqservlet.jar (Solaris の場合)

> /opt/imq/lib/imqservlet.jar (Linux の場合)

> IMQ_HOME/lib/imqservlet.jar (Windows の場合)

> 6. 「Servlet args」フィールドに、表 C-2 に示すオプションの引数を入力します。

> 表 C-2 HTTP トンネルサーブレット jar ファイルの配置に使用するサーブレット引数

> 引数 | デフォルト値 | 参照先
> --- | --- | ---
> servletHost | all hosts | 表 C-1 を参照
> servletPort | 7675 | 表 C-1 を参照

> 両方の引数を使用する場合は、次のように引数をカンマで区切ります。

> servletPort=portNumber, servletHost=...

> serverHost 引数と serverPort 引数は、Web サーバとブローカ間の通信にだけ適用され、またデフォルト値に問題があるときにだけ設定されます。ただしその場合、状況に応じてブローカ設定プロパティを設定する必要があります (表 C-1 を参照)。たとえば、次のように設定されます。

> imq.httpjms.http.servletPort

> ##### サーブレット仮想パス (サーブレット URL) を設定する

> ##### トンネルサーブレットの仮想パス (サーブレット URL) を設定するには

> 1. 「Servlet」タブを選択します。
> 2. 「Configure Servlet Virtual Path Translation」を選択します。
> 3. 「Virtual Path」フィールドを設定します。

> 仮想パスは、トンネルサーブレット URL の /contextRoot/tunnel 部分です。

> http://hostName:port/contextRoot/tunnel

> たとえば、contextRoot を imq に設定すると、「Virtual Path」フィールドは次のようになります。

> /imq/tunnel

> 4. 「Servlet Name」フィールドに「サーブレットを追加する」の手順 3 と同じ値を設定します。

> ##### サーブレットを読み込む

> ##### Web サーバの起動時にトンネルサーブレットを読み込むには

> 1. 「Servlet」タブを選択します。
> 2. 「Configure Global Attributes」を選択します。
> 3. 「Startup Servlets」フィールドに、「サーブレットを追加する」の手順 3 と同じサーブレット名の値を入力します。

> ##### サーバのアクセスログを無効にする

> 必ずしもサーバのアクセスログを無効にする必要はありませんが、無効にしたほうがより良いパフォーマンスを得ることができます。

> ##### サーバのアクセスログを無効にするには

> 1. 「Status」タブを選択します。
> 2. 「Log Preferences Page」を選択します。
> 3. Log クライアントアクセス制御を使用して、ログ作成を無効にします。

> #### WAR ファイルとして配置する

> 次の手順では、Sun Java System Web Server 6.0 Service Pack 2 での配置について説明しています。
> Web ブラウザを使用してサーブレットの URL にアクセスすると、HTTP トンネルサーブレットが問題なく配置されたことが確認できます。ステータス情報も表示されます。

> ##### HTTP トンネルサーブレットを WAR ファイルとして配置するには

> 1. ブラウザベースの管理 GUI で、「Virtual Server Class」タブを選択してから、「Manage Classes」を選択します。
> 2. 適切な仮想サーバクラス名 (defaultClass など) を選択して、「Manage」ボタンをクリックします。
> 3. 「Manage Virtual Servers」を選択します。
> 4. 適切な仮想サーバ名を選択し、「Manage」ボタンをクリックします。
> 5. 「Web Applications」タブを選択します。
> 6. 「Deploy Web Application」をクリックします。
> 7. 「WAR File On and WAR File Path」フィールドでは、imqhttp.war ファイルを指す適切な値を選択します。このファイルはオペレーティングシステムに応じて異なるディレクトリに格納されています (付録 A 「Message Queue データの場所」を参照)。
> 8. 「Application URI」フィールドにパスを入力します。

> 「Application URI」フィールドの値は、トンネルサーブレット URL の /contextRoot 部分です。

> http://hostName:port/contextRoot/tunnel

> たとえば、contextRoot を imq に設定すると、「Application URI」フィールドは次のようになります。

> /imq

> 9. サーブレットを配置するインストールディレクトリのパス (通常は、Sun Java System Web Server インストールルートの任意の場所) を入力します。
> 10. 「OK」をクリックします。
> 11. Web サーバインスタンスを再起動します。

> サーブレットは次のアドレスで利用可能となります。

> http://hostName:port/contextRoot/tunnel

> クライアントはこの URL を使用して、HTTP コネクションを使用しているメッセージサービスに接続できます。

> ### 例 2: HTTP トンネルサーブレットを Sun Java System Application Server 7.0 に配置する

> この節では、HTTP トンネルサーブレットを WAR ファイルとして Sun Java System Application Server 7.0 に配置する方法を説明します。

> 2 段階の手順が必要です。

> - Application Server 7.0 配置ツールを使用して HTTP トンネルサーブレットを配置する
> - アプリケーションサーバインスタンスの server.policy ファイルを変更する

> #### 配置ツールを使用する

> ##### HTTP トンネルサーブレットを Application Server 7.0 環境に配置するには

> 1. Web ベースの管理 GUI で、次を選択します。

> 「App Server」>「Instances」>「server1」>「Applications」>「Web Applications」

> 2. 「Deploy」ボタンをクリックします。
> 3. 「File Path:」 テキストフィールドに、HTTP トンネルサーブレットの WAR ファイル (imqhttp.war) の場所を入力します。

> imqhttp.war ファイルの場所は、使用中のオペレーティングシステムによって異なります (付録 A 「Message Queue データの場所」を参照)。

> 4. 「OK」をクリックします。
> 5. 次の画面で、「Context Root」テキストフィールドの値を設定します。

> 「Context Root」フィールドの値は、トンネルサーブレット URL の /contextRoot 部分です。

> http://hostName:port/contextRoot/tunnel

> たとえば、「Context Root」フィールドは次のように設定できます。

> /imq

> 6. 「OK」をクリックします。

> 次の画面は、トンネルサーブレットが正常に配置され、デフォルトで有効になっており、この場合は、次の場所に格納されていることを示しています。

> /var/opt/SUNWappserver7/domains/domain1/server1/applications/
> j2ee-modules/imqhttp_1

> サーブレットは次のアドレスで利用可能となります。

> http://hostName:port/contextRoot/tunnel

> クライアントはこの URL を使用して、HTTP コネクションを使用しているメッセージサービスに接続できます。

> #### server.policy ファイルを変更する

> Application Server 7.0 は、変更されないかぎりは、強制的にデフォルトのセキュリティポリシーセットを適用し、HTTP トンネルサーブレットが Message Queue ブローカからのコネクションを受け入れるのを阻止します。

> 各アプリケーションサーバインスタンスには、セキュリティポリシーまたはルールを含むファイルがあります。たとえば、Solaris 上の server1 インスタンスのこのファイルは次の場所にあります。

> /var/opt/SUNWappserver7/domains/domain1/server1/config/
> server.policy

> トンネルサーブレットに Message Queue ブローカからのコネクションを受け入れさせるには、このファイルにエントリを追加する必要があります。

> ##### アプリケーションサーバの server.policy ファイルを変更するには

> 1. server.policy ファイルを開きます。
> 2. 次のエントリを追加します。

> grant codeBase
> "file:/var/opt/SUNWappserver7/domains/domain1/server1/ applications/j2ee-modules/imqhttp_1/-"
> {
> permission java.net.SocketPermission "*", "connect,accept,resolve";
> };

> ##

> HTTPS サポートの有効化

> 次に、HTTPS サポートを有効化するのに必要な手順を説明します。この手順は、「HTTP サポートの有効化」の手順とほとんど同じですが、さらに SSL 証明書の生成とアクセスに必要となる手順も追加されています。

> ##### HTTPS サポートを有効にするには

> 1. HTTPS トンネルサーブレットの自己署名型証明書を生成する
> 2. HTTPS トンネルサーブレットを Web サーバに配置する
> 3. ブローカの httpsjms コネクションサービスを設定し、ブローカを起動する
> 4. HTTPS コネクションを設定する

> それぞれの手順については、順次、詳しく説明します。

> ### 手順 1: HTTPS トンネルサーブレットの自己署名型証明書を生成する

> Message Queue の SSL Support は、クライアントが既知の信頼されたサーバと通信することを前提に、ネットワーク上のデータを保護することを目的としています。したがって、自己署名型のサーバ証明書だけを使用して SSL が実装されます。httpsjms コネクションサービスのアーキテクチャでは、HTTPS トンネルサーブレットが、ブローカに対してもアプリケーションクライアントに対してもサーバの役割をします。

> imqkeytool ユーティリティを実行し、トンネルサーブレットの自己署名型証明書を生成します。コマンドプロンプトで次のとおり入力します。

> imqkeytool -servlet keystore_location

> ユーティリティが、必要な情報を要求します。Unix システムでは、キーストアを作成するアクセス権を取得するためにスーパーユーザー (root) として imqkeytool を実行する必要があります。

> imqkeytoolは、まず、キーストアに対するパスワードの入力を要求します。次に一部の組織情報の入力、続いて確認を要求します。確認が取れると、キーの組み合わせを生成している間、このコマンドは停止します。その後、特定のキーの組み合わせをロックするためのパスワード (キーパスワード) の入力を要求してくるので、Return キーを押します。これで、キーパスワードに、キーストアと同じパスワードが設定されます。

> 注 | 設定したパスワードを忘れないでください。あとでトンネルサーブレットがキーストアを開くために、そのパスワードを入力する必要があります。

> imqkeytool を実行すると、JDK keytool ユーティリティが実行されて、自己署名型証明書が生成されます。生成された証明書は、keystore_location 引数で指定される場所にある、Message Queue のキーストアファイルに配置されます。キーストアは、JDK1.2 keytool でサポートされているのと同じキーストアのフォーマットになっています。

> 注 | HTTPS トンネルサーブレットは、キーストアを参照する必要があります。keystore_location にある生成されたキーストアを、HTTPS トンネルサーブレットがアクセスできる場所に確実に移動またはコピーしてください (「手順 2: HTTPS トンネルサーブレットを Web サーバに配置する」を参照)。

> ### 手順 2: HTTPS トンネルサーブレットを Web サーバに配置する

> HTTPS トンネルサーブレットを Web サーバに配置するには、通常、次の 2 つの方法があります。

> - jar ファイルとして配置する (Servlet 2.1 以前をサポートする Web サーバの場合)
> - Web アーカイブ (WAR) として配置する (Servlet 2.2 以降をサポートする Web サーバの場合)

> どちらの場合も、Web サーバで暗号化がアクティブであり、クライアントとブローカの間で終端間の安全な通信が有効であることを確認します。

> #### jar ファイルとして配置する

> Message Queue トンネルサーブレットを配置するには、ホスト Web サーバへアクセス可能な適切な jar ファイルを作成し、起動時にサーブレットを読み込むように Web サーバを設定して、サーブレットの URL のコンテキストルート部分を指定します。

> トンネルサーブレットの jar ファイル (imqservlet.jar) には、HTTPS トンネルサーブレットが必要とするすべてのクラスが含まれます。このファイルは、オペレーティングシステムに応じて該当するディレクトリに格納されています (付録 A 「Message Queue データの場所」を参照)。

> Servlet 2.x をサポートする Web サーバは、このサーブレットの読み込みに使用できます。サーブレットのクラス名は次のとおりです。

> com.sun.messaging.jmq.transport.
> httptunnel.servlet.HttpsTunnelServlet

> Web サーバは、imqservlet.jar ファイルを参照する必要があります。Web サーバとブローカを異なるホストで実行する場合は、Web サーバがアクセスできる場所に、imqservlet.jar ファイルのコピーを置く必要があります。

> また、起動時にこのサーブレットを読み込むように Web サーバを設定する必要があります。サーブレットの URL のコンテキストルート部分を指定する必要が生じる場合もあります (「例 3: HTTPS トンネルサーブレットを Sun Java System Web サーバに配置する」を参照)。

> サーブレットを Web サーバで実行するために、JSSE jar ファイルがクラスパスにあることを確認します。確認方法については、Web サーバのマニュアルを参照してください。

> Web サーバの設定で重要な点は、自己署名型証明書の場所とパスワードを HTTPS トンネルサーブレットが使用するように指定し、ブローカとの安全なコネクションを確立することです。「手順 1: HTTPS トンネルサーブレットの自己署名型証明書を生成する」で作成されたキーストアを、HTTPS トンネルサーブレットがアクセスできる場所に置く必要があります。

> パフォーマンスを向上させるために、Web サーバのアクセスログ作成機能を無効にしておくことをお勧めします。

> #### Web アーカイブファイルとして配置する

> HTTPS トンネルサーブレットを WAR ファイルとして配置する作業は、Web サーバから提供されている配置メカニズムを使用することで成り立っています。HTTPS トンネルサーブレットの WAR ファイル (imqhttps.war) は使用中のオペレーティングシステムに応じて異なるディレクトリに格納されています (付録 A 「Message Queue データの場所」を参照)。

> WAR ファイルには、Web サーバがサーブレットを読み込んで実行するときに必要となる基本的設定情報などの配置記述子が含まれています。Web サーバによっては、サーブレットの URL のコンテキストルート部分を指定しなければならない場合もあります (「例 4: HTTPS トンネルサーブレットを Sun Java System Application Server 7.0 に配置する」を参照)。

> ただし、imqhttps.war ファイルの配置記述子は、トンネルサーブレットが必要とするキーストアファイルが配置された場所を認識できません (「手順 1: HTTPS トンネルサーブレットの自己署名型証明書を生成する」を参照)。そのため、imqhttps.war ファイルを配置する前に、トンネルサーブレットの配置記述子 (XML ファイル) を編集し、キーストアの場所を指定する必要があります。

> ### 手順 3: httpsjms コネクションサービスを設定する

> デフォルトでは、HTTPS サポートはブローカに対してアクティブになっていないため、httpsjms コネクションサービスをアクティブにするようブローカを再設定する必要があります。設定し直すと、「ブローカの起動」で説明されているように、ブローカを起動できます。

> ##### httpsjms コネクションサービスをアクティブにするには

> 1. ブローカのインスタンス設定ファイルを開きます。

> インスタンス設定ファイルは、その設定ファイルが関連付けられているブローカインスタンスの名前 (instanceName) によって識別されたディレクトリに書き込まれます (付録 A 「Message Queue データの場所」を参照)。

> .../instances/instanceName/props/config.properties

> 2. httpsjms の値を imq.service.activelist プロパティに追加します。

> imq.service.activelist=jms,admin,httpsjms

> ブローカは、起動時に Web サーバとそのホストマシン上で実行している HTTPS トンネルサーブレットを探します。ただし、リモートトンネルサーブレットにアクセスするには、servletHost と servletPort コネクションサービスプロパティを設定し直します。

> パフォーマンスを向上させるために、pullPeriod プロパティも設定し直します。httpsjms コネクションサービス設定プロパティについては、表 C-3 を参照してください。

> 表 C-3 httpsjms コネクションサービスのプロパティ

> プロパティ名 | 説明
> --- | ---
> imq.httpsjms.https. servletHost | 必要に応じて、この値を変更し、HTTPS トンネルサーブレットを実行するホストの名前 (ホスト名または IP アドレス) を指定する。リモートホストか、またはローカルホストの特定のホスト名のどちらかになる デフォルト値: localhost
> imq.httpsjms.https. servletPort | この値を変更して、ブローカが HTTPS トンネルサーブレットにアクセスするために使用するポート番号を指定する。Web サーバ上でデフォルトのポート番号が変更されている場合は、それに合わせてこのプロパティを変更する デフォルト値: 7674
> imq.httpsjms.https. pullPeriod | メッセージをブローカから取り出すために各クライアントが出す HTTP 要求の間隔を秒単位で指定する。このプロパティはブローカで設定され、クライアントランタイムに伝達される点に注意。値がゼロまたは負の場合、クライアントは常に HTTP 要求の 1 つを保留にして、可能な限り迅速なメッセージの取り出しに備える。クライアント数が多いと、この動作によって Web サーバのリソースが消耗し、サーバの応答が遅くなる場合がある。そのような場合には、pullPeriod プロパティを正の秒数に設定する必要がある。これにより、後続の取り出し要求が出される前の、クライアントの HTTP 転送ドライバの待機時間が設定される。値を正の数に設定すると、クライアントにより監視される応答時間を犠牲にして、Web サーバのリソースが維持される デフォルト値: -1
> imq.httpsjms.https. connectionTimeout | クライアントランタイムが例外をスローする前に HTTPS トンネルサーブレットからの応答を待機する時間を秒単位で指定する。このプロパティはブローカで設定され、クライアントランタイムに伝達される点に注意。このプロパティは、ブローカが HTTPS トンネルサーブレットと通信した後、コネクションを開放するまでの時間も指定する。ブローカとトンネルサーブレットは、HTTPS サーブレットへアクセス中のクライアントが異常終了したかどうかを確認する手段を持っていないため、この場合はタイムアウトが必要となる デフォルト値: 60

> ### 手順 4: HTTPS コネクションを設定する

> クライアントアプリケーションは、適切に設定されたコネクションファクトリ管理対象オブジェクトを使用して、ブローカへの HTTPS コネクションを確立する必要があります。

> ただし、クライアントは Java Secure Socket Extension (JSSE) で提供される SSL ライブラリへもアクセスし、root 証明書を持つ必要もあります。SSL ライブラリは、JDK 1.4 に付属しています。それ以前の JDK バージョンを使用している場合は、「JSSE を設定する」を参照するか、あるいは「root 証明書をインポートする」に進みます。

> これらの問題点が解決すると、HTTPS コネクションの設定に進みます。

> #### JSSE を設定する

> ##### JSSE を設定するには

> 1. JSSE jar ファイルを JRE_HOME/lib/ext ディレクトリにコピーします。

> jsse.jar、jnet.jar、jcert.jar

> 1. JSSE セキュリティプロバイダを静的に JRE_HOME/lib/security/java.security ファイルに追加します。次を追加します。

> security.provider.n=com.sun.net.ssl.internal.ssl.Provider

> ここで、n には、セキュリティプロバイダパッケージが次に利用可能な優先順位を指定ます。

> 2. JDK 1.4 を使用していない場合は、-D オプションをクライアントアプリケーションを起動するコマンドに使用して、次の JSSE プロパティを設定します。

> java.protocol.handler.pkgs=com.sun.net.ssl.internal.www.protocol

> #### root 証明書をインポートする

> Web サーバの証明書に署名した認証局 (CA) の root 証明書が、デフォルトで信頼されるデータベースにない場合、または専用の Web サーバ証明書を使用している場合、信頼されるデータベースに証明書を追加する必要があります。これに該当する場合は、次の手順に従うか、あるいは「コネクションファクトリを設定する」を参照します。

> 証明書が cert_file に保存され、trust_store_file がキーストアであると仮定して、次のコマンドを実行します。

> JRE_HOME/bin/keytool -import -trustcacerts
> -alias alias_for_certificate -file cert_file
> -keystore trust_store_file

> 次の質問に YES と答えます。Trust this certificate?

> クライアントアプリケーションを起動するコマンドに -D オプションを使用して、次の JSSE プロパティを指定する必要もあります。

> javax.net.ssl.trustStore=trust_store_file

> javax.net.ssl.trustStorePassword=trust_store_passwd

> #### コネクションファクトリを設定する

> HTTPS サポートを有効にするには、コネクションファクトリの imqAddressList 属性を HTTPS トンネルサーブレット URL に設定する必要があります。HTTPS トンネルサーブレット URL の一般的な構文は次のとおりです。

> https://hostName:port/contextRoot/tunnel

> hostName:port は、HTTPS トンネルサーブレットをホスティングする Web サーバの名前とポートです。contextRoot は、Web サーバにトンネルサーブレットを配置したときに設定したパスです。

> コネクションファクトリ属性の全般と imqAddressList 属性の詳細については、『Message Queue Java Client Developer's Guide』を参照してください。

> コネクションファクトリ属性の設定は、次のいずれかの方法で行います。

> - コネクションファクトリ管理対象オブジェクトを作成する imqobjmgr コマンドで、-o オプションを使用するか (「コネクションファクトリの追加」を参照)、管理コンソール (imqadmin) を使用してコネクションファクトリ管理対象オブジェクト作成時に属性を設定する
> - クライアントアプリケーションを起動するコマンドに -D オプションを使用する (『Message Queue Java Client Developer's Guide』を参照)
> - クライアントアプリケーションのプログラムでコネクションファクトリを作成してから、API 呼び出しを使用してコネクションファクトリの属性を設定する (『Message Queue Java Client Developer's Guide』を参照)

> #### 1 つのサーブレットを使用して、複数のブローカにアクセスする

> 複数のブローカを実行している場合、複数の Web サーバとサーブレットインスタンスを設定する必要はありません。現在実行中のブローカ間で 1 つの Web サーバと HTTPS トンネルサーブレットを共有できます。複数のブローカインスタンスが 1 つのトンネルサーブレットを共有している場合は、次に示すとおり、imqAddressList コネクションファクトリ属性を設定する必要があります。

> https://hostName:port/contextRoot/tunnel?ServerName=bkrHostName:instanceName

> bkrHostName の部分にはブローカインスタンスのホスト名が入り、instanceName の部分にはクライアントにアクセスさせる特定のブローカインスタンス名が入ります。

> bkrHostName と instanceName に正しい文字列を入力したことを確認するには、ブラウザからサーブレット URL にアクセスして、HTTPS トンネルサーブレットの状態レポートを生成します。レポートでは、サーブレットがアクセスしているすべてのブローカが次のように一覧表示されます。

> HTTPS tunnel servlet ready. Servlet Start Time :Thu May 30 01:08:18 PDT 2002 Accepting TCP connections from brokers on port : 7674 Total available brokers = 2 Broker List : jpgserv:broker2 cochin:broker1

> #### HTTP プロキシを使用する

> HTTP プロキシを使用して HTTPS トンネルサーブレットにアクセスする場合、次の設定を行います。

> - http.proxyHost システムプロパティをプロキシサーバのホスト名に設定する
> - http.proxyPort システムプロパティをプロキシサーバのポート番号に設定する

> クライアントアプリケーションを起動するコマンドに -D オプションを使用して、これらのプロパティを設定できます。

> ### 例 3: HTTPS トンネルサーブレットを Sun Java System Web サーバに配置する

> ここでは、HTTPS トンネルサーブレットを Sun Java System Web Server に jar ファイルおよび WAR ファイルとして配置する両方の方法を説明します。どちらを使用するかは、Sun Java System Web Server のバージョンによって決まります。Servlet 2.2 またはそれ以降がサポートされていない場合は、WAR ファイルの配置を行えません。

> #### jar ファイルとして配置する

> 次の手順は、ブラウザベースの管理 GUI を使用した Sun Java System Web Server 6.1 への配置を説明しています。この方法では、通常次の手順を実行します。

> 1. サーブレットを追加する
> 2. サーブレットの仮想パスを設定する
> 3. サーブレットを読み込む
> 4. サーブレットアクセスログを無効にする

> 次の項で、これらの手順について説明します。Web ブラウザを使用してサーブレットの URL にアクセスすると、HTTPS トンネルサーブレットが問題なく配置されたことが確認できます。ステータス情報も表示されます。

> ##### サーブレットを追加する

> ##### トンネルサーブレットを追加するには

> 1. 「Servlet」タブを選択します。
> 2. 「Configure Servlet Attributes」を選択します。
> 3. 「Servlet Name」フィールドに、トンネルサーブレットの名前を指定します。
> 4. 「Servlet Code (class name)」フィールドに次の値を設定します。

> com.sun.messaging.jmq.transport.
> httptunnel.servlet.HttpsTunnelServlet

> 5. 「Servlet Classpath」フィールドに imqservlet.jar への絶対パスを入力します。たとえば、次のように指定します。

> /usr/share/lib/imq/imqservlet.jar (Solaris の場合)

> /opt/imq/lib/imqservlet.jar (Linux の場合)

> IMQ_HOME/lib/imqservlet.jar (Windows の場合)

> 6. 「Servlet args」フィールドに、表 C-4 に示す必要なオプションの引数を入力します。

> 表 C-4 HTTPS トンネルサーブレット jar ファイルの配置に使用するサーブレット引数

> 引数 | デフォルト値 | 必須 / オプション | 関連項目
> --- | --- | --- | ---
> keystoreLocation | なし | 必須 | 表 8-8
> keystorePassword | なし | 必須 | 表 8-8
> servletHost | all hosts | オプション | 表 C-3
> servletPort | 7674 | オプション | 表 C-3

> 引数は、次のようにカンマで区切ります。

> keystoreLocation=keystore_location,keystorePassword=keystore_password, servletPort=portnumber

> serverHost 引数と serverPort 引数は、Web サーバとブローカ間の通信にだけ適用され、またデフォルト値に問題があるときにだけ設定します。ただしその場合、ブローカ設定プロパティを設定する必要があります (表 C-3 を参照)。たとえば、次のように設定されます。

> imq.httpsjms.https.servletPort

> ##### サーブレット仮想パス (サーブレット URL) を設定する

> ##### トンネルサーブレットの仮想パス (サーブレット URL) を設定するには

> 1. 「Servlet」タブを選択します。
> 2. 「Configure Servlet Virtual Path Translation」を選択します。
> 3. 「Virtual Path」フィールドを設定します。

> 仮想パスは、トンネルサーブレット URL の /contextRoot/tunnel 部分です。

> https://hostName:port/contextRoot/tunnel

> たとえば、contextRoot を imq に設定すると、「Virtual Path」フィールドは次のようになります。

> /imq/tunnel

> 4. 「Servlet Name」フィールドに「サーブレットを追加する」の手順 3 と同じ値を設定します。

> ##### サーブレットを読み込む

> ##### Web サーバの起動時にトンネルサーブレットを読み込むには

> 1. 「Servlet」タブを選択します。
> 2. 「Configure Global Attributes」を選択します。
> 3. 「Startup Servlets」フィールドに、「サーブレットを追加する」の手順 3 と同じサーブレット名の値を入力します。

> ##### サーバのアクセスログを無効にする

> 必ずしもサーバのアクセスログを無効にする必要はありませんが、無効にしたほうがより良いパフォーマンスを得ることができます。

> ##### サーバのアクセスログを無効にするには

> 1. 「Status」タブを選択します。
> 2. 「Log Preferences Page」を選択します。
> 3. Log クライアントアクセス制御を使用して、ログ作成を無効にします。

> #### WAR ファイルとして配置する

> 次の手順では、Sun Java System Web Server 6.0 Service Pack 2 での配置について説明しています。
> Web ブラウザを使用してサーブレットの URL にアクセスすると、HTTPS トンネルサーブレットが問題なく配置されたことが確認できます。ステータス情報も表示されます。

> HTTPS トンネルサーブレットを配置する前に、JSSE jar ファイルが Web サーバのクラスパスに含まれていることを確認します。これを確実にする一番簡単な方法は、jsse.jar、jnet.jar、および jcert.jar を IWS60_TOPDIR/bin/https/jre/lib/ext にコピーすることです。

> HTTPS トンネルサーブレットを配置する前に、配置記述子がキーストアファイルの配置場所を指し、キーストアパスワードを指定するように変更する必要もあります。

> ##### HTTPS トンネルサーブレット WAR ファイルを修正するには

> 1. WAR ファイルを一時ディレクトリにコピーします。

> cp /usr/share/lib/imq/imqhttps.war /tmp (Solaris の場合)

> cp /opt/imq/lib/imqhttps.war /tmp (Linux の場合)

> cp IMQ_HOME/lib/imqhttps.war /tmp (Windows の場合)

> 2. 一時ディレクトリを現在のディレクトリにします。

> $ cd /tmp

> 3. WAR ファイルの内容を抽出します。

> $ jar xvf imqhttps.war

> 4. WAR ファイルの配置記述子を一覧表示します。

> $ ls -l WEB-INF/web.xml

> 5. web.xml ファイルを編集して、keystoreLocation と keystorePassword という引数に正しい値を設定します。必要に応じて serverPort と serverHost の引数も設定します。
> 6. WAR ファイルの内容を設定し直します。

> $ jar uvf imqhttps.war WEB-INF/web.xml

> これで修正済みの imqhttps.war ファイルを使用して、HTTPS トンネルサーブレットを配置できるようになりました。キーストアパスワードの漏洩が心配な場合は、ファイルシステムアクセス権を使用して、imqhttps.war ファイルへのアクセスを制限できます。

> ##### HTTPS トンネルサーブレットを WAR ファイルとして配置するには

> 1. ブラウザベースの管理 GUI で、「Virtual Server Class」タブを選択します。「Manage Classes」をクリックします。
> 2. 適切な仮想サーバクラス名 (defaultClass など) を選択して、「Manage」ボタンをクリックします。
> 3. 「Manage Virtual Servers」を選択します。
> 4. 適切な仮想サーバ名を選択し、「Manage」ボタンをクリックします。
> 5. 「Web Applications」タブを選択します。
> 6. 「Deploy Web Application」をクリックします。
> 7. 修正済みの imqhttps.war ファイルを指すように、「WAR File On and WAR File Path」フィールドに適切な値を選択します (「HTTPS トンネルサーブレット WAR ファイルを修正するには」を参照)。
> 8. 「Application URI」フィールドにパスを入力します。

> 「Application URI」フィールドの値は、トンネルサーブレット URL の /contextRoot 部分です。

> https://hostName:port/contextRoot/tunnel

> たとえば、contextRoot を imq に設定すると、「Application URI」フィールドは次のようになります。

> /imq

> 9. サーブレットを配置するインストールディレクトリのパス (通常は、Sun Java System Web Server インストールルートの内の場所) を入力します。
> 10. 「OK」をクリックします。
> 11. Web サーバインスタンスを再起動します。

> サーブレットは次のアドレスで利用可能となります。

> https://hostName:port/imq/tunnel

> クライアントはこの URL を使用して、安全なHTTPS コネクションを使用しているメッセージサービスに接続できます。

> ### 例 4: HTTPS トンネルサーブレットを Sun Java System Application Server 7.0 に配置する

> この節では、HTTPS トンネルサーブレットを WAR ファイルとして Sun Java System Application Server 7.0 に配置する方法を説明します。

> 2 段階の手順が必要です。

> - Application Server 7.0 配置ツールを使用して HTTPS トンネルサーブレットを配置する
> - アプリケーションサーバインスタンスの server.policy ファイルを変更する

> #### 配置ツールを使用する

> ##### HTTPS トンネルサーブレットを Application Server 7.0 環境に配置するには

> 1. Web ベースの管理 GUI で、次を選択します。

> 「App Server」>「Instances」>「server1」>「Applications」>「Web Applications」

> 2. 「Deploy」ボタンをクリックします。
> 3. 「File Path」 テキストフィールドに、HTTPS トンネルサーブレットの WAR ファイル (imqhttp.war) の場所を入力します。

> imqhttps.war ファイルの場所は、使用中のオペレーティングシステムによって異なります (付録 A 「Message Queue データの場所」を参照)。

> 4. 「OK」をクリックします。
> 5. 次の画面で、「Context Root」テキストフィールドの値を設定します。

> 「Context Root」フィールドの値は、トンネルサーブレット URL の /contextRoot 部分です。

> https://hostName:port/contextRoot/tunnel

> たとえば、「Context Root」フィールドは次のように設定できます。

> /imq

> 6. 「OK」をクリックします。

> 次の画面は、トンネルサーブレットが正常に配置され、デフォルトで有効になっており、この場合は、次の場所に格納されていることを示しています。

> /var/opt/SUNWappserver7/domains/domain1/server1/applications/
> j2ee-modules/imqhttps_1

> サーブレットは次のアドレスで利用可能となります。

> https://hostName:port/contextRoot/tunnel

> クライアントはこの URL を使用して、HTTPS コネクションを使用しているメッセージサービスに接続できます。

> #### server.policy ファイルを変更する

> Application Server 7.0 は、変更されないかぎりは、強制的にデフォルトのセキュリティポリシーセットを適用し、HTTPS トンネルサーブレットが Message Queue ブローカからのコネクションを受け入れるのを阻止します。

> 各アプリケーションサーバインスタンスには、セキュリティポリシーまたはルールを含むファイルがあります。たとえば、Solaris 上の server1 インスタンスのこのファイルは次の場所にあります。

> /var/opt/SUNWappserver7/domains/domain1/server1/config/
> server.policy

> トンネルサーブレットに Message Queue ブローカからのコネクションを受け入れさせるには、このファイルにエントリを追加する必要があります。

> ##### アプリケーションサーバの server.policy ファイルを変更するには

> 1. server.policy ファイルを開きます。
> 2. 次のエントリを追加します。

> grant codeBase
> "file:/var/opt/SUNWappserver7/domains/domain1/server1/ applications/j2ee-modules/imqhttps_1/-"
> {
> permission java.net.SocketPermission "*", "connect,accept,resolve";
> };

> 前へ 目次 索引 次へ

> Copyright 2003 Sun Microsystems, Inc. All rights reserved.