!!!keytool - 鍵と証明書の管理ツール {{category Java,nolink}}鍵と証明書の作成などは、Sun Java SDK に付いてくる、keytool を使用する。 詳しくは、[Java2 SDK ツールとユーティリティ|http://java.sun.com/j2se/1.4/ja/docs/ja/tooldocs/tools.html] の セキュリティツール「keytool - 鍵と証明書の管理ツール ( [Linux|http://java.sun.com/j2se/1.4/ja/docs/ja/tooldocs/solaris/keytool.html] / [Win32|http://java.sun.com/j2se/1.4/ja/docs/ja/tooldocs/win32/keytool.html] )」を参照のこと。 また、Java(JSSE)の実装に関しては、[JDK5.0用 Java Secure Socket Extension (JSSE) リファレンスガイド|http://java.sun.com/j2se/1.5.0/ja/docs/ja/guide/security/jsse/JSSERefGuide.html] などを参照のこと。 !!!鍵の生成 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 の鍵パスワードを入力してください。 (キーストアのパスワードと同じ場合は 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 証明書がファイル に保存されました。 !!!証明書を獲得(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