署名を行うには、公開鍵と非公開鍵(秘密鍵)のペアを作る必要があります。
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>