Sun Java System Web Server 7.0 管理ガイド

第 6 章 証明書と鍵

この章では、証明書と鍵の認証を使用した、Sun Java System Web Server のセキュリティー保護について説明します。ここでは、データを保護し、侵入者をブロックし、正規ユーザーのアクセスを許可するように設計された、各種セキュリティー機能を有効にする方法について説明します。

この章を読む前に、公開鍵暗号方式の基本概念に慣れ親しんでおくべきです。具体的には、暗号化と復号化、公開鍵と非公開鍵、デジタル証明書、暗号化プロトコルなどの概念です。

証明書を使用した認証

認証とは、識別情報を確認するためのプロセスのことです。ネットワーク通信の文脈では、認証とは一方が他方を確信をもって特定することです。証明書は、認証をサポートする方法の 1 つです。

証明書は、個人、企業、またはその他の実体の名前を指定するデジタルデータで構成されており、証明書に含まれている公開鍵がその実体に属していることを証明します。クライアントとサーバーの両方が証明書を持つことができます。

証明書は、認証局つまり CA によって発行され、デジタル署名されます。CA は、インターネット経由で証明書を販売する企業の場合も、企業でイントラネットやエクストラネットの証明書の発行を担当する部門の場合もあります。他人の身元の証明者として十分に信頼できる CA はどれであるかを決定します。

証明書には、その証明書によって識別される実体の公開鍵と名前のほかに、有効期限、その証明書を発行した CA の名前、およびその発行元 CA の「デジタル署名」も含まれています。


注 –

暗号化機能を有効にするには、事前にサーバー証明書をインストールしておく必要があります。


サーバー認証

サーバー認証とは、クライアントがサーバーを確信をもって特定することであり、具体的には、ある特定のネットワークアドレスに存在しているサーバーの責任元と考えられる組織を確信をもって特定することです。

クライアントの認証

クライアント認証とは、サーバーがクライアントを確信をもって特定することであり、具体的には、クライアントソフトウェアを使用していると考えられる個人を確信をもって特定することです。クライアントは複数の証明書を持つことができますが、これはちょうど、個人が異なる ID をいくつか持つことができるのに似ています。

証明書のキーの種類

Sun Java System Web Server 7.0 では RSA キーに加え、ECC (Elliptic Curve Cryptography) のサポートが追加されました。

ECC は昨今、魅力的な公開鍵暗号系として台頭しつつあります。というのも、ECC は、RSA などの従来の暗号系と同等のセキュリティーをより小さなキーサイズで実現できるため、計算の高速化や電力消費の低下、メモリーや帯域幅の節約が図れるからです。ECC (Elliptic Curve Cryptography) は米国政府によって支持されました。

今回、証明書要求や自己署名付き証明書を RSA キー、ECC キーのどちらを使って生成するかを選択できるようになりました。

RSA キーの場合、さまざまなキーサイズを指定できます (キーサイズが大きいほど暗号化も強固になる。デフォルトのキーサイズは 1024)。ECC キーの場合、鍵ペア生成時に使用する曲線を選択すべきです。ANSI X9.62、NIST、SECG など、さまざまな組織によって多くの曲線に名前が付けられていますが、Sun Java System Web Server 7.0 は現在規定されているすべての曲線をサポートしています。

自己署名付き証明書を使用しないで CA の証明書を要求する場合には、必ず選択した CA にまず連絡をとり、ECC の使用法に関する最新情報を入手してください。自身のユースケースに推奨の ECC 曲線があるかどうかを尋ねてください。曲線の選択について、CA からも組織の内部ポリシーからも指針が得られない場合のために、推奨する曲線を次にいくつか列挙します。ただし、ECC は台頭しつつあるテクノロジであるため、特定のユースケースに推奨の曲線が、このマニュアルの執筆時点のものから変更される可能性もあります。

サポートされている ECC 曲線のいくつかを、次に列挙します。

prime256v1 

secp256r1 

nistp256 

secp256k1 

secp384r1 

nistp384 

secp521r1 

nistp521 

sect163k1 

nistk163 

sect163r1 

sect163r2 

nistb163 

sect193r1 

sect193r2 

sect233k1 

nistk233k1 

nistk233 

sect233r1 

nistb233 

sect239k1 

sect283k1 

nistk283 

sect283r1 

nistb283 

sect409k1 

nistk409 

sect571k1 

nistk571 

sect571r1 

nistb571 

secp160k1 

secp160r1 

secp160r2 

secp192k1 

secp192r1 

nistp192 

secp224k1 

secp224r1 

nistp224 

prime192v1 

自己署名付き証明書の作成

証明書に CA の署名が必要ない場合や、CA が証明書の署名処理を行っている最中に新しい SSL 実装をテストしたい場合、自己署名付き証明書を生成できます。この一時的な証明書を使用すると、「認証局が不明であり、信頼できない」という意味のエラーがクライアントのブラウザで発生します。

CLI 経由で自己署名付き証明書を作成するには、次のコマンドを実行します。


wadm> create-selfsigned-cert --user=admin --port=8989 --password-file=admin.pwd 
--config=config1 --token=internal --org-unit=org1 --locality=XYZ --state=DEF 
--validity=10 --org=sun --country=ABC --server-name=serverhost --nickname=cert1

CLI リファレンスの create-selfsigned-cert(1) を参照してください。

証明書の管理

証明書の要求

証明書は、個人、企業、またはその他の実体の名前を指定するデジタルデータで構成されており、証明書に含まれている公開鍵がその個人に属していることを証明します。SSL 対応のサーバーは証明書を持つ必要があり、クライアントはオプションで証明書を持つことができます。

証明書は、認証局つまり CA によって発行され、デジタル署名されます。CA は、インターネット経由で証明書を販売する企業の場合も、企業でイントラネットやエクストラネットの証明書の発行を担当する部門の場合もあります。他人の身元の証明者として十分に信頼できる CA はどれであるかを決定します。

証明書の要求を作成し、それを認証局 (CA) に提出できます。会社に独自の内部 CA がある場合には、そこから発行される証明書を要求します。商用 CA からの証明書購入を予定している場合には、CA を選定し、CA が必要とする情報の特定のフォーマットを入手してください。サーバーの自己署名付き証明書を作成することもできます。自己署名付き証明書は、インターネットとの接点を持つ配備には適しませんが、開発やテストには非常に役立ちます。なぜなら、CA を通さずにテストサーバーを設定できるからです。

前述したように、証明書には実体 (この場合は Web サーバー) の公開鍵が含まれています。公開鍵は、ある特定のアルゴリズム (このアルゴリズムのタイプも証明書内に復号化される) に基づいて生成されます。次の節では、Web Server でキー用にサポートされているアルゴリズムタイプの背景について説明します。

Procedure証明書を要求する

  1. 「サーバー証明書」タブ>「要求」ボタンをクリックします。

  2. 構成を選択します

    証明書をインストールする必要がある構成を、構成のリストから選択します。

  3. トークンを選択します

    キーを含むトークン (暗号化デバイス) を選択します。Sun Java System Web Server 7.0 によって維持されるローカルキーデータベース内にキーが格納されている場合には、「Internal」を選択します。スマートカードなど、外部のデバイスやエンジンにキーが格納されている場合には、その外部トークンの名前をドロップダウンリストボックスから選択します。選択されたトークンのパスワードを入力します。

  4. 詳細を入力します

    要求処理を開始する前に、CA が必要とする情報が明確になっているか確認してください。サーバー証明書を民間の CA、内部 CA のいずれに要求する場合でも、次の情報を提供する必要があります。

    • サーバー名: www.sun.com など、DNS 検索で使用される完全修飾ホスト名でなければいけません。これは、サイトへの接続時にブラウザが使用する URL に含まれるホスト名になります。これら 2 つの名前が一致しない場合、証明書の名前とサイトの名前が一致しないことがクライアントに通知され、証明書の信頼性が疑われることになります。

      内部 CA が発行する証明書を要求する場合には、このフィールドにワイルドカードや正規表現も入力できます。ほとんどのベンダーは、共通名にワイルドカードや正規表現が入力された証明書の要求を承認しません。

    • 組織: 企業、教育機関、提携先などの正式な法律上の名前です。CA の多くは、ここに入力された情報を、営業許可証の複写などの法的文書で確認することを要求します。

    • 組織単位: 省略可能なフィールドであり、企業内の組織を記述します。また、Inc.Corp. を省略するなど、より非公式な企業名をここに記載することもできます。

    • 地域: 省略可能なフィールドであり、通常は組織の市区町村を記述します。

    • 都道府県: 省略可能なフィールドです。

    • 国名: 国名を表す 2 文字の略号 (ISO 形式) です。米国の国コードは US です。

    これらすべての情報が、識別名 (DN) と呼ばれる一連の属性と値のペアとして結合され、その DN が証明書のサブジェクトとなります。

  5. 証明書オプションを選択します

    キー情報の入力を求められます。キーの種類としては、RSA または ECC を選択できます。キーの種類が RSA の場合、キーサイズは 1024、2048、または 4098 になります。キーの種類が ECC の場合は曲線も選択する必要があります。新しい鍵ペアの生成には時間がかかることに注意してください。キーの長さが長いほど、ウィザードでキーを生成する時間も長くなります。


    注意 – 注意 –

    キーの種類は、あとで署名要求を送る CA がサポートしている種類を必ず選択するようにしてください。


  6. 証明書タイプを選択します

    証明書の認証局 (CSA) を選択します (自己署名付き、CA 署名付きのいずれか)。自己署名付き証明書を選択する場合、証明書に HTTP リスナーを関連付けることもできます。このアクションをあとで実行することもできます。

  7. 要求を生成します

    CA 署名付き証明書の場合、生成された証明書要求が ASCII 形式で利用可能になります。自己署名付き証明書の場合、証明書は直接インストールされます。タイプが自己署名付きの場合、セキュア要求を処理するためのニックネーム、有効期間 (月)、および HTTP リスナー名の値を入力します。

  8. 結果を表示します

    このページには、選択したオプションの概要が表示されます。要求の生成を完了させるには、「完了」をクリックします。


    注 –

    CLI の使用

    CLI 経由で証明書を要求するには、次のコマンドを実行します。


    wadm> create-cert-request --user=admin --password-file=admin.pwd 
    --host=serverhost --port=8989 --config=config1 --server-name=servername.org 
    --org=sun --country=ABC --state=DEF --locality=XYZ --token=internal

    CLI リファレンスの create-cert-request(1) を参照してください。

証明書のインストール

CA から証明書を取得したら、管理コンソールを使ってその証明書をある構成用としてインストールできます。

Procedure証明書をインストールする

  1. 「サーバー証明書」タブ>「インストール」ボタンをクリックします。

  2. 構成を選択します

    証明書をインストールする必要がある構成を、構成のリストから選択します。

  3. トークンを選択します

    キーを含むトークン (暗号化デバイス) を選択します。Sun Java System Web Server 7.0 によって維持されるローカルキーデータベース内にキーが格納されている場合には、「Internal」を選択します。スマートカードなど、外部のデバイスやエンジンにキーが格納されている場合には、その外部トークンの名前をドロップダウンリストボックスから選択します。選択されたトークンのパスワードを入力します。

  4. 証明書のデータを入力します

    提供されたテキスト領域に、証明書のテキストをペーストします。テキストをコピーしてペーストするときは、必ず、開始と終了のハイフンを含む「Begin Certificate」および「End Certificate」というヘッダーを含めてください。「参照」ボタンをクリックし、.DER ファイルを手動で選択することもできます。

  5. 証明書の詳細を入力します

    証明書で使用されるニックネームを入力します。選択可能なリストから、セキュア要求を処理するための HTTP リスナーを選択します。

  6. 結果を表示します

    このページには、選択したオプションの概要が表示されます。インストール処理を完了させるには、「完了」をクリックします。


    注 –

    CLI の使用

    CLI 経由で証明書をインストールするには、次のコマンドを実行します。


    wadm> install-cert --user=admin --port=8989  --password-file=admin.pwd 
    --config=config1 --token=internal --cert-type=server --nickname=cert1 cert.req

    ここで、cert.req には証明書データが含まれています。

    CLI リファレンスの install-cert(1) を参照してください。


証明書の更新

次の手順に従えば、既存の証明書を更新できます。

Procedure証明書を更新する

  1. 「サーバー証明書」タブ>「証明書名」>「更新」ボタンをクリックします。

  2. トークン情報を入力します

    必要に応じてトークンのパスワードを入力します。それ以外の場合は、「次へ」をクリックして処理を続行します。

  3. 証明書の詳細を更新します

    証明書の詳細を確認し、有効期間を月数で入力します。

  4. キー情報を更新します

    キーの種類としては、RSA または ECC を選択できます。キーの種類が RSA の場合、キーサイズは 1024、2048、または 4098 になります。キーの種類が ECC の場合は曲線も選択する必要があります。新しい鍵ペアの生成には時間がかかることに注意してください。

  5. 概要を表示します

    このページには、選択したオプションの概要が表示されます。更新処理を完了させるには、「完了」をクリックします。

証明書の削除

構成を削除するには、次のタスクを実行します。

Procedure証明書を削除する

  1. 「サーバー証明書」タブをクリックします。

  2. 証明書を選択します

    証明書のリストから証明書名を選択します。

  3. 証明書を削除します

    選択した証明書を削除するには、「削除」ボタンをクリックします。


    注 –

    CLI の使用

    CLI 経由で証明書を削除するには、次のコマンドを実行します。


    wadm> delete-cert --user=admin --port=8989  --password-file=admin.pwd 
    --token=internal --config=config1 cert1

    CLI リファレンスの delete-cert(1) を参照してください。


管理サーバー証明書の更新

管理サーバー証明書を更新するには、renew-admin-certs CLI コマンドを実行します。このコマンドは、ニックネーム Admin-CA-Cert Admin-Server-Cert、および Admin-Client-Cert を含む管理サーバー証明書を更新する場合に使用します。このコマンドは、現在稼働している、更新後の証明書を使ってアクセス可能なノードの更新も行います。

このコマンドの実行後、新しい証明書が有効になるように、管理サーバーと各ノードを再起動することをお勧めします。証明書の更新中にオフラインになっていた (停止中であったか、ネットワークの問題でアクセス不能になっていた) ノードについては、登録し直す必要があります。管理サーバー証明書を更新するには、次のコマンドを実行します。


wadm> renew-admin-certs --user=admin --password-file=admin.pwd --host=serverhost 
--port=8989 --validity=120

CLI リファレンスの renew-admin-certs(1) を参照してください。

証明書失効リスト (CRL) の管理

証明書失効リスト (CRL) は、クライアントユーザー、サーバーユーザーのいずれかが今後信頼すべきでない証明書と鍵をすべて通知します。証明書の有効期限が切れる前にユーザーが事務所を変更したり、その組織を離れるような場合など、証明書のデータが変わった場合には、その証明書は無効になり、そのデータが CRL に表示されます。CRL は CA によって生成され、定期的に更新されます。

ProcedureCRL をインストールする

CA から取得された CRL をインストールするには、次の手順を実行します。

  1. CA から CRL をファイルとして取得します。

  2. 管理コンソールの構成のページに移動します。

  3. 「証明書」>「認証局」タブをクリックします。

  4. 「CRL をインストール」ボタンをクリックします。

  5. 関連ファイルへのフルパス名を入力します。

  6. [了解]をクリックします。


    注 –

    CRL がすでにデータベース内に存在している場合には、「証明書失効リストを置換」ページが表示されます。


  7. 「配備」をクリックしないと変更が有効にならない可能性があります。


    注 –

    CLI の使用

    CLI 経由で CRL をインストールするには、次のコマンドを実行します。


    wadm> install-crl --user=admin --password-file=admin.pwd 
    --host=serverhost --port=8989 --config=config1 data/install-crl/ServerSign.crl

    CLI リファレンスの install-crl(1) を参照してください。

ProcedureCRL を削除する

  1. 管理コンソールの構成のページに移動します。

  2. 「証明書」>「認証局」タブをクリックします。

  3. CRL エントリを選択し、「削除」をクリックします。

  4. 「配備」をクリックしないと変更が有効にならない可能性があります。


    注 –

    CLI の使用

    CLI 経由で CRL を削除するには、次のコマンドを実行します。


    wadm> delete-crl --user=admin --password-file=admin.pwd 
    --host=serverhost --port=8989 --config=config1 issuer

    CLI リファレンスの delete-crl(1) を参照してください。


内部トークンのパスワードの設定

内部 PKCS11 トークンのパスワードを設定するには、次のタスクを実行します。

Procedureトークンのパスワードを設定する

  1. 管理コンソールの構成のページに移動します。

  2. 「証明書」>「PKCS11 トークン」タブをクリックします。

  3. PKCS11 トークンの名前 (デフォルトは internal) をクリックします。

  4. 「トークンの状態」チェックボックスを選択します。

  5. パスワードの情報を入力します。

  6. インスタンス起動時にパスワードの入力を求められないようにするには、チェックボックス「インスタンス起動時に新規パスワードの入力を求めない」を選択します。「了解」をクリックします。

  7. パスワードが構成に保存されます。パスワードを削除するには、上記手順を実行し、「パスワードの設定解除」オプションを選択します。


    注 –

    CLI の使用

    CLI 経由で内部 PKCS11 トークンのパスワードを設定するには、次のコマンドを実行します。


    wadm> set-token-pin --user=admin --password-file=admin.pwd --host=serverhost 
    --port=8989 --config=config1 --token=internal

    CLI リファレンスの set-token-pin(1) を参照してください。

サーバーの SSL 設定

要求を生成し、その要求を CA に送信するには、コマンド create-cert-request を使用します。その後、CA から証明書を受け取ったら、その証明書を install-cert コマンドでインストールする必要があります。移行対象の鍵と証明書が Java キーストア内に存在している場合には、コマンド migrate-jks-keycert を使用します。開発/テストサーバーを設定するもっとも簡単な方法は、コマンド create-selfsigned-cert を使って自己署名付き証明書を生成することです。


wadm> create-selfsigned-cert --server-name=hostname --nickname=MyServerCert 
--token=internal

その他のオプションや例については、マニュアルページを確認してください。

証明書がインストールされたら、SSL を有効にするリスナーが、何らかのポート上で必要になります。


wadm> create-http-listener --user=admin --password-file=admin.pwd --host=serverhost 
--port=8989 --listener-port=18003 --config=config1 --server-name=config1.com 
--default-virtual-server-name=config1_vs_1 config1_ls_1

次に、このリスナーの SSL を有効にし、このリスナーに証明書のニックネームを関連付けます。


wadm> set-ssl-prop --http-listener=http-listener-ssl enabled=true
wadm> set-ssl-prop --http-listener=http-listener-ssl server-cert-nickname=MyServerCert

この設定が完了したら、構成を配備し、インスタンスを起動します。


wadm> deploy-config config_name
wadm> start-instance --config config_name hostname

構成の SSL 暗号化方式の有効化

構成の SSL 暗号化方式を有効にするには、次のコマンドを実行します。


wadm> enable-ciphers --user=admin --password-file=admin.pwd --host=serverhost 
--port=8989 --config=config1 --http-listener=http-listener-1 
--cipher-type=ssl2 SSL_RC4_128_WITH_MD5

CLI リファレンスの enable-ciphers(1) を参照してください。

HTTP リスナーのセキュリティーの有効化


注 –

HTTP リスナーのセキュリティーを有効にできるのは、利用可能なインストール済み証明書が存在する場合だけです。


証明書を入手したら、その証明書を HTTP リスナーに関連付け、サーバーをセキュリティー保護することができます。

暗号化とは、情報を対象とした受信者以外の人が読めないような内容にするための、変換プロセスのことです。復号化とは、暗号化された情報を判読可能な状態に戻すための、変換プロセスのことです。Sun Java System Web Server には、SSL および TLS プロトコルのサポートが含まれています。

暗号化方式とは、暗号化または復号化に使用される暗号化アルゴリズム (数学関数) のことです。SSL と TLS プロトコルには、多数の暗号化方式のセットが含まれています。安全度は、暗号化方式によって異なります。一般に、暗号化方式が使用するビット数が多くなるほど、データの復号化が難しくなります。

任意の双方向の暗号化処理では、両者が同じ暗号化方式を使用する必要があります。多数の暗号化方式が利用可能であるため、使用頻度のもっとも高い暗号化方式をサーバーで有効にする必要があります。

セキュリティー保護された接続時には、クライアントとサーバーは、通信に、その双方が持てる最も強力な暗号化方式を使用します。SSL2、 SSL3、および TLS プロトコルから暗号化方式を選択できます。


注 –

SSL バージョン 2.0 のあとでセキュリティーとパフォーマンスが改善されたため、SSL 3 を使用できないクライアントを使用するのでないかぎり、SSL 2 を使用すべきではありません。クライアント証明書は、SSL 2 暗号化方式との組み合わせで正しく動作することが保証されていません。


暗号化プロセスだけでは、サーバーの機密情報のセキュリティー保護には十分ではありません。実際に暗号化結果を生成したり、すでに暗号化された情報を復号化するためには、暗号化方式と一緒に鍵を使用する必要があります。暗号化処理では、2 つの鍵を使ってこの結果が実現されます。これが、公開鍵と非公開鍵です。公開鍵を使用して暗号化された情報は、対応する非公開鍵を使用した場合にのみ復号化できます。公開鍵は証明書の一部として発行されます。保護されるのは、関連付けられた非公開鍵だけです。

Sun Java System Web Server は暗号化通信用として、Secure Sockets Layer (SSL) および Transport Layer Security (TLS) プロトコルをサポートします。SSL と TLS はアプリケーションに依存しないため、それらの上に上位レベルのプロトコル層を透過的に配置できます。

SSL および TLS プロトコルは、サーバーとクライアントでお互いを認証するために使用される多くの暗号化方式のサポート、証明書の送信、およびセッション鍵の確立を行います。クライアントとサーバーは、サポートしているプロトコルや、暗号化の強度についての会社の方針および暗号化されたソフトウェアの輸出に対する行政上の制約条件などの要因に基づいて、別の暗号化方式セットをサポートすることができます。他の機能の中でも特に、SSL と TLS ハンドシェイクプロトコルは、どの暗号化方式のセットを通信に使用するかをサーバーとクライアントが交渉する方法を決定します。

HTTP リスナーのセキュリティー設定を編集するには、「構成」>「HTTP リスナー」>「SSL」タブをクリックします。次の表に、このページで設定可能なプロパティーの一覧を示します。

表 6–1 HTTP リスナーのセキュリティープロパティー

プロパティー

説明

名前

HTTP リスナーの名前。 

セキュリティー

選択された HTTP リスナーのセキュリティーを有効化/無効化します。 

証明書

利用可能な証明書からサーバー証明書を選択します。このアクションを実行するには、RSA または ECC 証明書がインストール済みになっているべきです。 

クライアント認証

クライアント認証を必須、省略可能のいずれにするかを指定します。クライアント認証を無効にするには、「無効」オプションを選択します。 

認証タイムアウト

このタイムアウト後に、クライアント認証のハンドシェークが失敗します。[0.001–3600]。デフォルト値は 60 秒です。

認証データの最大値

バッファーに格納する認証データの最大量。[0–2147.0483647.0]。デフォルト値は 104857.06 です。

SSL バージョン 2/バージョン 3

SSL バージョン 2、SSL バージョン 3 を有効化/無効化します。 

TLS

TLS を有効化/無効化します。「バージョンロールバックを検出」はデフォルトで有効になっています。「有効」に設定すると、人が介在するバージョンロールバック攻撃を検出するようにサーバーが設定されます。TLS の仕様を間違って実装している一部のクライアントとの相互運用性を確保するためには、これを無効にしなければいけない可能性があります。

SSL3/SSL2/TLS 暗号化方式

Web サーバーのセキュリティーを保護するには、SSL を有効にすることをお勧めします。SSL 2.0、SSL 3.0、および TLS 暗号化プロトコルを有効にし、さまざまな暗号化方式群を選択することができます。管理サーバーの待機ソケットで、SSL および TLS を有効にできます。

デフォルト設定では、使用頻度のもっとも高い暗号化方式が有効になります。特定の暗号化方式群を使用したくない特別な理由がないかぎり、それらすべてを有効にすべきです。