Sun Java ロゴ     前へ      目次      索引      次へ     

Sun ロゴ
Sun Java System Message Queue 3 2005Q1 管理ガイド 

付録 C
HTTP/HTTPS のサポート

Message Queue の Enterprise Edition では Java クライアントがサポートされ、直接 TCP コネクションではなく、HTTP またはセキュリティ保護された HTTP (HTTPS) 転送でブローカとやり取りします。C クライアントでは、HTTP/HTTPS がサポートされません。

この付録では、このようなサポートを有効にするために使用されるアーキテクチャについて説明し、クライアントが Message Queue メッセージングに HTTP ベースのコネクションを使用するために必要となる設定の手順を示します。この付録は、次の節から構成されています。


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

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

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

図 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 ファイルとして配置する

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

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

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

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. ブローカのインスタンス設定ファイルを開きます。
  2. インスタンス設定ファイルは、その設定ファイルが関連付けられているブローカインスタンスの名前 (instanceName) によって識別されたディレクトリに書き込まれます (付録 A 「オペレーティングシステムごとの Message Queue データの場所」を参照)。

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

  3. httpjms の値を imq.service.activelist プロパティに追加します。
  4. 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 の一般的な構文は次のとおりです。

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

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

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

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

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

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

bkrHostNameinstanceName に正しい文字列を入力したことを確認するには、ブラウザからサーブレット 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 トンネルサーブレットにアクセスする場合、次の設定を行います。

クライアントアプリケーションを起動するコマンドに -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)」フィールドに次の値を設定します。
  5. com.sun.messaging.jmq.transport.httptunnel.servlet.HttpTunnelServlet

  6. 「Servlet Classpath」フィールドに imqservlet.jar への絶対パスを入力します。たとえば、次のように指定します。
  7. /usr/share/lib/imq/imqservlet.jar (Solaris)
    /opt/sun/mq/share/lib/imqservlet.jar (Linux)
    IMQ_HOME/lib/imqservlet.jar (Windows)

  8. 「Servlet args」フィールドに、表 C-2 に示すオプションの引数を入力します。
  9. 表 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」フィールドを設定します。
  4. 仮想パスは、トンネルサーブレット URL の /contextRoot/tunnel 部分です。

    http://hostName:port/contextRoot/tunnel

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

    /imq/tunnel

  5. 「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」フィールドにパスを入力します。
  9. 「Application URI」フィールドの値は、トンネルサーブレット URL の /contextRoot 部分です。

    http://hostName:port/contextRoot/tunnel

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

    /imq

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

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

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

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

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

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

配置ツールを使用する

HTTP トンネルサーブレットを Application Server 7.0 環境に配置する
  1. Web ベースの管理 GUI で、次を選択します。
  2. 「App Server」 > 「Instances」 > 「server1」 > 「Applications」 > 「Web Applications」

  3. 「Deploy」ボタンをクリックします。
  4. 「File Path:」 テキストフィールドに、HTTP トンネルサーブレットの WAR ファイル (imqhttp.war) の場所を入力します。
  5. imqhttp.war ファイルの場所は、使用中のオペレーティングシステムによって異なります (付録 A 「オペレーティングシステムごとの Message Queue データの場所」を参照)。

  6. 「OK」をクリックします。
  7. 次の画面で、「Context Root」テキストフィールドの値を設定します。
  8. 「Context Root」フィールドの値は、トンネルサーブレット URL の /contextRoot 部分です。

    http://hostName:port/contextRoot/tunnel

    たとえば、「Context Root」フィールドは /imq に設定できます。

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

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

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

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

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

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

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

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

アプリケーションサーバーの server.policy ファイルを変更する
  1. server.policy ファイルを開きます。
  2. 次のエントリを追加します。
  3. 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 ユーティリティを実行し、トンネルサーブレットの自己署名型証明書を生成します。コマンドプロンプトで次のとおり入力します。

ユーティリティが、必要な情報を要求します。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 つの方法があります。

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

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

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

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

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

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. ブローカのインスタンス設定ファイルを開きます。
  2. インスタンス設定ファイルは、その設定ファイルが関連付けられているブローカインスタンスの名前 (instanceName) によって識別されたディレクトリに書き込まれます (付録 A 「オペレーティングシステムごとの Message Queue データの場所」を参照)。

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

  3. httpsjms の値を imq.service.activelist プロパティに追加します。
  4. 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 ディレクトリにコピーします。
  2. jsse.jar、jnet.jar、jcert.jar

  3. JSSE セキュリティプロバイダを静的に JRE_HOME/lib/security/java.security ファイルに追加します。次を追加します。
  4. security.provider.n=com.sun.net.ssl.internal.ssl.Provider

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

  5. JDK 1.4 を使用していない場合は、-D オプションをクライアントアプリケーションを起動するコマンドに使用して、次の JSSE プロパティを設定します。
  6. java.protocol.handler.pkgs=com.sun.net.ssl.internal.www.protocol

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

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

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

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

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

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

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

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

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

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

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

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

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

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

bkrHostNameinstanceName に正しい文字列を入力したことを確認するには、ブラウザからサーブレット 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 トンネルサーブレットにアクセスする場合、次の設定を行います。

クライアントアプリケーションを起動するコマンドに -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)」フィールドに次の値を設定します。
  5. com.sun.messaging.jmq.transport.
    httptunnel.servlet.HttpsTunnelServlet

  6. 「Servlet Classpath」フィールドに imqservlet.jar への絶対パスを入力します。たとえば、次のように指定します。
  7. /usr/share/lib/imq/imqservlet.jar (Solaris)

    /opt/sun/mq/share/lib/imqservlet.jar (Linux)

    IMQ_HOME/lib/imqservlet.jar (Windows)

  8. 「Servlet args」フィールドに、表 C-4 に示す必要なオプションの引数を入力します。
  9. 表 C-4 HTTPS トンネルサーブレット jar ファイルの配置に使用するサーブレット引数

    引数

    デフォルト値

    必須/オプション

    keystoreLocation

    なし

    必須

    keystorePassword

    なし

    必須

    servletHost

    all hosts

    オプション

    servletPort

    7674

    オプション

    引数はコンマで区切ります。たとえば、次のように指定します。

    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」フィールドを設定します。
  4. 仮想パスは、トンネルサーブレット URL の /contextRoot/tunnel 部分です。

    https://hostName:port/contextRoot/tunnel

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

    /imq/tunnel

  5. 「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.jarjnet.jar、および jcert.jarIWS60_TOPDIR/bin/https/jre/lib/ext にコピーすることです。

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

HTTPS トンネルサーブレット WAR ファイルを修正する
  1. WAR ファイルを一時ディレクトリにコピーします。
  2. cp /usr/share/lib/imq/imqhttps.war /tmp (Solaris)

    cp /opt/sun/mq/share/lib/imqhttps.war /tmp (Linux)

    cp IMQ_HOME/lib/imqhttps.war /tmp (Windows)

  3. 一時ディレクトリを現在のディレクトリにします。
  4. $ cd /tmp

  5. WAR ファイルの内容を抽出します。
  6. $ jar xvf imqhttps.war

  7. WAR ファイルの配置記述子を一覧表示します。
  8. $ ls -l WEB-INF/web.xml

  9. web.xml ファイルを編集して、keystoreLocationkeystorePassword という引数に正しい値を設定します。必要に応じて serverPortserverHost の引数も設定します。
  10. WAR ファイルの内容を設定し直します。
  11. $ 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」フィールドにパスを入力します。
  9. 「Application URI」フィールドの値は、トンネルサーブレット URL の /contextRoot 部分です。

    https://hostName:port/contextRoot/tunnel

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

    /imq

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

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

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

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

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

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

配置ツールを使用する

HTTPS トンネルサーブレットを Application Server 7.0 環境に配置する
  1. Web ベースの管理 GUI で、次を選択します。
  2. 「App Server」 > 「Instances」 > 「server1」 > 「Applications」 > 「Web Applications」

  3. 「Deploy」ボタンをクリックします。
  4. 「File Path:」 テキストフィールドに、HTTPS トンネルサーブレットの WAR ファイル (imqhttps.war) の場所を入力します。
  5. imqhttps.war ファイルの場所は、使用中のオペレーティングシステムによって異なります (付録 A 「オペレーティングシステムごとの Message Queue データの場所」を参照)。

  6. 「OK」をクリックします。
  7. 次の画面で、「Context Root」テキストフィールドの値を設定します。
  8. 「Context Root」フィールドの値は、トンネルサーブレット URL の /contextRoot 部分です。

    https://hostName:port/contextRoot/tunnel

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

    /imq

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

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

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

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

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

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

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

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

アプリケーションサーバーの server.policy ファイルを変更する
  1. server.policy ファイルを開きます。
  2. 次のエントリを追加します。
  3. grant codeBase

    "file:/var/opt/SUNWappserver7/domains/domain1/server1/

                 applications/j2ee-modules/imqhttps_1/-"

    {

        permission java.net.SocketPermission "*",
                 "connect,accept,resolve";

    };


トラブルシューティング

この節では、HTTP や HTTPS コネクションで発生する可能性がある問題、およびその問題の解決方法について説明します。

サーバーかブローカの障害

Web サーバーで障害が生じても再起動すれば、すべてのコネクションが復元され、クライアントへの影響はありません。しかしブローカに障害が生じて再起動された場合は、例外がスローされ、クライアントはそれぞれのコネクションを再確立する必要があります。

Web サーバーとブローカの両方に障害が生じ、ブローカが再起動されない場合、Web サーバーはクライアントコネクションを復元し、ブローカコネクションを待機しますが、クライアントには通知しません。この状況を避けるため、ブローカの再起動を必ず確認してください。

クライアントのトンネルサーブレットによる接続障害

HTTPS クライアントがトンネルサーブレットでブローカに接続できない場合は、次のように操作します。

  1. サーブレットとブローカを起動します。
  2. ブラウザを使用し、HTTPS トンネルサーブレット URL でサーブレットに手動でアクセスします。
  3. 次の管理コマンドを使用し、コネクションの一時停止と再開を行います。
  4. imqcmd pause svc -n httpsjms -u admin
    imqcmd resume svc -n httpsjms -u admin

サービスが再開する場合、HTTPS クライアントはトンネルサーブレットでブローカに接続できます。



前へ      目次      索引      次へ     


Part No: 819-2217.   Copyright 2005 Sun Microsystems, Inc. All rights reserved.