以降の節では、HTTPS サポートを有効化する手順について説明します。この手順は、「HTTP サポートの有効化」の手順とほとんど同じですが、さらに SSL 証明書の生成とアクセスに必要となる手順も追加されています。
HTTPS トンネルサーブレットの自己署名付き証明書を生成します。
HTTP トンネルサーブレットの .war ファイルの配備記述子を次のように変更します。
HTTP トンネルサーブレットを配備します。HTTP トンネルサーブレットは次の場所に配備できます。
ブローカの httpsjms 接続サービスを設定し、ブローカを起動します。
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 トンネルサーブレットを配備する」を参照)。
HTTP トンネルサーブレットの .war ファイルには、Web サーバーまたはアプリケーションサーバーがサーブレットを読み込んで実行するときに必要となる基本的な設定情報が示された配備記述子が含まれています。
imqhttps.war ファイルの配備記述子は、トンネルサーブレットが必要とするキーストアファイルが配置された場所を認識できません。そのため、imqhttps.war ファイルを配備する前に、トンネルサーブレットの配備記述子 (XML ファイル) を編集し、キーストアの場所とパスワードを指定する必要があります。
.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)
一時ディレクトリを現在のディレクトリにします。
$ cd /tmp
.war ファイルの内容を抽出します。
$ jar xvf imqhttps.war
.war ファイルの配備記述子を一覧表示します。
$ ls -l WEB-INF/web.xml
web.xml ファイルを編集して、keystoreLocation と keystorePassword という引数に正しい値を設定します。必要に応じて serverPort と serverHost の引数も設定します。
.war ファイルの内容を設定し直します。
$ jar uvf imqhttps.war WEB-INF/web.xml
これで修正済みの imqhttps.war ファイルを使用して、HTTPS トンネルサーブレットを配備できるようになりました。キーストアパスワードの漏洩が心配な場合は、ファイルシステムアクセス権を使用して、imqhttps.war ファイルへのアクセスを制限できます。
HTTP トンネルサーブレットは、Sun Java System Web Server または Sun Java System Application Server に、Web アーカイブ (WAR) ファイルとして配備できます。
HTTPS トンネルサーブレットを .war ファイルとして配備するときは、Web サーバーまたはアプリケーションサーバーで提供される配備メカニズムを使用します。HTTPS トンネルサーブレットの .war ファイル (imqhttps.war ) は、オペレーティングシステムによって異なるディレクトリに格納されています (付録 A 「プラットフォームごとの Message QueueTM データの場所」を参照)。
Web サーバーで暗号化がアクティブであり、クライアントとブローカの間で終端間の安全な通信が有効であることを確認してください。
Sun Java System Web Server への配備については、「HTTPS トンネルサーブレットを Sun Java System Web Server に配備する」を参照してください。
Sun Java System Application Server への配備については、「HTTPS トンネルサーブレットを Message Queue Application Server に配備する」を参照してください。
この節では、HTTPS トンネルサーブレットを Message Queue Web Server に .war ファイルとして配備する方法について説明します。Web ブラウザを使用してサーブレットの URL にアクセスすると、HTTPS トンネルサーブレットが問題なく配備されたことが確認できます。ステータス情報も表示されます。
HTTPS トンネルサーブレットを配備する前に、JSSE .jar ファイルが Web サーバーのクラスパスに含まれていることを確認します。これを確実にするもっとも簡単な方法は、jsse.jar、jnet.jar、および jcert.jar を WebServer_TOPDIR/bin/https/jre/lib/ext にコピーすることです。
ブラウザベースの管理 GUI で、「Virtual Server Class」タブを選択します。「Manage Classes」をクリックします。
適切な仮想サーバークラス名 (defaultClass など) を選択して、「Manage」ボタンをクリックします。
「Manage Virtual Servers」を選択します。
適切な仮想サーバー名を選択し、「Manage」ボタンをクリックします。
「Web Applications」タブを選択します。
「Deploy Web Application」をクリックします。
「WAR File On」フィールドおよび「WAR File Path」フィールドで、修正済みの imqhttps.war ファイルを指す適切な値を選択します (「手順 2: HTTP トンネルサーブレットの .war ファイルの記述子ファイルを変更する」を参照)。)
「Application URI」フィールドにパスを入力します。
「Application URI」フィールドの値は、トンネルサーブレット URL の /contextRoot 部分です。
https://hostName :portNumber / contextRoot/tunnel
たとえば、contextRoot を imq に設定した場合、「Application URI」フィールドは次のようになります。
/imq
サーブレットを配備するインストールディレクトリのパス (通常は、Message Queue Web Server インストールルートの内の場所) を入力します。
「OK」をクリックします。
Web サーバーインスタンスを再起動します。
サーブレットは次の URL で利用可能となります。
https://hostName:portNumber/imq/tunnel |
クライアントはこの URL を使用することで、安全な HTTPS 接続を使ってメッセージサービスに接続できます。
必ずしもサーバーのアクセスログを無効にする必要はありませんが、無効にしたほうがより良いパフォーマンスを得ることができます。
この節では、HTTPS トンネルサーブレットを Message Queue Application Server に .war ファイルとして配備する方法について説明します。
2 段階の手順が必要です。
Application Server の配備ツールを使用して HTTPS トンネルサーブレットを配備します。
アプリケーションサーバーインスタンスの server.policy ファイルを変更します。
HTTPS トンネルサーブレットを Application Server 環境に配備する手順を次に示します。
Web ベースの管理 GUI で、次を選択します。
「App Server」>「Instances」>「server1」>「Applications」>「Web Applications」
「Deploy」ボタンをクリックします。
「File Path:」テキストフィールドに、HTTPS トンネルサーブレットの .war ファイル (imqhttps.war) の場所を入力し、「OK」をクリックします。
imqhttps.war ファイルの場所は、オペレーティングシステムによって異なります (付録 A 「プラットフォームごとの Message QueueTM データの場所」を参照)。
「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 接続を使ってメッセージサービスに接続できます。
Application Server は、セキュリティーポリシーが変更されていないかぎり、強制的にデフォルトのセキュリティーポリシーセットを適用し、HTTPS トンネルサーブレットが Message Queue ブローカからの接続を受け入れるのを阻止します。
各アプリケーションサーバーインスタンスには、セキュリティーポリシーまたはルールを含むファイルがあります。たとえば、Solaris 上の server1 インスタンスのこのファイルは次の場所にあります。
/var/opt/SUNWappserver8/domains/domain1/server1/config/ server.policy
トンネルサーブレットに Message Queue ブローカからの接続を受け入れさせるには、このファイルにエントリを追加する必要があります。
server.policy ファイルを開きます。
次のエントリを追加します。
grant codeBase "file:/var/opt/SUNWappserver8/domains/domain1/server1/ applications/j2ee-modules/imqhttps_1/-” { permission java.net.SocketPermission "*", “connect,accept,resolve"; }; |
デフォルトでは、HTTPS サポートはブローカに対してアクティブになっていないため、httpsjms 接続サービスをアクティブにするようブローカを再設定する必要があります。再設定したあとは、「ブローカの起動」で説明されているようにブローカを起動できます。
ブローカのインスタンス設定ファイルを開きます。
インスタンス設定ファイルは、その設定ファイルが関連付けられているブローカインスタンスの名前 (instanceName) によって識別されるディレクトリに格納されています (see 付録 A 「プラットフォームごとの Message QueueTM データの場所」を参照)。
…/instances/ instanceName /props/config.properties
httpsjms の値を imq.service.activelist プロパティーに追加します。
imq.service.activelist=jms,admin,httpsjms |
ブローカは、起動時に Web サーバーとそのホストマシン上で実行している HTTPS トンネルサーブレットを探します。リモートトンネルサーブレットにアクセスするには、接続サービスの servletHost および servletPort プロパティーを設定し直します。
pullPeriod プロパティーを設定し直して、パフォーマンスを向上させることもできます。「手順 4: httpsjms 接続サービスを設定する」では、httpsjms 接続サービスの設定プロパティーについて説明します。
クライアントアプリケーションは、適切に設定された接続ファクトリ管理対象オブジェクトを使用して、ブローカへの HTTPS 接続を確立する必要があります。
ただし、クライアントは Java Secure Socket Extension (JSSE) で提供される SSL ライブラリへもアクセスし、ルート証明書を持つ必要もあります。SSL ライブラリは、JDK 1.4 に付属しています。それ以前の JDK バージョンを使用している場合は、「JSSE を設定する」を参照してください。それ以外の場合は 「ルート証明書をインポートする」に進んでください。
これらの点を解決したあとで、HTTPS 接続の設定に進むことができます。
JSSE .jar ファイルを JRE_HOME/lib/ext ディレクトリにコピーします。
jsse.jar、jnet.jar、jcert.jar |
JSSE セキュリティープロバイダを静的に追加します。
security.provider.n=com.sun.net.ssl.internal.ssl.Provider |
これを JRE_HOME/lib/security/java.security ファイルに追加します。n は、セキュリティープロバイダパッケージに対して次に利用可能な優先順位です。
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』を参照してください。
接続ファクトリ属性の設定は、次のいずれかの方法で行います。
接続ファクトリ管理対象オブジェクトを作成する imqobjmgr コマンドで --o オプションを使用するか (「接続ファクトリの追加」を参照)、管理コンソール (imqadmin) を使用して接続ファクトリ管理対象オブジェクトを作成するときに属性を設定します。
クライアントアプリケーションを起動するコマンドで -D オプションを使用します (『Message Queue Developer's Guide for Java Clients』を参照)。
クライアントアプリケーションのプログラムで接続ファクトリを作成してから、API 呼び出しを使用して接続ファクトリの属性を設定します (『Message Queue Developer's Guide for Java Clients』を参照)。
複数のブローカを実行している場合、複数の Web サーバーとサーブレットインスタンスを設定する必要はありません。現在実行中のブローカ間で、1 つの Web サーバーと HTTPS トンネルサーブレットのインスタンスを共有できます。複数のブローカインスタンスが 1 つのトンネルサーブレットを共有している場合は、次に示すとおり、imqAddressList 接続ファクトリ属性を設定する必要があります。
https://hostName:portNumber /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 secured connections from brokers on port : 7674 Total available brokers = 2 Broker List : jpgserv:broker2 cochin:broker1 |
HTTP プロキシを使用して HTTPS トンネルサーブレットにアクセスする場合、次の設定を行います。
http.proxyHost システムプロパティーをプロキシサーバーのホスト名に設定します。
http.proxyPort システムプロパティーをプロキシサーバーのポート番号に設定します。
クライアントアプリケーションを起動するコマンドに -D オプションを使用して、これらのプロパティーを設定できます。