Sun ONE Application Server 7, Enterprise Edition セキュリティ管理者ガイド |
第 4 章
SSL/TLS 暗号化の管理この章で説明するタスクを実行する前に、証明書を取得し、暗号化と復号化、公開鍵と秘密鍵、デジタル証明書、暗号化プロトコルなど、公開鍵暗号化の基本的な概念について十分に理解している必要があります。
この章では、次の項目について説明します。
暗号化とそれに関連するトピックについては、Sun ONE Directory Server のマニュアルセットの「Introduction to SSL」を参照してください。
暗号化について暗号化は、意図した受信者以外が認識できないように情報を変換するプロセスで、復号化は、暗号化された情報を認識可能な状態に戻すプロセスです。Sun ONE Application Server 7 がサポートしている暗号化プロトコルは、SSL (Secure Sockets Layer) と TLS (Transport Layer Security) です。
A 暗号化方式は、暗号化と復号化に使用される暗号化アルゴリズム (関数) です。暗号化方式群は、暗号化方式の集合です。SSL プロトコルと TLS プロトコルには、多数の暗号化方式群が用意されています。安全度は、暗号化方式によって異なります。一般に、暗号化方式が使用するビット数が多いほど、データの復号化は困難になります。
双方向の暗号化プロセスでは、両者が同じ暗号化方式を使う必要があります。暗号化方式は種類が多いので、一般に広く利用されている方式を Sun ONE Application Server の環境で有効にする必要があります。
SSL プロトコルと TLS プロトコル
Sun ONE Application Server は、暗号化された通信として、SSL (Secure Sockets Layer) 3.0 プロトコルと TLS (Transport Layer Security) 1.0 プロトコルをサポートしています。SSL と TLS はアプリケーションに依存せず、上位レベルの複数のプロトコルを透過的に何段階にも使用することができます。
SSL および TLS プロトコルは、サーバーとクライアントの相互認証、証明書の転送、セッションキーの確立に使われる暗号化方式を多数サポートしています。サポートするプロトコルの種類、暗号化強度に関する企業の方針、暗号化ソフトウェアの輸出に関する国内規制などの要因により、クライアント側とサーバー側とでサポートする暗号化方式群が異なる可能性もあります。SSL および TLS ハンドシェークプロトコルは、通信にどの暗号化方式群を使用するかについて、サーバーとクライアントがネゴシエーションする方法を決定します。
安全な接続が行われている間は、クライアントとサーバーは、両者で通信用に有効になっている最も強力な暗号化方式を利用します。SSL2、SSL3、TLS プロトコルのいずれかの暗号化方式を選択できます。
注
SSL バージョン 2.0 の後にセキュリティとパフォーマンスが改善されたため、クライアント側が SSL 3.0 をサポートしていない場合以外は SSL 2.0 を使うべきではありません。クライアント証明書は、SSL 2.0 暗号化方式での利用が保証されていません。
公開鍵と秘密鍵
サーバーの機密情報を保護するには、暗号化方式による暗号化プロセスだけでは十分ではありません。暗号化方式とキーを組み合わせて実際の暗号化結果を生成したり、すでに暗号化されている情報を復号化したりする必要があります。このとき、暗号化プロセスでは公開鍵と秘密鍵という 2 つのキーが使用されます。公開鍵を使って暗号化された情報を復号化できるのは、そのキーと関連づけられた秘密鍵だけです。公開鍵は証明書の一部として公開され、関連する秘密鍵だけが保護されています。
各種暗号化方式群の説明、およびキーと証明書の詳細については、次のサイトにある「Introduction to SSL」を参照してください。
http://docs.sun.com/db/prod/3802#hic
設定手順
基本的なセキュリティの設定手順は次のとおりです。
- 証明書をインストールします。
「証明書の管理」を参照してください。
- LDAP との暗号化通信を有効にします。
「LDAP との SSL 通信の有効化」を参照してください。
- セキュリティを有効にします。
「セキュリティの有効化」を参照してください。
- 暗号化プロトコルを有効にします。
「SSL と TLS の有効化」を参照してください。
- SSL 指令を使ってグローバルセキュリティを設定します。
暗号化に関するその他の管理タスクについては、「外部暗号化モジュールの使用」、「厳密な暗号化方式の設定」、および「クライアントによる SSL ファイルのキャッシングの防止」で説明します。
LDAP との SSL 通信の有効化サーバー証明書をインストールすると、Sun ONE Application Server で暗号化を有効にすることができます。LDAP データベースとの通信に SSL を使えるように、管理サーバーを直ちに設定することが重要です。
注
この項は、HTTP サーバーの機能だけに適用されます。ここで設定する LDAP との SSL 通信は、J2EE アプリケーションによる LDAP との通信とは関係ありません。J2EE による通信では、『Sun ONE Application Server 開発者ガイド』で説明しているように LDAP が使われます。
SSL を有効にするには、次の手順を実行します。
- 左のペインで、「App Server Instances (アプリケーションサーバーインスタンス)」にアクセスし、サーバーインスタンスを選択します。
- 左のペインで「Security (セキュリティ)」にアクセスします。
- 「Configure Directory Service (ディレクトリサービスの設定)」を選択します。
- 「Use Secure Sockets Layer (SSL) for connections (接続に Secure Sockets Layer (SSL) を使用)」のとなりの「Yes (はい)」をクリックします。
- 「Save Changes (保存)」をクリックします。
標準ポートへの切り替えを確認するメッセージが表示されます。
- SSL を有効にして LDAP に接続するポートを標準ポートに変更するときは、「OK (了解)」をクリックします。
- 左のペインで「App Server Instances (アプリケーションサーバーインスタンス)」にアクセスしてサーバーインスタンスを選択し、「Apply Changes (変更を適用)」をクリックします。
- サーバーを停止し、再起動して変更を適用します。
セキュリティの有効化その他のセキュリティ設定を行うには、事前にセキュリティを有効にする必要があります。次の各項では、セキュリティを有効にする方法について説明します。
HTTP リスナー作成時のセキュリティの有効化
新しい HTTP リスナーの作成時にセキュリティを有効にする手順は次のとおりです。
- 左のペインで、「App Server Instances (アプリケーションサーバーインスタンス)」にアクセスし、サーバーインスタンスを選択します。
- 左のペインで「HTTP Server (HTTP サーバー)」の「HTTP Listeners (HTTP リスナー)」にアクセスします。
「HTTP Listeners (HTTP リスナー)」ページが表示されます。
- 「New (新規)」をクリックします。
リスナーの設定ページが表示されます。
図 4-1 「HTTP Listeners (HTTP リスナー)」ページ
- 「SSL/TLS Settings (SSL/TLS 設定)」の下の「SSL/TLS Enabled (SSL/TLS を有効)」にチェックマークをつけてセキュリティを有効にします。
- 「Certificate Nickname (証明書のニックネーム)」リストから証明書を選択します。たとえば、「Server-Cert」を選択します。
- 新しい HTTP リスナーに関するその他の情報を入力します。フィールドに関する詳細情報は、オンラインヘルプを参照してください。
図 4-2 HTTP リスナーのセキュリティ情報
- 「OK (了解)」をクリックします。
- 左のペインで「App Server Instances (アプリケーションサーバーインスタンス)」にアクセスしてサーバーインスタンスを選択し、「Apply Changes (変更を適用)」をクリックします。
- サーバーを停止し、再起動して変更を適用します。
HTTP リスナー編集時のセキュリティの有効化
既存の HTTP リスナーの編集時にセキュリティを有効にする手順は次のとおりです。
- 左のペインで、「App Server Instances (アプリケーションサーバーインスタンス)」にアクセスし、サーバーインスタンスを選択します。
- 左のペインで「HTTP Server (HTTP サーバー)」の「HTTP Listeners (HTTP リスナー)」にアクセスします。
- リスナーを選択します。
「HTTP Listeners (HTTP リスナー)」設定ページが表示されます。
- 「SSL/TLS Settings (SSL/TLS 設定)」の下の「SSL/TLS Enabled (SSL/TLS を有効)」にチェックマークをつけます。
- 「Certificate Nickname (証明書のニックネーム)」リストから証明書を選択します。たとえば、「Server-Cert」を選択します。
- 「Save (保存)」をクリックします。
- 左のペインで「App Server Instances (アプリケーションサーバーインスタンス)」にアクセスしてサーバーインスタンスを選択し、「Apply Changes (変更を適用)」をクリックします。
- サーバーを停止し、再起動して変更を適用します。
SSL と TLS の有効化アプリケーションサーバーのセキュリティを保護するには、SSL2、SSL3、TLS 暗号化プロトコルを有効にし、各種暗号化方式群を選択して SSL を有効にする必要があります。
デフォルトの設定では、最も一般的に使われている暗号化方式群を利用できます。やむを得ない理由で特定の暗号化方式群を使わない場合を除き、すべての暗号化方式群を利用可能にすることをお勧めします。特定の暗号化方式群の詳細については、次のサイトにある「Introduction to SSL」を参照してください。
http://docs.sun.com/db/prod/3802#hic
警告
「No Encryption, only MD5 message authentication」を選択しないでください。クライアント側でその他の暗号化方式群を利用できない場合は、この設定がデフォルトとなり、暗号化は行われません。
SSL と TLS を有効にする前に、セキュリティを有効にし、少なくとも 1 つの証明書をインストールしておく必要があります。
SSL と TLS を有効にするには、次の手順を実行します。
- 左のペインで、「App Server Instances (アプリケーションサーバーインスタンス)」にアクセスし、サーバーインスタンスを選択します。
- 左のペインで「HTTP Server (HTTP サーバー)」の「HTTP Listeners (HTTP リスナー)」にアクセスします。
- HTTP リスナーを選択します。
「HTTP Listeners (HTTP リスナー)」設定ページが表示されます。
- 「SSL/TLS Settings (SSL/TLS 設定)」の下で、SSL と TLS に関連する適切なボックスにチェックマークをつけます (すべての暗号化方式も含まれます)。
- ロールバック用の設定を行います。
- 「Save (保存)」をクリックします。
- 左のペインで「App Server Instances (アプリケーションサーバーインスタンス)」にアクセスしてサーバーインスタンスを選択し、「Apply Changes (変更を適用)」をクリックします。
- サーバーを停止し、再起動して変更を適用します。
init.conf ファイルが自動的に修正され、セキュリティが有効になったことを示します。また、すべての仮想サーバーにはデフォルトのセキュリティパラメータが自動的に割り当てられます。
サーバーで SSL を有効にすると、URL の http が https に変わります。SSL が有効なサーバーに保存されているドキュメントの場所を示す URL は、次の形式で表されます。
次に例を示します。
グローバルなセキュリティ設定SSL が有効なサーバーをインストールすると、グローバルセキュリティパラメータ用の指令エントリが init.conf ファイルに作成されます。仮想サーバーのセキュリティ設定を適用するには、セキュリティを有効にする必要があります。server.xml ファイルの ssl 要素には、仮想サーバーの SSL プロパティがサーバーごとに記録されています。
Security 指令で SSL をグローバルに有効または無効にするには、サーバーインスタンスへの証明書を有効にします。有効にすると、証明書にアクセスする場合などに管理者パスワードが要求されます。
注
管理インタフェースを使用して安全な HTTP リスナーを作成する場合、セキュリティは自動的に init.conf ファイル内でグローバルに有効になります。server.xml ファイル内に安全な HTTP リスナーを手動で作成する場合は、init.conf ファイルを編集してセキュリティを有効にする必要があります。
次の各項では、グローバルなセキュリティ設定について説明します。
SSL 設定ファイル指令
セキュリティをグローバルに設定するには、init.conf ファイル内で次の SSL 設定ファイル指令に値を設定する必要があります。
SSLCacheEntries
キャッシュできる SSL のセッション数を指定します。上限はありません。
構文
SSLCacheEntries number
number が 0 の場合は、デフォルト値の 10000 が使用されます。
SSLClientAuthDataLimit
クライアント証明書のハンドシェークフェーズ時にバッファに入れるアプリケーションデータの最大数をバイト単位で指定します。デフォルト値は 1048576 (1M バイト) です。
SSLClientAuthTimeout
クライアント証明書のハンドシェークフェーズのタイムアウト時間を秒単位で指定します。デフォルト値は 60 です。
SSLSessionTimeout
SSL2 のセッションのキャッシングを制御します。
構文
SSLSessionTimeout seconds
seconds 値は、キャッシュされた SSL2 セッションが無効になるまでの秒数です。SSLSessionTimeout 指令が指定されている場合、この秒数の値は暗黙的に 5 〜 100 秒に制限されます。デフォルト値は 100 です。
SSL3SessionTimeout
SSL3 のセッションのキャッシングを制御します。
構文
SSL3SessionTimeout seconds
seconds 値は、キャッシュされた SSL3 セッションが無効になるまでの秒数です。デフォルト値は 86400 (24 時間) です。SSL3SessionTimeout 指令が指定されている場合、この秒数の値は暗黙的に 5 〜 86400 秒に制限されます。
SSL 指令の値の設定
SSL 設定ファイル指令の値を設定するには、次の手順を実行します。
- 左のペインで、「App Server Instances (アプリケーションサーバーインスタンス)」にアクセスし、サーバーインスタンスを選択します。
- 左のペインで「HTTP Server (HTTP サーバー)」の「HTTP Listeners (HTTP リスナー)」にアクセスします。
- HTTP リスナーを選択します。
「HTTP Listeners (HTTP リスナー)」設定ページが表示されます。
- 「SSL/TLS Settings (SSL/TLS 設定)」セクションの「SSL/TLS Enabled (SSL/TLS を有効)」ボックスにチェックマークをつけます。
- 「Certificate Nickname (証明書のニックネーム)」リストから証明書を選択します。たとえば、「Server-Cert」を選択します。
- 「Save (保存)」をクリックします。
- 左のペインで「HTTP Server (HTTP サーバー)」を選択します。
「HTTP Server (HTTP サーバー)」ページが表示されます。
- 「Advanced (詳細)」タブを選択します。
「Advanced (詳細)」設定ページが表示されます。
図 4-3 HTTP サーバーの「Advanced (詳細)」設定ページ
- 「SSL」リンクをクリックします。
SSL 指令の表が表示されます。
図 4-4 HTTP サーバーの「Advanced (詳細)」SSL 設定ページ
- 暗号化方式と値を選択します。
- 「OK (了解)」をクリックします。
- 左のペインで「App Server Instances (アプリケーションサーバーインスタンス)」にアクセスしてサーバーインスタンスを選択し、「Apply Changes (変更を適用)」をクリックします。
- サーバーを停止し、再起動して変更を適用します。
外部暗号化モジュールの使用Sun ONE Application Server は、スマートカードやトークンリングなど、外部の暗号化モジュールを使用する上で、PKCS (Public Key Cryptography Standard) #11、FIPS (Federal Information Processing Standards) 140 という 2 つの方式をサポートしています。
この節では次の項目について説明します。
PKCS11 モジュールのインストール
Sun ONE Application Server は、SSL と PKCS11 モジュールの間の通信で利用されるインタフェースを定義した PKCS (Public Key Cryptography Standard) #11 をサポートしています。PKCS11 モジュールは、SSL ハードウェアアクセラレータとの標準ベースの接続に使用されます。外部ハードウェアアクセラレータ用にインポートした証明書とキーは、PKCS11 モジュールのインストール時に生成される secmod.db ファイルに格納されます。
外部の証明書を使ったサーバーの起動
ハードウェアアクセラレータなど、外部の PKCS11 モジュールにサーバーの証明書をインストールしても、その証明書を使うように HTTP リスナーを設定するまでサーバーを起動できません。
サーバーは、常に Server-Cert という証明書を使って起動しようとします。しかし、外部 PKCS11 モジュール内の証明書には、識別子にモジュールのトークン名の 1 つが含まれています。たとえば、smartcard0 という外部スマートカードリーダーにインストールされているサーバー証明書は、smartcard0:Server-Cert という名前になります。
外部モジュールにインストールされている証明書を使ってサーバーを起動するには、証明書名を指定する必要があります。管理インタフェースを使って、使用するハードウェア暗号化モジュールの証明書を要求し、それをインストールします。
外部ハードウェアトークンにインストールした証明書は、証明書の管理ページに表示されますが、管理インタフェースには継承制限があるため、「HTTP Listener (HTTP リスナー)」ページには表示されません。
この時点で、コマンド行インタフェースを使って HTTP リスナーを編集し、SSL の証明書の選択、ポート番号の変更などを行います。
- HTTP リスナーを編集して証明書を選択します。
/sun/appserver7/bin/asadmin create-ssl
-user admin
-password netscape
-host qa280r-1.red.iplanet.com
-port 8888
-type http-listener
-certname nobody@apprealm:Server-Cert
-instance server1
-ssl3enabled=true
-ssl3tlsciphers +rsa_rc4_128_md5
http-listener-1外部証明書のニックネームを探すときは、証明書の管理ページに移動し、外部トークンのキーパスワードを入力します。nobody@apprealm:Server-Cert などの証明書名が表示されます。
- HTTP リスナーのセキュリティを有効にします。
/sun/appserver7/bin/asadmin set
-user admin
-password netscape
-host qa280r-1.red.iplanet.com
-port 8888
server1.http-listener.http-listener-1.securityEnabled=true- HTTP リスナーのポート番号を変更します。
/sun/appserver7/bin/asadmin set
-user admin
-password netscape
-host qa280r-1.red.iplanet.com
-port 8888
server1.http-listener.http-listener-1.port=443- ここまでの変更を適用します。
/sun/appserver7/bin/asadmin reconfig
-u admin
-w netscape
-H qa280r-1.red.iplanet.com
-p 8888
server1- サーバーを停止し、再起動して、SSL が有効な状態で HTTP リスナーが待機するようにします。
FIPS-140 標準の有効化
PKCS11 API は、暗号化処理を行うソフトウェアモジュールまたはハードウェアモジュールとの通信を有効にします。Sun ONE Application Server に PKCS11 をインストールすると、サーバーを FIPS (Federal Information Processing Standards) -140 互換に設定できます。
FIPS-140 を有効にするには、次の手順を実行します。
- FIPS-140 の指示に従ってプラグインをインストールします。
- 管理インタフェースの左のペインで、「App Server Instances (アプリケーションサーバーインスタンス)」にアクセスし、サーバーインスタンスを選択します。
- 左のペインで「HTTP Server (HTTP サーバー)」の「HTTP Listeners (HTTP リスナー)」にアクセスします。
- HTTP リスナーのリンクを選択します。
「HTTP Listeners (HTTP リスナー)」ページが表示されます。
- 「SSL/TLS Settings (SSL/TLS 設定)」セクションの「SSL/TLS Enabled (SSL/TLS を有効)」がチェックされていなければ、これにチェックマークをつけます。
- 「SSL3 Enabled (SSL3 を有効)」がチェックされていなければ、これにチェックマークをつけます。
- 「SSL/TSL Ciphers (SL3/TLS 暗号化方式)」のいずれかがチェックされていなければ、すべてにチェックマークをつけます。
- 「Save (保存)」をクリックします。
- 左のペインで「App Server Instances (アプリケーションサーバーインスタンス)」にアクセスしてサーバーインスタンスを選択し、「Apply Changes (変更を適用)」をクリックします。
- サーバーを停止し、再起動して変更を適用します。
厳密な暗号化方式の設定「Strong Ciphers (厳密な暗号化方式)」オプションを利用して、秘密鍵のサイズを「168 ビット以上」、「128 ビット以上」、「56 ビット以上」、または「制限なし」に設定できます。また、この指定した制限に合わない場合に表示されるファイルを指定することができます。ファイルを指定しない場合は、Sun ONE Application Server は「Forbidden (禁止)」状態を返します。
アクセスに必要なキーのサイズが現在の暗号化方式の設定と一致しない場合は、暗号化方式の秘密鍵のサイズを大きくする必要があることを示すメッセージが Sun ONE Application Server によって表示されます。
キーのサイズ制限の設定は、Service fn=key-toosmall ではなく、obj.conf ファイルの NSAPI PathCheck 指令で行われます。この指令は、次のように記述されています。
各変数の意味は次のとおりです。
SSL が有効でない、または secret-keysize パラメータが指定されていない場合は、PathCheck は REQ_NOACTION を返します。現在のセッションの秘密鍵のサイズが secret-keysize で指定した値を下回る場合、bong-file が指定されていないときは REQ_ABORTED が返され、状態は PROTOCOL_FORBIDDEN となります。指定されている場合は、REQ_PROCEED が返され、パス変数に bong-file filename が設定されます。また、キーサイズ制限に適合していない場合は、現在のセッションの SSL セッションキャッシュエントリは無効になり、次に同じクライアントがサーバーに接続したときに、完全な SSL ハンドシェークが行われます。
注
「Strong Ciphers (厳密な暗号化方式)」オプションは、PathCheck fn=ssl-check の追加時にオブジェクトから検索されるすべての Service fn=key-toosmall 指令を削除します。
「Strong Ciphers (厳密な暗号化方式)」オプションを使用するには、次の手順に従ってください。
- 左のペインで、「App Server Instances (アプリケーションサーバーインスタンス)」にアクセスし、サーバーインスタンスを選択します。
- 左のペインで「HTTP Server (HTTP サーバー)」にアクセスします。
- 「Virtual Servers (仮想サーバー)」を選択し、仮想サーバーをクリックします。
図 4-5 仮想サーバーの設定タブ
- 「HTTP/HTML」タブを選択し、「Strong Ciphers (厳密な暗号化方式)」リンクをクリックします。
「Enforce Strong Security Requirements (厳密なセキュリティ要求の実施)」ページが表示されます。
図 4-6 「Enforce Strong Security Requirements (厳密なセキュリティ要求の実施)」ページ
- 編集対象を選択します。
- 秘密鍵のサイズ制限を選択します。
- アクセス拒否時に使用するメッセージファイルの場所を入力します。
- 「OK (了解)」をクリックします。
- 左のペインで「App Server Instances (アプリケーションサーバーインスタンス)」にアクセスしてサーバーインスタンスを選択し、「Apply Changes (変更を適用)」をクリックします。
- サーバーを停止し、再起動して変更を適用します。
クライアントによる SSL ファイルのキャッシングの防止HTML ファイルの <HEAD> セクションに次の行を追加することで、事前に暗号化されたファイルがクライアントによってキャッシュされることを防止できます。