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に提出・申請し証明書を発行してもらう。
テストなどで証明書を利用するなら、制限はあるがビートラステッド社やベリサイン社のトライアル証明書発行サービスなどが利用できる。詳しくは各サイトの説明を参照のこと。
- ベリサイン社 無料テスト用サーバID
- http://www.verisign.co.jp/server/trialserver/index.html
- 有効期間14日, 要テスト用ルート証明書
- ビートラステッド・ジャパン社 無料トライアルSSLサーバ証明書
- http://www.betrusted.co.jp/SureServer/trial/index.html
- 有効期間30日間, 要トライアルルート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へ。