Sun Java System Message Queue 3.7 UR1 管理ガイド

HTTPS サポートの有効化

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

ProcedureHTTPS サポートを有効にする

  1. HTTPS トンネルサーブレットの自己署名付き証明書を生成します。

  2. HTTP トンネルサーブレットの .war ファイルの配備記述子を次のように変更します。

    • 証明書キーストアを配置した場所を指すようにします

      • 証明書キーストアのパスワードを指定します

  3. HTTP トンネルサーブレットを配備します。HTTP トンネルサーブレットは次の場所に配備できます。

    • Sun Java System Web Server

      • Sun Java System Application Server

  4. ブローカの httpsjms 接続サービスを設定し、ブローカを起動します。

  5. HTTPS 接続を設定します。

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

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

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

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

JRE_HOME/bin/keytool -servlet keyStoreLocation

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

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


注 –

指定したパスワードは覚えておいてください。あとでトンネルサーブレットがキーストアを開くことができるように、そのパスワードを入力する必要があります。


JDK keytool ユーティリティーは、自己署名付き証明書を生成し、keyStoreLocation 引数 で指定された Message Queue のキーストアファイル内に証明書を配置します。


注 –

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


手順 2: HTTP トンネルサーブレットの .war ファイルの記述子ファイルを変更する

HTTP トンネルサーブレットの .war ファイルには、Web サーバーまたはアプリケーションサーバーがサーブレットを読み込んで実行するときに必要となる基本的な設定情報が示された配備記述子が含まれています。

imqhttps.war ファイルの配備記述子は、トンネルサーブレットが必要とするキーストアファイルが配置された場所を認識できません。そのため、imqhttps.war ファイルを配備する前に、トンネルサーブレットの配備記述子 (XML ファイル) を編集し、キーストアの場所とパスワードを指定する必要があります。

ProcedureHTTPS トンネルサーブレット .war ファイルを変更する

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

    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)

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

    $ cd /tmp

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

    $ jar xvf imqhttps.war

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

    $ ls -l WEB-INF/web.xml

  5. web.xml ファイルを編集して、keystoreLocationkeystorePassword という引数に正しい値を設定します。必要に応じて serverPortserverHost の引数も設定します。

  6. .war ファイルの内容を設定し直します。

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

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

手順 3: HTTPS トンネルサーブレットを配備する

HTTP トンネルサーブレットは、Sun Java System Web Server または Sun Java System Application Server に、Web アーカイブ (WAR) ファイルとして配備できます。

HTTPS トンネルサーブレットを .war ファイルとして配備するときは、Web サーバーまたはアプリケーションサーバーで提供される配備メカニズムを使用します。HTTPS トンネルサーブレットの .war ファイル (imqhttps.war ) は、オペレーティングシステムによって異なるディレクトリに格納されています (付録 A 「プラットフォームごとの Message QueueTM データの場所」を参照)。

Web サーバーで暗号化がアクティブであり、クライアントとブローカの間で終端間の安全な通信が有効であることを確認してください。

Web アーカイブファイルとして配備する

Sun Java System Web Server への配備については、「HTTPS トンネルサーブレットを Sun Java System Web Server に配備する」を参照してください。

Sun Java System Application Server への配備については、「HTTPS トンネルサーブレットを Message Queue Application Server に配備する」を参照してください。

HTTPS トンネルサーブレットを Sun Java System Web Server に配備する

この節では、HTTPS トンネルサーブレットを Message Queue Web Server に .war ファイルとして配備する方法について説明します。Web ブラウザを使用してサーブレットの URL にアクセスすると、HTTPS トンネルサーブレットが問題なく配備されたことが確認できます。ステータス情報も表示されます。

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

ProcedureHTTPS トンネルサーブレットを .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」フィールドおよび「WAR File Path」フィールドで、修正済みの imqhttps.war ファイルを指す適切な値を選択します (「手順 2: HTTP トンネルサーブレットの .war ファイルの記述子ファイルを変更する」を参照)。)

  8. 「Application URI」フィールドにパスを入力します。

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

    https://hostName :portNumber / contextRoot/tunnel

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

    /imq

  9. サーブレットを配備するインストールディレクトリのパス (通常は、Message Queue Web Server インストールルートの内の場所) を入力します。

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

  11. Web サーバーインスタンスを再起動します。

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


    https://hostName:portNumber/imq/tunnel

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

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

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

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

  1. 「Status」タブを選択します。

  2. 「Log Preferences Page」を選択します。

    Log クライアントアクセス制御を使用して、ロギングを無効にします。

HTTPS トンネルサーブレットを Message Queue Application Server に配備する

この節では、HTTPS トンネルサーブレットを Message Queue Application Server に .war ファイルとして配備する方法について説明します。

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

配備ツールを使用する

HTTPS トンネルサーブレットを Application Server 環境に配備する手順を次に示します。

ProcedureHTTPS トンネルサーブレットを Application Server 環境に配備する

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

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

  2. 「Deploy」ボタンをクリックします。

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

    imqhttps.war ファイルの場所は、オペレーティングシステムによって異なります (付録 A 「プラットフォームごとの Message QueueTM データの場所」を参照)。

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

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

    https://hostName :portNumber / contextRoot/tunnel

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

    /imq

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


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

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


    https://hostName:portNumber/
    contextRoot/tunnel

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

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

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

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

/var/opt/SUNWappserver8/domains/domain1/server1/config/
server.policy

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

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

  1. server.policy ファイルを開きます。

  2. 次のエントリを追加します。


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

手順 4: httpsjms 接続サービスを設定する

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

Procedurehttpsjms 接続サービスをアクティブにする

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

    インスタンス設定ファイルは、その設定ファイルが関連付けられているブローカインスタンスの名前 (instanceName) によって識別されるディレクトリに格納されています (see 付録 A 「プラットフォームごとの Message QueueTM データの場所」を参照)。

    /instances/ instanceName /props/config.properties

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


    imq.service.activelist=jms,admin,httpsjms

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

    pullPeriod プロパティーを設定し直して、パフォーマンスを向上させることもできます。「手順 4: httpsjms 接続サービスを設定する」では、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

手順 5: HTTPS 接続を設定する

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

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

これらの点を解決したあとで、HTTPS 接続の設定に進むことができます。

JSSE を設定する

ProcedureJSSE を設定する

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


    jsse.jar、jnet.jar、jcert.jar
  2. JSSE セキュリティープロバイダを静的に追加します。


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

    これを JRE_HOME/lib/security/java.security ファイルに追加します。n は、セキュリティープロバイダパッケージに対して次に利用可能な優先順位です。

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


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

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

Web サーバーの証明書に署名した認証局 (CA) のルート証明書が、デフォルトで信頼されるデータベースにない場合、または Web サーバーまたはアプリケーションサーバーの専用の証明書を使用している場合、信頼されるデータベースに証明書を追加する必要があります。これに該当する場合は、次の手順に従ってください。それ以外の場合 は、「接続ファクトリを設定する」に進んでください。

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

JRE_HOME/bin/keytool -import -trustcacerts
 -alias aliasForCertificate -file certFile

-keystore trustStoreFile

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

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

javax.net.ssl.trustStore=trustStoreFile
javax.net.ssl.trustStorePassword=trustStorePasswd

接続ファクトリを設定する

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

https://hostName:portNumber

/contextRoot/tunnel

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

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

接続ファクトリ属性の設定は、次のいずれかの方法で行います。

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

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

https://hostName:portNumber

/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 secured connections from brokers on port : 7674
Total available brokers = 2
Broker List :
   jpgserv:broker2
   cochin:broker1

HTTP プロキシを使用する

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

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