署名を行うには、公開鍵と非公開鍵(秘密鍵)のペアを作る必要があります。
sunのJava開発ツールには、このキーペアと証明書を管理するためのユーティリティとして
keytoolのコマンドが用意されています。
→詳細
これで管理される『キーペアと証明書』の複数を記憶するファイルが
キーストアファイルです。
以下では、カレントディレクトリに、
.keystoreの名前のキーストアファイルを
abc123のパスワードを必要とするように作成し、
その中にxyzの名前で、
デフォルト(DSA 鍵ペアおよび自己署名型証明書 (SHA1WithDSA) を生成しています)の
鍵ペアと証明書を追加している例です。
(.keystoreのファイルがない場合は、新規作成となります。)
JDK5 のkeytool実行例です。
D:\work>keytool -v --genkey -keystore ./.keystore -storepass abc123 -alias xyz
姓名を入力してください。
[Unknown]: tarou
組織単位名を入力してください。
[Unknown]: yyy
組織名を入力してください。
[Unknown]: xx
都市名または地域名を入力してください。
[Unknown]: shinjuku
州名または地方名を入力してください。
[Unknown]: tokyo
この単位に該当する 2 文字の国番号を入力してください。
[Unknown]: jp
CN=tarou, OU=yyy, O=xx, L=shinjuku, ST=tokyo, C=jp でよろしいですか?
[no]: yes
CN=tarou, OU=yyy, O=xx, L=shinjuku, ST=tokyo, C=jp 用の 1,024 ビット DSA 鍵ペア
および自己署名型証明書 (SHA1WithDSA) を生成しています。
<mykey> の鍵パスワードを入力してください。
(キーストアのパスワードと同じ場合は RETURN を押してください):
[./.keystore を格納中]
D:\work>dir
ドライブ D のボリューム ラベルがありません。
ボリューム シリアル番号は F0AE-4830 です
D:\work のディレクトリ
2010/02/21 14:32 <DIR> .
2010/02/21 14:32 <DIR> ..
2010/02/21 14:32 1,220 .keystore
1 個のファイル 1,220 バイト
2 個のディレクトリ 699,031,552 バイトの空き領域
D:\work>
上記では、-validity の有効期限を指定しませんでしたが、1年であれば -validity 365 と日数を指定します。 以上で作成したキーストアファイルの内容をリストアップした例を 以下に示します。
D:\work>keytool -v -list -keystore ./.keystore -storepass abc123 -alias xyz
別名: xyz
作成日: 2010/02/21
エントリのタイプ: keyEntry
証明連鎖の長さ: 1
証明書[1]:
所有者: CN=tarou, OU=yyy, O=xx, L=shinjuku, ST=tokyo, C=jp
実行者: CN=tarou, OU=yyy, O=xx, L=shinjuku, ST=tokyo, C=jp
シリアル番号: 4b80d89c
有効日: Sun Feb 21 15:54:20 JST 2010 有効期限: Sat May 22 15:54:20 JST 2010
証明書のフィンガープリント:
MD5: 3C:51:61:8E:45:AA:6E:69:39:7D:74:87:BB:5C:D4:73
SHA1: 01:F5:4B:04:EC:DD:92:91:55:5A:8D:44:9A:FE:E1:27:93:C1:B1:78
D:\work>
証明書エクスポート
以下でxyzの名前で記憶される証明書を
『userinfo.cer』のファイル名で出力(エクスポート)
している例を示します。
このファイルuserinfo.cerは、ここでダウンロードできます。
D:\work>keytool -v -export -file userinfo.cer -keystore ./.keystore -storepass abc123 -alias xyz 証明書がファイル <userinfo.cer> に保存されました。 D:\work>
jarファイルの署名に使うツールが
jarsignerです。
以下では、『.keystore』の
キーストアファイル(パスワード:abc123)内で、
xyzの名前を付けたキーペアを使い、
..\work2\userinfo.jarのファイルを署名したファイルを
userinfo.jarの名前で作成する例です。
D:\work>jarsigner -keystore .keystore -storepass abc123 -signedjar userinfo.jar ..\work2\userinfo.jar xyz 警告: 署名者の証明書は 6 か月以内に期限切れになります。 D:\work>
このように作成した アプレットのページの例を示します。
D:\work2>keytool
keytool の使い方:
-certreq [-v] [-protected]
[-alias <alias>] [-sigalg <sigalg>]
[-file <csr_file>] [-keypass <keypass>]
[-keystore <keystore>] [-storepass <storepass>]
[-storetype <storetype>] [-providerName <name>]
[-providerClass <provider_class_name> [-providerArg <arg>]] ...
-delete [-v] [-protected] -alias <alias>
[-keystore <keystore>] [-storepass <storepass>]
[-storetype <storetype>] [-providerName <name>]
[-providerClass <provider_class_name> [-providerArg <arg>]] ...
-export [-v] [-rfc] [-protected]
[-alias <alias>] [-file <cert_file>]
[-keystore <keystore>] [-storepass <storepass>]
[-storetype <storetype>] [-providerName <name>]
[-providerClass <provider_class_name> [-providerArg <arg>]] ...
-genkey [-v] [-protected]
[-alias <alias>]
[-keyalg <keyalg>] [-keysize <keysize>]
[-sigalg <sigalg>] [-dname <dname>]
[-validity <valDays>] [-keypass <keypass>]
[-keystore <keystore>] [-storepass <storepass>]
[-storetype <storetype>] [-providerName <name>]
[-providerClass <provider_class_name> [-providerArg <arg>]] ...
-help
-identitydb [-v] [-protected]
[-file <idb_file>]
[-keystore <keystore>] [-storepass <storepass>]
[-storetype <storetype>] [-providerName <name>]
[-providerClass <provider_class_name> [-providerArg <arg>]] ...
-import [-v] [-noprompt] [-trustcacerts] [-protected]
[-alias <alias>]
[-file <cert_file>] [-keypass <keypass>]
[-keystore <keystore>] [-storepass <storepass>]
[-storetype <storetype>] [-providerName <name>]
[-providerClass <provider_class_name> [-providerArg <arg>]] ...
-keyclone [-v] [-protected]
[-alias <alias>] -dest <dest_alias>
[-keypass <keypass>] [-new <new_keypass>]
[-keystore <keystore>] [-storepass <storepass>]
[-storetype <storetype>] [-providerName <name>]
[-providerClass <provider_class_name> [-providerArg <arg>]] ...
-keypasswd [-v] [-alias <alias>]
[-keypass <old_keypass>] [-new <new_keypass>]
[-keystore <keystore>] [-storepass <storepass>]
[-storetype <storetype>] [-providerName <name>]
[-providerClass <provider_class_name> [-providerArg <arg>]] ...
-list [-v | -rfc] [-protected]
[-alias <alias>]
[-keystore <keystore>] [-storepass <storepass>]
[-storetype <storetype>] [-providerName <name>]
[-providerClass <provider_class_name> [-providerArg <arg>]] ...
-printcert [-v] [-file <cert_file>]
-selfcert [-v] [-protected]
[-alias <alias>]
[-dname <dname>] [-validity <valDays>]
[-keypass <keypass>] [-sigalg <sigalg>]
[-keystore <keystore>] [-storepass <storepass>]
[-storetype <storetype>] [-providerName <name>]
[-providerClass <provider_class_name> [-providerArg <arg>]] ...
-storepasswd [-v] [-new <new_storepass>]
[-keystore <keystore>] [-storepass <storepass>]
[-storetype <storetype>] [-providerName <name>]
[-providerClass <provider_class_name> [-providerArg <arg>]] ...
D:\work2>
D:\work2>jarsigner
使い方: jarsigner [options] jar-file alias
jarsigner -verify [options] jar-file
[-keystore <url>] キーストアの位置
[-storepass <password>] キーストア完全性のパスワード
[-storetype <type>] キーストアの型
[-keypass <password>] 非公開鍵のパスワード (異なる場合)
[-sigfile <file>] .SF/.DSA ファイルの名前
[-signedjar <file>] 署名付き JAR ファイルの名前
[-verify] 署名付き JAR ファイルの検証
[-verbose] 署名/検証時の詳細出力
[-certs] 詳細出力および検証時に証明書を表示
[-tsa <url>] タイムスタンプ局の場所
[-tsacert <alias>] タイムスタンプ局の公開鍵証明書
[-altsigner <class>] 代替署名機構のクラス名
[-altsignerpath <pathlist>] 代替署名機構の位置
[-internalsf] 署名ブロックに .SF ファイルを含める
[-sectionsonly] マニフェスト全体のハッシュは計算しない
[-protected] 認証パスが保護されたキーストア
[-providerName <name>] プロバイダ名
[-providerClass <class> 暗号化サービスプロバイダの名前
[-providerArg <arg>]] ... マスタークラスファイルとコンストラクタの引数
D:\work2>