Sun Java System Application Server Enterprise Edition 8.1 2005Q2 管理ガイド

- Previous: コネクタ接続プールに関する管理コンソールタスク
- Next: 詳細情報

# 証明書と SSL の操作

- 「証明書ファイルについて」

- 「証明書ファイルの場所を変更する」

- 「JSSE (Java Secure Socket Extension) ツールの使用」

- 「NSS (Network Security Services) ツールの使用」

## 証明書ファイルについて

Application Server をインストールすると、内部テストに適した NSS (Network Security Services) 形式のデジタル証明書が生成されます。デフォルトでは、Application Server は domain-dir`/config` ディレクトリの 証明書データベースに、証明書情報を格納します。

- キーストアファイル。`key3.db` には、非公開鍵を含む Application Server の証明 書が格納されます。キーストアファイルはパスワードで保護されます。パスワードを変更するには、`asadmin change-master-password` コマンドを使用します。`certutil` の詳細については、「`certutil` ユーティリティーの使用」を参照してください。

  各キーストアエントリには一意のエイリアスがあります。インストール後の Application Server キーストア内には、エイリアス `s1as` を持つ単一のエントリが含まれています。

- トラストストアファイル。`cert8.db` には、ほかのエンティティーの公開鍵を含 む Application Server の信頼できる証明書が格納されます。信頼できる証明書では、サーバーは証明書の公開鍵が証明書の所有者に属していることを確認しています。信頼できる証明書には、通常、証明書発行局 (CA) の証明書も含まれています。

  Platform Edition では、サーバー側で、Application Server は `keytool` を使用して証明書とキーストアを管理する JSSE 形式を使用します。Enterprise Edition では、サーバー側で、Application Server は `certutil` を使用して非公開鍵と証明書を格納する NSS データベースを管理する NSS を使用します。これらの両方の Edition で、クライアントサイド (アプリケーションクライアントまたはスタンドアロン) では、JSSE 形式を使用します。

  デフォルトで、Application Server は、サンプルアプリケーションで開発目的のために動作するキーストアおよびトラストストアを使用して設定されています。本稼動環境のために、証明書エイリアスを変更し、トラストストアにほかの証明書を追加し、キーストアおよびトラストストアファイルの名前と場所を変更する必要が生ずる可能性があります。

### 証明書ファイルの場所を変更する

開発用として提供されているキーストアファイルとトラストストアファイルは、domain-dir`/config` ディレクトリに格納されています。

##### 手順

1. 管理コンソール ツリーコンポーネントで、「設定」ノードを展開します。

2. 「server-config (管理設定)」ノードを展開します。

3. 「JVM 設定」 ノードを選択します。

4. 「JVM オプション」タブをクリックします。

5. 「JVM オプション」ページで、「値」フィールドの次の値を追加または変更して、証明書ファイルの新しい場所を反映させます。

       -Dcom.sun.appserv.nss.db=${com.sun.aas.instanceRoot}/NSS-database-directory

   ここで、NSS-database-directory は NSS データベースの場所です。

6. 「保存」をクリックします。

7. コンソールに「再起動が必要です」と表示される場合は、Application Server を再起動します。

## JSSE (Java Secure Socket Extension) ツールの使用

`keytool` を使用して、JSSE (Java Secure Socket Extension) デジタル証明書を設定および操作します。Platform Edition の場合、Application Server はサーバー側で、JSSE 形式を使って証明書とキーストアを管理します。Platform Edition、Enterprise Edition のどちらの場合も、クライアント側 (アプリケーションクライアントまたはスタンドアロン) では JSSE 形式が使用されます。

J2SE SDK に同梱されている `keytool` を使用すれば、管理者は、公開鍵と非公開鍵のペアおよび関連する証明書を管理できます。さらに、ユーザーは、通信接続先の公開鍵を証明書の形式でキャッシュできます。

`keytool` を実行するには、J2SE の `/bin` ディレクトリがパスの中に設定されているか、またはツールへのフルパスがコマンド行に存在するように、シェルの環境を設定する必要があります。`keytool` の詳細については、`keytool` のドキュメント (`http://java.sun.com/j2se/1.5.0/docs/tooldocs/solaris/keytool.html`) を参照してください。

### keytool ユーティリティーの使用

次の例は、JSSE ツールによる証明書処理に関する使用方法を示したものです。

- RSA 鍵アルゴリズムを使ってタイプ JKS のキーストア内に自己署名付き証明書を作成する。RSA は RSA Data Security, Inc. が開発した公開鍵暗号化技術です。この略語は、この技術の開発者である Rivest、Shamir、および Adelman を表しています。

      keytool  -genkey -noprompt -trustcacerts -keyalg RSA -alias ${cert.alias}
      -dname  ${dn.name} -keypass ${key.pass} -keystore ${keystore.file}
      -storepass ${keystore.pass}

  証明書を作成する別の例については、「`keytool` ユーティリティーを使って証明書を生成する」を参照してください。

- デフォルトの鍵アルゴリズムを使ってタイプ JKS のキーストア内に自己署名付き証明書を作成する。

      keytool -genkey -noprompt -trustcacerts -alias ${cert.alias} -dname
      ${dn.name} -keypass ${key.pass} -keystore ${keystore.file} -storepass
      ${keystore.pass}

  証明書に署名する例については、「`keytool` ユーティリティーを使ってデジタル証明書に署名する」を参照してください。

- タイプ JKS のキーストアで利用可能な証明書を表示する。

      keytool -list -v  -keystore ${keystore.file} -storepass ${keystore.pass}

- タイプ JKS のキーストア内の証明書情報を表示する。

      keytool  -list -v  -alias ${cert.alias} -keystore ${keystore.file}
      -storepass ${keystore.pass}

- RFC/テキスト形式の証明書を JKS ストア内にインポートする。証明書は、バイナリエンコーディングではなく、Internet RFC (Request for Comments) 1421 標準によって定義された印刷可能なエンコーディング形式を使って格納されることがしばしばあります。Base 64 エンコーディングとしても知られるこの証明書形式を使用すれば、電子メールなどの機構を使って証明書をほかのアプリケーションにエクスポートしやすくなります。

      keytool -import -noprompt -trustcacerts -alias ${cert.alias} -file
      ${cert.file} -keystore ${keystore.file} -storepass ${keystore.pass}

- タイプ JKS のキーストア内の証明書を PKCS7 形式でエクスポートする。「Public Key Cryptography Standards #7, Cryptographic Message Syntax Standard」によって定義された応答形式には、発行される証明書に加え、それをサポートする証明書チェーンも含まれます。

      keytool  -export -noprompt  -alias ${cert.alias} -file ${cert.file}
      -keystore ${keystore.file} -storepass ${keystore.pass}

- タイプ JKS のキーストア内の証明書を RFC/テキスト形式でエクスポートする。

      keytool  -export -noprompt -rfc  -alias ${cert.alias} -file
      ${cert.file} -keystore ${keystore.file} -storepass ${keystore.pass}

- タイプ JKS のキーストアから証明書を削除する。

      keytool  -delete -noprompt -alias ${cert.alias}  -keystore ${keystore.file}
      -storepass ${keystore.pass}

  キーストアから証明書を削除する別の例については、「`keytool` ユーティリティーを使って証明書を削除する」を参照してください。

### `keytool` ユーティリティーを使って証明書を生成する

`keytool` を使用して証明書の生成、インポート、およびエクスポートを行います。デフォルトでは、`keytool` は実行元のディレクトリにキーストアファイルを作成します。

##### 手順

1. 証明書を実行すべきディレクトリに移動します。

   証明書の生成は常に、キーストアファイルとトラストストアファイルが格納されたディレクトリ (デフォルトでは domain-dir`/config`) 内で行います。これらのファイルの場所を変更する方法については、「証明書ファイルの場所を変更する」を参照してください。

2. 次の `keytool` コマンドを入力することで、キーストアファイル `keystore.jks` 内に証明書を生成します。

       keytool -genkey -alias keyAlias-keyalg RSA
        -keypass changeit
        -storepass changeit
       -keystore keystore.jks

   keyAlias には任意の一意名を指定します。キーストアまたは非公開鍵のパスワードをデフォルト以外の値に変更した場合には、前述のコマンドの `changeit` をその新しいパスワードで置き換えてください。

   プロンプトが表示され、`keytool` が証明書の生成に使用するユーザーの名前、組織、およびその他の情報の入力を求められます。

3. 次の `keytool` コマンドを入力することで、生成された証明書をファイル `server.cer` (または `client.cer` でもよい) にエクスポートします。

       keytool -export -alias keyAlias-storepass changeit
        -file server.cer
        -keystore keystore.jks

4. 認証局によって署名された証明書が必要な場合は、「`keytool` ユーティリティーを使ってデジタル証明書に署名する」を参照してください。

5. トラストストアファイル `cacerts.jks` を作成し、そのトラストストアに証明書を追加するには、次の `keytool` コマンドを入力します。

       keytool -import -v -trustcacerts
       -alias keyAlias
        -file server.cer
       -keystore cacerts.jks
        -keypass changeit

   キーストアまたは非公開鍵のパスワードをデフォルト以外の値に変更した場合には、前述のコマンドの `changeit` をその新しいパスワードで置き換えてください。

   このツールは、証明書に関する情報を表示し、その証明書を信頼するかどうかをユーザーに尋ねます。

6. `yes` と入力し、続いて Enter キーを押します。

   すると、`keytool` から次のようなメッセージが表示されます。

       Certificate was added to keystore
       [Saving cacerts.jks]

7. Application Server を再起動します。

### `keytool` ユーティリティーを使ってデジタル証明書に署名する

デジタル証明書の作成後、所有者はそれに署名して偽造を防止する必要があります。E コマースのサイト、または ID の認証が重要であるサイトは、既知の証明書発行局 (CA) から証明書を購入できます。認証に心配がない場合、たとえば、非公開のセキュアな通信だけが必要な場合などは、CA 証明書の取得に必要な時間と費用を節約して、自己署名付き証明書を使用してください。

##### 手順

1. 証明書の鍵のペアを生成するため、CA の Web サイトの指示に従います。

2. 生成された証明書の鍵のペアをダウンロードします。

   キーストアファイルとトラストストアファイルが格納されたディレクトリ (デフォルトでは domain-dir`/config` ディレクトリ) 内に、証明書を保存します。「証明書ファイルの場所を変更する」を参照してください。

3. 使用しているシェルで、証明書を含むディレクトリに変更します。

4. `keytool` を使用して、証明書をローカルのキーストア、および必要に応じてローカルのトラストストアにインポートします。

       keytool -import -v -trustcacerts
       -alias keyAlias
        -file server.cer
       -keystore cacerts.jks
        -keypass changeit
       -storepass changeit

   キーストアまたは非公開鍵のパスワードがデフォルト以外の値である場合には、前述のコマンドの `changeit` をその新しいパスワードで置き換えてください。

5. Application Server を再起動します。

### `keytool` ユーティリティーを使って証明書を削除する

既存の証明書を削除するには、`keytool -delete` コマンドを使用します。次に例を示します。

    keytool -delete
     -alias keyAlias
     -keystore keystore-name
     -storepass password

`-delete` コマンドで利用可能なオプションの完全な一覧については、`http://java.sun.com/j2se/1.5.0/docs/tooldocs/solaris/keytool.html` の `keytool` ドキュメントを参照してください。

## NSS (Network Security Services) ツールの使用

Enterprise Edition の場合、サーバー側では、NSS (Network Security Services) デジタル証明書を使って非公開鍵と証明書を格納するデータベースを管理します。クライアント側 (アプリケーションクライアントまたはスタンドアロン) では、「JSSE (Java Secure Socket Extension) ツールの使用」で説明した JSSE 形式を使用します。

NSS (Network Security Services) を使ってセキュリティーを管理するためのツールは、次のとおりです。

- `certutil`。証明書および鍵データベースの管理に使用されるコマンド行ユーティリティー。`certutil` ユーティリティーの使用例については、「`certutil` ユーティリティーの使用」を参照してください。

- `pk12util`。証明書または鍵データベースと PKCS12 形式のファイル間における鍵と証明書のインポートおよびエクスポートに使用されるコマンド行ユーティリティー。`pk12util` ユーティリティーの使用例については、「`pk12util` ユーティリティーによる証明書のインポートとエクスポート」を参照してください。

- `modutil`。`secmod.db` ファイル内またはハードウェアトークン内の PKCS #11 モジュール情報を管理するためのコマンド行ユーティリティー。`modutil` ユーティリティーの使用例については、「`modutil` による PKCS11 モジュールの追加と削除」を参照してください。

これらのツールは install-dir`/lib/` ディレクトリに格納されています。NSS セキュリティーツールの場所を指し示すために、次の各環境変数が使用されます。

- `LD_LIBRARY_PATH =${`install-dir`}/lib`

- `${`os.nss.path`}`

例に含まれる証明書の共通名 (CN) は、クライアントまたはサーバーの名前です。また、この CN は、SSL ハンドシェーク中に証明書の名前とその証明書の生成元であるホスト名とを比較する目的でも使用されます。SSL ハンドシェーク中に証明書名とホスト名が一致しなかった場合、警告または例外が生成されます。いくつかの例では便宜上、証明書の共通名 `CN=localhost` が使用されていますが、これは、すべてのユーザーが、実際のホスト名に基づいて新しい証明書を作成することなしにその証明書を使用できるようにするためです。

次の各節の例は、NSS ツールによる証明書処理に関する使用方法を示したものです。

- 「`certutil` ユーティリティーの使用」

- 「`pk12util` ユーティリティーによる証明書のインポートとエクスポート」

- 「`modutil` による PKCS11 モジュールの追加と削除」

### `certutil` ユーティリティーの使用

証明書データベースツールの `certutil` は、Netscape Communicator の `cert8.db` および `key3.db` データベースファイルを作成し、変更することができる NSS コマンド行ユーティリティーです。このユーティリティーは、`cert8.db` ファイルで、証明書の一覧表示、生成、変更、または削除を行い、`key3.db` ファイルで、パスワードの作成または変更、新しい公開鍵と非公開鍵のペアの生成、鍵データベースのコンテンツの表示、または鍵のペアの削除を行うこともできます。

通常、鍵と証明書の管理プロセスは鍵データベース内の鍵の作成から始まり、証明書データベース内の証明書の生成と管理に続きます。次のドキュメントでは、`certutil` ユーティリティーの構文を含む、NSS による証明書および鍵データベースの管理について説明しています。`http://www.mozilla.org/projects/security/pki/nss/tools/certutil.html`。

次の箇条書きの各項目は、NSS および JSSE セキュリティーツールを使って証明書の作成または管理、あるいはその両方を行う例を示したものです。

- 自己署名付きのサーバー証明書およびクライアント証明書を生成する。この例では、CN は `hostname.domain.[com|org|net|...]` の形式でなければなりません。

  この例では、domain-dir`/config` です。`serverseed.txt` ファイルと `clientseed.txt` ファイルには、任意のランダムテキストを含めることができます。このランダムテキストは、鍵ペア生成時に使用されます。

      certutil -S -n $SERVER_CERT_NAME -x -t "u,u,u"
       -s "CN=$HOSTNAME.$HOSTDOMAIN, OU=Java Software, O=Sun Microsystems Inc.,
          L=Santa Clara, ST=CA, C=US"
       -m 25001 -o  $CERT_DB_DIR/Server.crt
       -d $CERT_DB_DIR -f passfile <$CERT_UTIL_DIR/serverseed.txt

  クライアント証明書を生成する。この証明書も自己署名付き証明書です。

      certutil -S -n $CLIENT_CERT_NAME  -x -t "u,u,u"
       -s "CN=MyClient, OU=Java Software, O=Sun Microsystems Inc.,
          L=Santa Clara, ST=CA, C=US"
       -m 25002 -o  $CERT_DB_DIR/Client.crt
       -d $CERT_DB_DIR -f passfile <$CERT_UTIL_DIR/clientseed.txt

- 前述の項目で生成された証明書を検証する。

      certutil -V -u V -n $SERVER_CERT_NAME -d  $CERT_DB_DIR
      certutil -V -u C -n $CLIENT_CERT_NAME -d  $CERT_DB_DIR

- 利用可能な証明書を表示する。

      certutil -L -d  $CERT_DB_DIR

- RFC テキスト形式の証明書を NSS 証明書データベースにインポートする。

      certutil -A -a -n ${cert.nickname} -t ${cert.trust.options}
      -f ${pass.file} -i ${cert.rfc.file}
      -d ${admin.domain.dir}/${admin.domain}/config

- NSS 証明書データベース内の証明書を RFC 形式でエクスポートする。

      certutil -L -a -n ${cert.nickname} -f ${pass.file}
      -d ${admin.domain.dir}/${admin.domain}/config > cert.rfc

- NSS 証明書データベースから証明書を削除する。

      certutil -D -n ${cert.nickname} -f ${pass.file}
      -d ${admin.domain.dir}/${admin.domain}/config

- 証明書を NSS データベースから JKS 形式に移動する。

      certutil -L -a -n ${cert.nickname}
      -d ${admin.domain.dir}/${admin.domain}/config > cert.rfc
      keytool  -import -noprompt -trustcacerts -keystore ${keystore.file}
      -storepass ${keystore.pass} -alias ${cert.alias} -file cert.rfc

### `pk12util` ユーティリティーによる証明書のインポートとエクスポート

証明書または鍵データベースと PKCS12 形式のファイル間における鍵と証明書のインポートおよびエクスポートに使用されるコマンド行ユーティリティーは、`pk12util` です。PKCS12 は、「Public-Key Cryptography Standards (PKCS) #12, Personal Information Exchange Syntax Standard」です。`pk12util` ユーティリティーの詳細については、`http://www.mozilla.org/projects/security/pki/nss/tools/pk12util.html` を参照してください。

- PKCS12 形式の証明書を NSS 証明書データベースにインポートする。

      pk12util -i ${cert.pkcs12.file} -k ${certdb.pass.file}
      -w ${cert.pass.file} -d ${admin.domain.dir}/${admin.domain}/config

- PKCS12 形式の証明書を NSS 証明書データベーストークンモジュールにインポートする。

      pk12util -i ${cert.pkcs12.file} -h ${token.name} -k ${certdb.pass.file}
      -w ${cert.pass.file} -d ${admin.domain.dir}/${admin.domain}/config

- NSS 証明書データベース内の証明書を PKCS12 形式でエクスポートする。

      pk12util -o -n ${cert.nickname} -k ${pass.file} -w${cert.pass.file}
      -d ${admin.domain.dir}/${admin.domain}/config

- NSS 証明書データベーストークンモジュール内の証明書を PKCS12 形式でエクスポートする (ハードウェアアクセラレータ構成で有用)。

      pk12util -o -n ${cert.nickname} -h ${token.name} -k ${pass.file}
      -w ${cert.pass.file} -d ${admin.domain.dir}/${admin.domain}/config

- PKCS12 証明書を JKS 形式に変換する (Java ソースが必要)。

      <target name="convert-pkcs12-to-jks" depends="init-common">
         <delete file="${jks.file}" failonerror="false"/>
         <java classname="com.sun.enterprise.security.KeyTool">
            <arg line="-pkcs12"/>
            <arg line="-pkcsFile ${pkcs12.file}"/>
            <arg line="-pkcsKeyStorePass ${pkcs12.pass}"/>
            <arg line="-pkcsKeyPass ${pkcs12.pass}"/>
            <arg line="-jksFile ${jks.file}"/>
            <arg line="-jksKeyStorePass ${jks.pass}"/>
            <classpath>
               <pathelement path="${s1as.classpath}"/>
               <pathelement path="${env.JAVA_HOME}/jre/lib/jsse.jar"/>
            </classpath>
         </java>
      </target>

### `modutil` による PKCS11 モジュールの追加と削除

「セキュリティーモジュールデータベースツール」である `modutil` は、`secmod.db` ファイル内またはハードウェアトークン内の PKCS #11 (Cryptographic Token Interface Standard) モジュール情報を管理するためのコマンド行ユーティリティーです。このツールを使用すれば、PKCS #11 モジュールの追加と削除、パスワードの変更、デフォルトの設定、モジュールの内容表示、スロットの有効化または無効化、FIPS-140-1 準拠の有効化または無効化、および暗号化操作用デフォルトプロバイダの割り当てを行えます。また、このツールを使用すれば、`key3.db`、`cert7.db`、および `secmod.db` セキュリティーデータベースファイルを作成することもできます。このツールの詳細については、`http://www.mozilla.org/projects/security/pki/nss/tools/modutil.html` を参照してください。

- 新しい PKCS11 モジュールまたはトークンを追加する。

      modutil -add ${token.module.name} -nocertdb -force -mechanisms RSA:DSA:RC4:DES
      -libfile ${SCA.lib.path} -dbdir ${admin.domain.dir}/${admin.domain}/config

- NSS ストアから PKCS11 モジュールを削除する。

      modutil -delete ${token.module.name} -nocertdb -force -mechanisms RSA:DSA:RC4:DES
      -libfile ${SCA.lib.path} -dbdir ${admin.domain.dir}/${admin.domain}/config

- NSS ストア内で利用可能なトークンモジュールを一覧表示する。

      modutil -list  -dbdir ${admin.domain.dir}/${admin.domain}/config

- Previous: コネクタ接続プールに関する管理コンソールタスク
- Next: 詳細情報

- © 2010, Oracle Corporation and/or its affiliates