【Java】 Keytool コマンド

用語

キーストア(Key Store)

 * 鍵と証明書の情報を保管するためのファイル

【1】 キーストアを作成する

構文

keytool -genkey -alias [キーストア内での識別子] -keyalg RSA -keypass [パスワード] -storepass [パスワード] -keystore [キーストアファイル名] -validity [有効日数]

 ※ なお、名前のところでは、ホスト名を入力しといた方がいい
詳細版
keytool -genkey -alias [識別子] -keyalg [鍵生成アルゴリズム] -keysize [鍵長(ビット)] -keystore [ファイル名] -validity [有効日数] -storepass [パスワード]

コマンド例

"%JAVA_HOME%\bin\keytool" -genkey -alias tomcat -keyalg RSA -keypass changeit -storepass changeit -keystore server.keystore -validity 3650

参考文献

http://apis.jpn.ph/fswiki/wiki.cgi?page=Java/keytool
http://sehermitage.web.fc2.com/program/java_keytool.html

【2】 証明書署名要求を生成

 * 証明書署名要求:CSR

構文

keytool -certreq -alias [証明書の名称] -keystore [キーストアファイル名] -storepass [パスワード] -file [証明書署名要求ファイル名]

コマンド例

"%JAVA_HOME%\bin\keytool" -certreq -alias tomcat -keystore server.keystore -storepass changeit -file server.csr

【3】キーストアから 証明書署名要求をエクスポートする

 * 証明書署名要求をファイルにエクスポート

構文

keytool -export -alias [証明書の名称] -keystore [キーストアファイル名] -storepass [パスワード] -file [ファイル名]

コマンド例

"%JAVA_HOME%\bin\keytool" -export -alias tomcat -keystore server.keystore -storepass changeit -file server.cer

【4】クライアントキーストアに証明書署名要求をインポートする

構文

keytool -import -trustcacerts -alias [エイリアス(証明書の名称)] -storepass [パスワード] -file [証明書ファイル名] -keystore [キーストアファイル名] -noprompt
-trustcacerts オプション
 * 追加の証明書は信頼できる証明書のチェーンと見なす
http://e-class.center.yuge.ac.jp/jdk_docs/ja/technotes/tools/solaris/keytool.html
-noprompt オプション
 * ユーザとの対話無し
  => 「Trust this certificate? [no]」など聞いてこない
https://docs.oracle.com/javase/jp/1.5.0/tooldocs/solaris/keytool.html
http://qiita.com/kirimin/items/e243972a9788730b6d41

コマンド例

"%JAVA_HOME%\bin\keytool" -import -trustcacerts -alias tomcat -storepass changeit -file server.cer
キーストアを明示的に指定する
"%JAVA_HOME%\bin\keytool" -import -trustcacerts -alias tomcat -keystore "%JAVA_HOME%\jre\lib\security\cacerts" -storepass changeit -file server.cer

【5】キーストア一覧を表示する

構文

keytoo  -list -v -keystore [キーストアファイル] -storepass [パスワード]

コマンド例

"%JAVA_HOME%\bin\keytool" -list -v -keystore server.keystore -storepass changeit

補足:指定したエイリアスのみ表示するには

 * キーストア内に証明書が物凄いある状態だと、上記のコマンド例では、
   該当するエイリアスの内容を見逃しやすい
   そのため、指定したエイリアスのみ表示する方法を考える
解決案
# Linuxの場合

「 | grep -A 15 -h '【対象エイリアス】'」を追加して実行する

# マッチした行から後15行を同時に検索結果として表示し、
# 検索結果の先頭にマッチしたファイル名を表示しない
コマンド例
keytool -list -v -keystore server.keystore -storepass changeit | grep -A 15 -h 'tomcat'

【6】キーストアのエイリアスを削除する

構文

keytool -delete -alias xxxx -keystore [キーストアファイル名]

コマンド例

"%JAVA_HOME%\bin\keytool" -delete -alias tomcat -keystore server.keystore

【7】キーストアのパスワードを変更する

 * デフォルトのパスワードが「changeit」(Change it:変更せよ)だし。

構文

keytool -storepasswd -keystore [キーストアファイル名] -storepass [古いパスワード] -new [新しいパスワード]

コマンド例

"%JAVA_HOME%\bin\keytool" -storepasswd -keystore server.keystore -storepass changeit -new newpassword


関連記事

Keytool と Openssl を使った証明書作成

http://blogs.yahoo.co.jp/dk521123/33788938.html

SSLサイトの証明書をキーストアにインポートする

http://blogs.yahoo.co.jp/dk521123/36535856.html

Javaで、キーストアファイルをロードし、一覧表示する

https://blogs.yahoo.co.jp/dk521123/37020660.html

Javaで、プロキシサーバ経由で接続する

https://blogs.yahoo.co.jp/dk521123/36966230.html