Java Tips/Digital Certificate - Signature
概要
keytool ユーティリティを使用した証明書の作成、 jarsigner ユーティリティを使用した JAR へのデジタル署名を行ってみます。
証明書を作成する
keytool ユーティリティに -genkey 引数を指定すると、キーストア ファイル内に証明書が作成されます。以下のように対話形式なので適当に答えます。
C:\>keytool -genkey -alias hoge -keystore hoge.keystore キーストアのパスワードを入力してください: hogehoge 姓名を入力してください。 [Unknown]: hoge 組織単位名を入力してください。 [Unknown]: hoge 組織名を入力してください。 [Unknown]: hoge 都市名または地域名を入力してください。 [Unknown]: hoge 州名または地方名を入力してください。 [Unknown]: hoge この単位に該当する 2 文字の国番号を入力してください。 [Unknown]: JP CN=hoge, OU=hoge, O=hoge, L=hoge, ST=hoge, C=JP でよろしいですか? [no]: y <hoge> の鍵パスワードを入力してください。 (キーストアのパスワードと同じ場合は RETURN を押してください):
-alias 引数で指定した名前で証明書が作成されます。 -alias 引数を指定しないと mykey という名前で作成されます。
-keystore 引数で指定したファイルに作成されます。 -keystore 引数を指定しないと、ホームディレクトリの .keystore というファイルを使用します。いずれにしても、ファイルが存在しない場合は作成されます。
キーストア ファイルの中身を見る
keytool ユーティリティに -list 引数を指定すると、キーストア ファイルの中身が一覧表示されます。
C:\>keytool -list -keystore hoge.keystore キーストアのパスワードを入力してください: hogehoge キーストアのタイプ: jks キーストアのプロバイダ: SUN キーストアには 1 エントリが含まれます。 hoge, 2005/01/27, keyEntry, 証明書のフィンガープリント (MD5): 47:2D:AB:C4:03:6E:45:9E:16:7F:5C:CE:65:DF:5F:98
先ほど作成した hoge という証明書が入っています。
証明書を出力する
keytool ユーティリティに -export 引数を指定すると、証明書を出力することができます。
C:\>keytool -export -keystore hoge.keystore -alias hoge -file hoge.cer キーストアのパスワードを入力してください: hogehoge 証明書がファイル <hoge.cer> に保存されました。
-keystore 引数には、出力しようとしている証明書が入っているキーストア ファイルを指定します。省略すると、ホームディレクトリの .keystore というファイルを使用します。
-alias 引数には、出力しようとしている証明書の名前を指定します。省略すると、 mykey という名前の証明書を出力しようとします。
-file 引数には、証明書を出力するファイルを指定します。省略すると、標準出力に出力します。
JAR に署名する
jarsigner ユーティリティを使用すると、 JAR にデジタル署名を行うことができます。
C:\>jarsigner -keystore hoge.keystore -storepass hogehoge Hoge.jar hoge
-keystore 引数には、署名する証明書が入っているキーストア ファイルを指定します。省略すると、ホームディレクトリの .keystore というファイルを使用します。
-storepass 引数には、キーストア ファイルのパスワードを指定します。
オプション引数の後に、署名する JAR 、及び証明書のキー名を指定します。
JAR の署名情報を見る
jarsigner ユーティリティに -verify 引数を指定すると、 JAR の署名情報を見ることができます。
C:\>jarsigner -verify Hoge.jar jar verified.
署名されている場合、上記のように表示されます。これでは署名されているかどうかだけしかわからないので、 -verbose 引数を指定してもっと詳細な情報を見てみます。
C:\>jarsigner -verify -verbose Hoge.jar 134 Thu Jan 27 23:12:20 JST 2005 META-INF/MANIFEST.MF 187 Thu Jan 27 23:12:22 JST 2005 META-INF/HOGE.SF 980 Thu Jan 27 23:12:22 JST 2005 META-INF/HOGE.DSA 0 Thu Jan 27 22:04:22 JST 2005 META-INF/ sm 182 Thu Jan 27 22:04:16 JST 2005 Hoge.class s = signature was verified m = entry is listed in manifest k = at least one certificate was found in keystore i = at least one certificate was found in identity scope jar verified.
ファイルごとにどのような状態かを見ることができます。
署名されていない JAR を指定すると、次のように表示されます。
C:\>jarsigner -verify Hoge.jar jar is unsigned. (signatures missing or not parsable)
参考
2005年12月07日(水) 12:04:52 Modified by uguuxp