Instant Messaging は、セキュリティー保護された通信用として、TLS (Transport Layer Security) と従来の SSL (Secure Sockets Layer) をサポートします。この章では、これらのプロトコルを使って Instant Messaging のセキュリティーを設定する手順について、次の各節で説明します。
Instant Messaging は、TLS (Transport Layer Security) 1.0 プロトコルの startTLS 拡張を使用することにより、クライアント/サーバー間やサーバー間の暗号化通信、およびサーバー間での証明書ベースの認証を行います。さらに、Instant Messaging は Instant Messenger とマルチプレクサ間の暗号化通信用として、SSL プロトコル (バージョン 3.0) の従来の実装をサポートします。後者の場合、証明書は、クライアントが接続するサーバー ID を検証するために使用されますが、認証用としては使用されません。
マルチプレクサとサーバー間の通信は、セキュリティー保護されていないトランスポート上で行われます。TLS を使ってクライアント/サーバー間通信を行う場合、マルチプレクサはクライアントからサーバーに、あるいはその逆方向にバイトを引き渡すだけであり、暗号化や復号化は一切実行しません。
TLS は、SSL との完全な互換性を持ち、必要なすべての SSL 機能を含んでいます。TLS と SSL は、XMPP や HTTP のアプリケーション層の下のプロトコル層として機能します。
従来の SSL のみを使用するようにマルチプレクサを設定した場合、Instant Messenger は SSL を使ってマルチプレクサに接続するのみであり、サーバーから返される情報のうち、TLS でのみ有効な情報をすべて無視します。ただし、マルチプレクサで従来の SSL を使用することを選択した場合、すべての XMPP/HTTP ゲートウェイ インスタンスを、マルチプレクサを介さずにサーバーと直接通信するように設定してください。ゲートウェイは従来の SSL をサポートしません。従来の SSL を介してマルチプレクサに接続したあとで TLS 接続を要求した他社製クライアントは、接続を許されます。
さらに、マルチプレクサは、セキュリティー保護されていないトランスポートを介してサーバーに接続します。終端間通信 (クライアントからマルチプレクサを介してサーバーへの通信、およびその逆方向の通信) のセキュリティーを強化するには、従来の SSL ではなく TLS を使用してください。
Instant Messaging サーバーで TLS を使用するには、少なくとも Java 1.5 を使用する必要があります。
XMPP における TLS と StartTLS については、RFC 3920、Extensible Messaging and Presence Protocol: Core の「Use of TLS」を参照してください。証明書、SSL、および TLS の概要については、『Sun Java System Application Server Enterprise Edition 8.2 管理ガイド』の「証明書および SSL の概要」を参照してください。この節の手順は、証明書の生成に Sun JavaTM System Application Server を使用するものと仮定します。別の Web コンテナを使用する場合には、その Web コンテナのマニュアルを参照し、キーストアや証明書の具体的な生成手順を確認する必要があります。
Instant Messaging のサーバー間通信とクライアント/サーバー間通信で TLS が使えるようにするには、次の概要手順に従う必要があります。
keytool
ユーティリティーを使って Java キーストア (JKS) と非公開鍵を作成します。
keytool ユーティリティーの概要については、『Sun Java System Application Server Enterprise Edition 8.2 管理ガイド』の「セキュリティー管理用ツール」を参照してください。Sun Java System Application Server を使って JKS を生成する手順については、『Sun Java System Application Server Enterprise Edition 8.2 管理ガイド』の「証明書と SSL の操作」を参照してください。
非公開鍵を使って Instant Messaging サーバーのサーバー証明書を生成します。
手順については、『Sun Java System Application Server Enterprise Edition 8.2 管理ガイド』の「keytool ユーティリティーを使って証明書を生成する」を参照してください。
認証局 (CA) によって署名された Instant Messaging サーバー証明書を取得します。
手順については、『Sun Java System Application Server Enterprise Edition 8.2 管理ガイド』の「keytool ユーティリティーを使ってデジタル証明書に署名する」を参照してください。必要に応じて「Application Server」を「Instant Messaging」に読み替えてください。
Instant Messaging サーバーを再起動します。
詳細は、「Instant Messaging コンポーネントの起動」を参照してください。
CA のルート証明書を取得します。
CA のルート証明書の取得手順については、CA にお問い合わせください。
証明書をキーストアにインポートします。
CA ルート証明書と署名付きサーバー証明書を、keytool
ユーティリティーを使ってキーストアにインポートしますが、その方法については、『Sun Java System Application Server Enterprise Edition 8.2 管理ガイド』の「keytool ユーティリティーの使用」を参照してください。
iim.conf 内で適切なパラメータを設定してサーバーの TLS を有効にします。
手順については、「Instant Messaging サーバーの TLS の有効化」を参照してください。
TLS を介してサーバー間通信を行う場合には、TLS を介して通信するサーバーごとに、以上の手順を繰り返します。サーバー間通信で、TLS を使用するために、Instant Messenger に対してさらに設定すべきことはありません。TLS 用にマルチプレクサを設定する必要もありません。ただし、TLS を使用する場合、従来の SSL を使用するようにマルチプレクサを設定しないでください。
配備内で XMPP/HTTP ゲートウェイ を使用する場合は、マルチプレクサとではなく Instant Messaging サーバーと直接通信するように、ゲートウェイを設定します。
Sun Java System Application Server を使用する場合、手順 1 から 6 については、『Sun Java System Application Server Enterprise Edition 8.2 管理ガイド』の「証明書と SSL の操作」を参照してください。手順 7 については、「Instant Messaging サーバーの TLS の有効化」を参照してください。
サーバー上の TLS を有効にするには、「Instant Messaging サーバーの TLS 設定」で説明したように、事前に JKS を作成し、署名付きサーバー証明書を取得してインストールし、CA の証明書を信頼する必要があります。TLS を使ってサーバー間通信またはクライアント/サーバー間通信、あるいはその両方を行いたい場合に、サーバーの TLS を有効にします。
表 12–1 に、Instant Messaging サーバーの TLS を有効にするために使用される iim.conf 内のパラメータの一覧を示します。また、この表には、これらのパラメータの説明とデフォルト値も含まれています。
表 12–1 Instant Messaging サーバーの TLS 設定パラメータ
パラメータ |
デフォルト値 |
説明 |
|
---|---|---|---|
iim_server.sslkeystore |
なし |
サーバーの Java キーストア (JKS) の相対パスとファイル名を含みます。たとえば、次のようになります。
|
|
iim_server.keystorepasswordfile |
sslpassword.conf |
キーストアのパスワードを含むファイルの相対パスと名前を含みます。このファイルは次の行を含む必要があります。 Internal (Software) Token:password password は、キーストアを保護するパスワードです。 |
|
iim_server.requiressl |
false |
true の場合、サーバーは、初期ストリームセッションの設定後に TLS 接続を要求しない接続をすべて終了させます。 |
|
iim_server.trust_all_cert |
false |
この値が true の場合、サーバーは、期限切れの証明書や自己署名付き証明書を含むすべての証明書を信頼するほか、ログファイルへの証明書情報の追加も行います。false の場合、サーバーは証明書情報をログに記録せず、CA によって署名された有効な証明書のみを信頼します。 |
TLS を介したセキュリティー保護された通信を使用して Instant Messaging サーバーを次のように設定するには、この手順を使用します。
すべてのクライアントとサーバーの接続で TLS を要求する。
特定のサーバー間接続でのみ TLS を要求する。
初期通信セッションの確立後にセキュリティー保護されたトランスポートを要求するクライアントやサーバーに TLS 接続を許可する。
特定のサーバー間接続で TLS を要求するとともに、その他のクライアントやサーバーに TLS 接続を許可する。
「Instant Messaging サーバーの TLS 設定」で説明したように、JKS を作成し、サーバー証明書を取得してインストールし、CA の証明書を信頼するようにサーバーを設定したことを確認してください。
サーバー間で TLS 通信を行う場合、TLS を使用するように設定する各サーバーで、この手順を行う必要があります。
iim.conf 内で次のパラメータの値を追加します。
iim.conf 内にまだ存在していないパラメータは、追加します。
iim_server.sslkeystore=server-keystore.jks iim_server.keystorepasswordfile=sslpassword.conf |
これでサーバーは、任意のクライアントや別の Instant Messaging サーバーからの接続要求に対し、TLS を介して通信可能である旨の応答を返すようになります。その後、要求元のクライアントやサーバーは、TLS を介してセキュリティー保護された接続を確立するかどうかを選択します。
クライアント、およびリモートおよびピアサーバーからのすべての接続に対してサーバーが TLS を要求するようにするには、iim.conf に次のパラメータを追加します。
iim_server.requiressl=true |
このパラメータを true に設定すると、サーバーは、TLS をサポートしないあらゆるクライアントとの接続、またはリモートまたはピアサーバーとの接続を終了させます。TLS を介してセキュリティー保護されたクライアント/サーバー間通信を要求するには、このパラメータを使用します。
サーバー間通信の詳細については、第 8 章「複数の Instant Messaging サーバーの連携配備」を参照してください。
特定のリモートまたはピアサーバーとの通信で TLS を要求するには、iim.conf に次のパラメータを追加します。
iim_server.coserver1.requiressl=true |
TLS を要求する協調サーバー (coserver) ごとに、このパラメータを設定します。
iim_server.requiressl を true に設定すると、サーバーは、通信するすべてのサーバーに対して TLS 接続を要求します。その場合、特定の協調サーバーでこのパラメータを設定する必要はありません。
(省略可能) サーバーが受け取ったすべての証明書を信頼し、証明書の情報をログファイルに追加するようにするには、iim.conf に次のパラメータを追加します。
iim_server.trust_all_cert=true |
実稼動前に、この機能を使用して配備をテストする必要が生じる可能性があります。ただし、配備済みのシステム上でテストを行うと深刻なセキュリティーリスクが発生するため、通常は行わないでください。この値が true の場合、サーバーは、期限切れの証明書や自己署名付き証明書を含むすべての証明書を信頼するほか、ログファイルへの証明書情報の追加も行います。false の場合、サーバーは証明書情報をログに記録せず、CA によって署名された有効な証明書のみを信頼します。
imadmin を使ってサーバーの設定を更新します。
imadmin refresh server |
TLS が正しく動作していることを確認します。
確認を行う方法はいくつか考えられますが、その 1 つとして、「セキュリティー保護された Instant Messenger の起動」の手順に従う方法が挙げられます。
次に示す iim.conf ファイルからの例には、サーバー間通信やクライアント/サーバー間通信で必要となる TLS 設定が含まれています。この例に含まれるパラメータの値は、配備ごとに異なります。
! サーバー間通信ポート。 iim_server.port = "5269" ! サーバーがサーバー間通信ポート上で ! 待機する場合 iim_server.useport = "True” iim_server.coservers=coserver1 iim_server.coserver1.serverid=Iamcompany22 iim_server.coserver1.password=secretforcompany22 iim_server.coserver1.host=iim.i-zed.com:5269 iim_server.serverid=Iami-zed iim_server.password=secret4i-zed iim_server.trust_all_cert=true iim_server.sslkeystore=/var/im/server_keystore.jks iim_server.keystorepasswordfile=/var/im/sslpassword.conf |
TLS をサポートしない Instant Messaging クライアントを使用している場合でも、TLS の代わりに SSL を使ってクライアント/マルチプレクサ間通信を行えます。SSL を使用するようにマルチプレクサを設定すると、TLS を使ってクライアント/サーバー間通信を行うことができなくなります。マルチプレクサとサーバーとの間の通信はすべてクリアーテキスト形式で、セキュリティー保護されていないトランスポートを介して行われます。
マルチプレクサで従来の SSL を設定し、かつ XMPP/HTTP ゲートウェイ を使用する場合には、マルチプレクサとではなくサーバーと直接通信するようにゲートウェイを設定する必要があります。ゲートウェイは従来の SSL をサポートしません。
マルチプレクサと Instant Messenger 間で SSL を有効化するのに必要な手順は、次のとおりです。
マルチプレクサで SSL を有効にするには、証明書を要求する必要があります。
この節では、Sun Java System Web Server、Sun Java System Application Server のいずれかを Web コンテナとして使って証明書を要求するものと仮定します。
マルチプレクサは NSS を使って証明書を管理するため、証明書や証明書データベースを作成、管理、および使用するのに NSS ユーティリティーを使用できます。
Web ブラウザで、次の URL を入力して Web コンテナの管理サーバーを起動します。
http://hostname.domain-name:administration-port |
ユーザー名とパスワードの入力を要求するウィンドウが表示されます。
Web Server または Application Server のインストール時に指定した管理ユーザー名とパスワードを入力します。
「Administration Server」ページが表示されます。
個別の Web Server インスタンスまたは Application Server インスタンスを作成します。
複数の Application Server インスタンスをインストールする方法の詳細については、『Sun Java System Application Server Enterprise Edition 8.2 Installation Guide』を参照してください。複数の Web Server インスタンスをインストールする方法については、『Sun Java Communications Suite 5 インストールガイド』を参照してください。
公開鍵と非公開鍵を格納するための信頼データベースを作成します。このデータベースはキーペアファイルと呼ばれます。
キーペアファイルは、SSL 暗号化に使われます。
信頼データベースの作成方法については、Application Server の場合は『Sun Java System Application Server Enterprise Edition 8.2 管理ガイド』の第 9 章「セキュリティーの設定」を、Web Server の場合は『Sun Java System Web Server 7.0 管理ガイド』の第 6 章「証明書と鍵」をそれぞれ参照してください。
CA からの証明書を要求します。
証明書を要求する方法の詳細については、Application Server の場合は『Sun Java System Application Server Enterprise Edition 8.2 管理ガイド』の第 9 章「セキュリティーの設定」を、Web Server の場合は『Sun Java System Web Server 7.0 管理ガイド』の第 6 章「証明書と鍵」をそれぞれ参照してください。
認証局からサーバー証明書を受け取ったら、その証明書をインストールし、セキュリティー保護された通信を行うためのデータベースを作成する必要があります。
Web ブラウザで、次の URL を入力して管理サーバーを起動します。
http://hostname.domain-name:administration-port |
ユーザー名とパスワードの入力を要求するウィンドウが表示されます。
Web Server または Application Server のインストール時に指定した管理ユーザー名とパスワードを入力します。
「Administration Server」ページが表示されます。
サーバーの証明書をインストールします。
証明書のインストール方法については、http://docs.sun.com で Web Server と Application Server の製品マニュアルを参照してください
Web Server または Application Server の /alias ディレクトリに移動します。
/alias ディレクトリから Instant Messaging サーバーの im-cfg-base ディレクトリに、データベースファイルをコピーします。
たとえば、Solaris 上では次のように入力します。
cp https-serverid-hostname-cert8.db /etc/opt/SUNWiim/default/config/cert8.db |
cp https-serverid-hostname-key3.db /etc/opt/SUNWiim/default/config/key3.db |
cp secmod.db /etc/opt/SUNWiim/default/config/secmod.db |
Linux 上では次のように入力します。
cp https-serverid-hostname-cert8.db /etc/opt/sun/im/default/config/cert8.db |
cp https-serverid-hostname-key3.db /etc/opt/sun/im/default/config/key3.db |
cp secmod.db /etc/opt/sun/im/default/config/secmod.db |
cert7.db、key3.db、および secmod.db ファイルの読み取り権を、マルチプレクサが使用するシステムユーザーに許可する必要があります。さらに、Instant Messaging インスタンスを複数作成した場合には、/default ディレクトリの名前がインスタンスごとに異なります。
im-cfg-base のデフォルトの場所については、表 3–1 を参照してください。
マルチプレクサのホスト上で im-cfg-base に移動します。
im-cfg-base の場所については、「Instant Messaging サーバーのディレクトリ構造」を参照してください。
sslpassword.conf という名前のファイルを、任意のテキストエディタを使って作成します。
sslpassword.conf に次の行を入力します。
Internal (Software) Token:password |
ここで、password は、信頼データベースを作成したときに指定したパスワードです。
sslpassword.conf を保存して閉じます。
sslpassword.conf の所有権と読み取り権をすべての Instant Messenger エンドユーザーが持っていることを確認します。
マルチプレクサを再起動します。
SSL が正しく動作していることを確認します。
確認を行う方法はいくつか考えられますが、その 1 つとして、「セキュリティー保護された Instant Messenger の起動」の手順に従う方法が挙げられます。
Web Server または Application Server に管理者としてログインします。
証明書要求時に作成したサーバーインスタンスを削除します。
クライアント/マルチプレクサ間通信で SSL を有効にするには、iim.conf 内のパラメータを変更したあと、セキュリティー保護された Instant Messenger クライアントを使ってマルチプレクサに接続します。
表 12–2 に、Instant Messenger とマルチプレクサ間で SSL を有効化するための、iim.conf 内のパラメータの一覧を示します。また、この表には、これらのパラメータの説明とデフォルト値も記載されています。
表 12–2 Instant Messaging マルチプレクサの SSL パラメータ
パラメータ |
デフォルト値 |
説明 |
---|---|---|
iim_mux.usessl |
off |
この値が on に設定された場合、マルチプレクサは、アプリケーションデータを交換する前に、受け入れた接続ごとに SSL ハンドシェークを要求します。 |
iim_mux.secconfigdir |
Solaris の場合: /etc/opt/SUNWiim/default/config Linux の場合: /etc/opt/sun/im/default/config |
このディレクトリには鍵と証明書のデータベースが含まれます。また、通常はセキュリティーモジュールデータベースも含まれます。さらに、Instant Messaging インスタンスを複数作成した場合には、/default ディレクトリの名前がインスタンスごとに異なります。詳細は、「単一の Instant Messaging インストールからの複数インスタンスの作成」を参照してください。 |
iim_mux.keydbprefix |
(空の文字列) |
この値には、鍵データベースのファイル名のプレフィックスが必要です。鍵データベースのファイル名は、必ず key3.db で終わる必要があります。 たとえば This-Database-key3.db のように、鍵データベース名にプレフィックスが含まれている場合、このパラメータの値は This-Database になります。 |
iim_mux.certdbprefix |
(空の文字列) |
この値には、証明書データベースのファイル名のプレフィックスが必要です。証明書データベースのファイル名は、必ず cert7.db で終わる必要があります。 たとえば Secret-stuff-cert7.db のように、証明書データベース名にプレフィックスが含まれている場合、このパラメータの値は Secret-stuff になります。 |
iim_mux.secmodfile |
secmod.db |
この値には、セキュリティーモジュールファイルの名前が必要です。 |
iim_mux.certnickname |
Multiplexor-Cert |
この値には、証明書のインストール時に入力した証明書の名前が必要です。 この証明書の名前は、大文字と小文字が区別されます。 |
iim_mux.keystorepasswordfile |
sslpassword.conf |
この値には、鍵データベースのパスワードが格納されたファイルの相対パスと名前が必要です。このファイルは次の行を含む必要があります。 Internal (Software) Token:password password は、鍵データベースを保護するパスワードです。 |
iim.conf を開きます。
iim.conf の場所、およびこのファイルを変更する手順については、「iim.conf ファイルの構文」を参照してください。
表 12–2 の値を、iim.conf 内のマルチプレクサ設定パラメータに追加します。
次に示すのは、マルチプレクサ設定パラメータを含む iim.conf の例です。
! IIM multiplexor configuration ! ============================= ! ! Multiplexor specific options ! IP address and listening port for the multiplexor. ! WARNING: If this value is changed, the port value of ’-server’ ! argument in the client’s im.html and im.jnlp files should ! also be changed to match this. iim_mux.listenport = "siroe.com:5222" ! The IM server and port the multiplexor talks to. iim_mux.serverport = "siroe.com:45222" ! Number of instances of the multiplexor. iim_mux.numinstances = "1" ! Maximum number of threads per instance iim_mux.maxthreads = "10" ! Maximum number of concurrent connections per multiplexor process iim_mux.maxsessions = "1000" iim_mux.usessl = "on" iim_mux.secconfigdir = "/etc/opt/SUNWiim/default/config" iim_mux.keydbprefix = "This-Database" iim_mux.certdbprefix = "Secret-stuff" iim_mux.secmodfile = "secmod.db" iim_mux.certnickname = "Multiplexor_Cert" iim_mux.keystorepasswordfile = "sslpassword.conf" |
Instant Messenger は自動的に TLS をサポートします。「Instant Messaging サーバーの TLS の有効化」の説明に従って TLS を使用するようにサーバーを設定した場合、Instant Messenger がサーバーに接続した際に、サーバーは、TLS セッションをサポートできることをクライアントに伝えます。続いて、Instant Messenger は、TLS を使用するように接続を変更することを要求できます。
従来の SSL の Instant Messenger を呼び出すには、Web ブラウザから imssl.html または imssl.jnlp にアクセスします。これらのファイルは、リソースディレクトリ内にあります。このディレクトリは、Instant Messenger のすべてのリソースを格納するベースディレクトリです。
また、これらのアプレット記述子ファイルへのリンクを、index.html に追加することもできます。
マルチプレクサの従来の SSL の設定、サーバーの TLS の設定のいずれかが完了すると、Instant Messenger クライアントがセキュリティー保護された接続を行えたかどうかを確認できます。
Instant Messenger にログインします。
従来の SSL を使用する場合は、Web ブラウザから imssl.html または imssl.jnlp にアクセスします。TLS を使用する場合は、クライアントに通常どおりにアクセスします。詳細は、「Instant Messenger の起動」を参照してください。
TLS が利用可能であり、かつマルチプレクサが従来の SSL 用に設定されていない場合、Instant Messenger は常に TLS を使用します。
Instant Messenger のメインウィンドウでロックアイコンが表示されていることを確認します。
Instant Messenger がセキュリティー保護されたトランスポート、つまり SSL、TLS のいずれかを使用している場合、メインウィンドウの右端にロックアイコンが表示されます。