トップ 差分 一覧 カテゴリ ソース 検索 ヘルプ RSS ログイン

Java/keytool

INDEX

keytool - 鍵と証明書の管理ツール

鍵と証明書の作成などは、Sun Java SDK に付いてくる、keytool を使用する。

詳しくは、Java2 SDK ツールとユーティリティ の セキュリティツール「keytool - 鍵と証明書の管理ツール ( Linux / Win32 )」を参照のこと。

また、Java(JSSE)の実装に関しては、JDK5.0用 Java Secure Socket Extension (JSSE) リファレンスガイド などを参照のこと。

鍵の生成

keytoolコマンドで鍵を作る。コマンドは、${JAVA_HOME}/bin/ にあるはず。

keytool -genkey -alias tomcat -keystore keystore -storepass password
-genkey
キーペアを作成
-alias name
証明書・鍵をKeyStore内で識別する名前
-keystore filename
KeyStore のファイル名 (未指定のデフォルトは".keystore")
-storepass password
KeyStore のパスワード (未指定はコンソールで聞かれる)
-keypass password
キーのパスワード (未指定はコンソールで聞かれる)
-validity 180
証明書の有効日数 (未指定は90日で作成される)
-dname dname
証明書の所有者 (未指定はコンソールで聞かれる)

鍵の生成に必要な各種パラメータの入力を求められるので入力していく。内容は、名前,部署名,組織名,地域名(市区町村),地方名(都道府県),国名(日本はJP)。最後に鍵のパスワードの入力を聞かれるので入力してもいいが、KeyStoreのパスワードと同じでいい場合はRETURN(ENTER)を押す。KeyStoreが作成された時点で証明書も作成されている。

Tomcatなどで利用する場合、名前(CN)は、サーバのホスト名(FQDNが正しい?) を入力する。これがリクエストと一致しないと、不正なホストと判断される。

C:\WORK>keytool -genkey -alias tomcat -keystore keystore -storepass password
姓名を入力してください。
  [Unknown]:  localhost
組織単位名を入力してください。
  [Unknown]:  test CA Services
組織名を入力してください。
  [Unknown]:  test Project
都市名または地域名を入力してください。
  [Unknown]:  Chuo-ku
州名または地方名を入力してください。
  [Unknown]:  Tokyo
この単位に該当する 2 文字の国番号を入力してください。
  [Unknown]:  JP
CN=localhost, OU=test CA Services, O=Project, L=Chuo-ku, ST=Tokyo, C=JP でよろしいですか?
  [no]:  yes

<tomcat> の鍵パスワードを入力してください。
        (キーストアのパスワードと同じ場合は RETURN を押してください):

C:\WORK\>

以下のようにすると、コンソールで聞かれずに有効期限の長い(730日=2年)証明書が作成される。ちなみに、dnameの指定で名前にカンマ(,)が入る場合は、エスケープする。

C:\WORK>keytool -genkey -alias tomcat -keystore keystore -storepass password -keypass password -dname "CN=localhost, OU=test Project, O=test\, Inc., L=Chuo-ku, ST=Tokyo, C=JP" -validity 730

証明書の確認

同じくkeytoolコマンドで作成した鍵(証明書)の確認をしてみる。

keytool -list -v -keystore keystore -storepass password
-list
証明書エントリの確認
C:\WORK> keytool -list -v -keystore keystore -storepass password

キーストアのタイプ: jks
キーストアのプロバイダ: SUN

キーストアには 1 エントリが含まれます。

別名: tomcat
作成日: 2006/08/10
エントリのタイプ: keyEntry
証明連鎖の長さ: 1
証明書[1]:
所有者: CN=localhost, OU=test CA Services, O=test Project, L=Chuo-ku, ST=Tokyo, C=JP
実行者: CN=localhost, OU=test CA Services, O=test Project, L=Chuo-ku, ST=Tokyo, C=JP
シリアル番号: 44dabc3e
有効日: Thu Aug 10 13:55:26 JST 2006 有効期限: Wed Nov 08 13:55:26 JST 2006
証明書のフィンガープリント:
         MD5:  92:63:74:56:4E:BB:AA:74:2F:2E:D4:5E:ED:E1:D2:25
         SHA1: 0F:01:15:07:FD:C2:D4:0E:1E:AF:82:BA:F3:33:A4:A0:FF:CE:64:5D

*******************************************
*******************************************

C:\WORK>

証明書を獲得(CAを用いない方法)

CAを使用しない場合、KeyStoreに格納されている証明書を用いる。keytoolコマンドでKeyStoreの証明書をエクスポートする。

keytool -export -alias tomcat -keystore keystore -storepass password -file tomcat.cer
-export
証明書のエクスポート
C:\WORK>keytool -export -alias tomcat -keystore keystore -storepass password -file tomcat.cer
証明書がファイル <tomcat.cer> に保存されました。

証明書を獲得(CAを用いる方法)

手順としては、CSR(証明書要求)を作成し、CA(認証局)にCSRを提出して、CAの証明書を受け取る。

 CSR(証明書要求)の作成

CA(認証局)に提出するCSR(証明書要求)を作成する。

keytool -certreq -alias tomcat -keystore keystore -storepass password -file tomcat.csr
-certreq
CSRの作成
C:\WORK> keytool -certreq -alias tomcat -keystore keystore -storepass password -file tomcat.csr

C:\WORK>dir /b
keystore
tomcat.cer
tomcat.csr

C:\WORK>

 CAの証明書発行

作成したCSRをCAに提出・申請し証明書を発行してもらう。

テストなどで証明書を利用するなら、制限はあるがビートラステッド社やベリサイン社のトライアル証明書発行サービスなどが利用できる。詳しくは各サイトの説明を参照のこと。

証明書のインポート

入手した証明書をTrustStoreに格納する。

keytool -import -alias tomcat -keystore keystore -storepass password -file tomcat.cer
-import
証明書のインポート
C:\>keytool -import -alias tomcat -keystore keystore -storepass password -file C:\WORK\tomcat.cer
キーストアのパスワードを入力してください:  tomcat
所有者: CN=localhost, OU=test CA Services, O=test Project, L=Chuo-ku, ST=Tokyo, C=JP
実行者: CN=localhost, OU=test CA Services, O=test Project, L=Chuo-ku, ST=Tokyo, C=JP
シリアル番号: 44dabc3e
有効日: Thu Aug 10 13:55:26 JST 2006 有効期限: Wed Nov 08 13:55:26 JST 2006
証明書のフィンガープリント:
         MD5:  92:63:74:56:4E:BB:AA:74:2F:2E:D4:5E:ED:E1:D2:25
         SHA1: 0F:01:15:07:FD:C2:D4:0E:1E:AF:82:BA:F3:33:A4:A0:FF:CE:64:5D
この証明書を信頼しますか? [no]:  yes
証明書がキーストアに追加されました。

C:\>

証明書の削除

不要になったら、インポートした証明書を削除する。

keytool -delete -alias tomcat -keystore keystore -storepass password
-delete
証明書のインポート
C:\>keytool -delete -alias tomcat -keystore keystore -storepass password

C:\>

自己署名証明書の生成

「自己署名証明書」とは、発行者 (署名者) とプリンシパル (証明書によって認証される公開鍵を所有しているエンティティ) とが同一の証明書のことです。

keytool -selfcert -alias tomcat -keystore keystore -storepass password

デフォルトキーストア

ブラウザ等ならGUI操作で簡単にインストールできるが、Javaのプログラム(正確には、Javaの SSL通信クラス)は、SSL通信の際にデフォルトキーストアファイルを参照し、受信した証明書が含まれているか、発行元の認証局が存在するかで信頼できるか(信頼済みか)を判断する。よって、このキーストアにサーバの証明書をインポートすれば『信頼済み』の状態とすることが出来る。

デフォルトキーストアは、"%JAVA_HOME%/jre/lib/security/cacerts" で、パスワードは、"changeit" となる。

デフォルトキーストアの証明書一覧表示
keytool -list -v -storepass changeit -keystore \
 "%JAVA_HOME%/jre/lib/security/cacerts"

-alias を指定しないと、全て表示するのでいっぱい出ます…

デフォルトキーストアに証明書をインポート
keytool -import -storepass changeit -keystore \
 "%JAVA_HOME%/jre/lib/security/cacerts" \
 -alias localhost -file C:\WORK\localhost.cer
デフォルトキーストアから証明書をデリート
keytool -delete -storepass changeit -keystore \
 "%JAVA_HOME%/jre/lib/security/cacerts" \
 -alias localhost
デフォルトキーストアから証明書をエクスポート
keytool -export -storepass changeit -keystore \
 "%JAVA_HOME%/jre/lib/security/cacerts" \
 -alias localhost -file C:\WORK\localhost.cer

最終更新時間:2010年01月26日 16時56分05秒 指摘や意見などあればSandBoxのBBSへ。