comparison src/linux/doc/man/ja/jarsigner.1 @ 0:37a05a11f281

Initial load
author duke
date Sat, 01 Dec 2007 00:00:00 +0000
parents
children b056c42ea5b4
comparison
equal deleted inserted replaced
-1:000000000000 0:36565f42c908
1 '\" t
2 .\"
3 .\" Copyright 2000-2006 Sun Microsystems, Inc. All Rights Reserved.
4 .\" DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
5 .\"
6 .\" This code is free software; you can redistribute it and/or modify it
7 .\" under the terms of the GNU General Public License version 2 only, as
8 .\" published by the Free Software Foundation.
9 .\"
10 .\" This code is distributed in the hope that it will be useful, but WITHOUT
11 .\" ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
12 .\" FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
13 .\" version 2 for more details (a copy is included in the LICENSE file that
14 .\" accompanied this code).
15 .\"
16 .\" You should have received a copy of the GNU General Public License version
17 .\" 2 along with this work; if not, write to the Free Software Foundation,
18 .\" Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
19 .\"
20 .\" Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
21 .\" CA 95054 USA or visit www.sun.com if you need additional information or
22 .\" have any questions.
23 .\"
24 .\"
25 .TH jarsigner 1 "2006 年 9 月 4 日" "Java SE 6" "ユーザーコマンド"
26 .SH "名前"
27 jarsigner \- JAR 署名および検証ツール
28 .LP
29 .RS 3
30
31 .LP
32 .LP
33 Java ARchive (JAR) ファイルの署名を生成し、署名付き JAR ファイルの署名を検証します。
34 .LP
35 .RE
36 .SH "形式"
37 .B jarsigner
38 [
39 .BI options
40 ]
41 jar-file alias
42 .br
43 .B jarsigner
44 .BI \-verify
45 [
46 .BI options
47 ]
48 jar-file
49 .SH "説明"
50 .IX "JAR signing and verification tool " "" "JAR signing and verification tool \(em \fLjarsigner\fP"
51 .IX "jarsigner" "" "\fLjarsigner\fP \(em JAR signing and verification tool "
52 .B jarsigner
53 ツールは、次の 2 つの目的で使用します。
54 .TP 5
55 1.
56 Java ARchive (JAR) ファイルに署名を付ける
57 .TP 5
58 2.
59 署名付き JAR ファイルの署名と完全性を検証する
60 .LP
61 JAR 機能を使うと、クラスファイル、イメージ、サウンド、およびその他のデジタルデータ
62 を単一のファイルにパッケージ化できるので、ファイルを迅速かつ容易に配布できます。
63 開発者は、
64 .B jar
65 という名前のツールを使って JAR ファイルを作成できます。技術的な観点から言えば、
66 すべての ZIP ファイルも JAR ファイルとみなすことができます。
67 .LP
68 「デジタル署名」は、なんらかのデータ (「署名」の対象となるデータ) と、エンティティ
69 (人、会社など) の非公開鍵とに基づいて計算されるビット列です。手書きの署名同様、
70 デジタル署名には多くの利点があります。
71 .TP 2
72 \(bu
73 署名の生成に使われた非公開鍵と対になる公開鍵を使って計算を行うことで、
74 デジタル署名が本物かどうかを検証できる
75 .TP 2
76 \(bu
77 非公開鍵が他人に知られない限り、デジタル署名の偽造は不可能である
78 .TP 2
79 \(bu
80 デジタル署名は、その署名が付いたデータだけを対象とするものであり、ほかのデータの
81 署名として機能することはない
82 .TP 2
83 \(bu
84 署名付きのデータは変更できない。データが変更された場合は、その署名によってデータ
85 が本物ではないことが検証される
86 .LP
87 ファイルに対してエンティティの署名を生成するには、まず、そのエンティティが公開鍵と
88 非公開鍵のペアを持つ必要があります。また、公開鍵を認証する 1 つ以上の証明書も
89 必要です。「証明書」とは、あるエンティティからのデジタル署名付きの文書のことです。
90 証明書には、ほかのあるエンティティの公開鍵が特別な値を持っていることが書かれて
91 います。
92 .LP
93 .B jarsigner
94 は、「キーストア」に含まれる鍵と証明書情報を使って、JAR ファイルのデジタル署名を
95 生成します。キーストアは、非公開鍵と、非公開鍵に関連付けられた X.509 証明連鎖が
96 収められたデータベースです。証明連鎖は、非公開鍵に対応する公開鍵を認証します。
97 キーストアの作成と管理には、
98 .B keytool
99 ユーティリティを使います。
100 .LP
101 .B jarsigner
102 は、エンティティの非公開鍵を使って署名を生成します。署名付き JAR ファイルには、
103 キーストアからの証明書のコピーが含まれています。これは、JAR ファイルの署名に使わ
104 れた非公開鍵に対応する公開鍵の証明書のコピーです。
105 .B jarsigner
106 は、署名付き JAR ファイルのデジタル署名を、ファイル内 (の署名ブロックファイル) に含
107 まれている証明書を使って検証することができます。
108 .LP
109 J2SE 5.0 以降の \f3jarsigner\fP は、タイムスタンプを含む署名を生成できるようになりました。このため、システム/デプロイヤ (Java Plug\-in など) は、署名付きの証明書がまだ有効である期間中に JAR ファイルの署名が行われたかどうかを確認できます。さらに、そのタイムスタンプ情報をアプリケーションが取得するための API が、J2SE 5.0 で追加されました。
110 .LP
111 現時点では、
112 .B jarsigner
113 で署名できるのは、JDK の
114 .B jar
115 ツールで作成された JAR ファイル、または ZIP ファイルだけです。JAR ファイルは ZIP ファイルと同じですが、JAR ファイルには
116 .B META-INF/MANIFEST.MF
117 ファイルが含まれている点が異なります。
118 .B META-INF/MANIFEST.MF
119 ファイルは、
120 .B jarsigner
121 が ZIP ファイルに署名を付けるときに自動的に作成されます。
122 .LP
123 デフォルトでは、
124 .B jarsigner
125 は JAR ファイルに「署名」を付けます。
126 署名付き JAR ファイルを「検証」する場合は、
127 .I -verify
128 オプションを指定します。
129 .SS
130 JDK 1.1 との互換性
131 .LP
132 .IX "jarsigner" "Compatibility with JDK 1.1" "\fLjarsigner\fP \(em JAR signing and verification tool "
133 .B keytool
134 ツールと
135 .B jarsigner
136 ツールは、JDK 1.1 で提供されていた
137 .B javakey
138 ツールを完全に置き換えるものです。これらの新しいツールは
139 .B javakey
140 よりも多くの機能を備えており、キーストアと非公開鍵をパスワードで保護する機能や、
141 署名の生成だけでなく署名を検証する機能を持っています。
142 .LP
143 新しいキーストアアーキテクチャは、
144 .B javakey
145 が作成して管理していたアイデンティティデータベースに代わるものです。キーストア形式と、JDK 1.1 の
146 .B javakey
147 が使っていたデータベース形式との間には下位互換性はありません。ただし、次のような
148 ことは可能です。
149 .TP 2
150 \(bu
151 .B keytool
152
153 .I -identitydb
154 コマンドを使うと、アイデンティティデータベースの情報をキーストアにインポートできます。
155 .TP 2
156 \(bu
157
158 .B jarsigner
159 は、以前に
160 .B javakey
161 を使って署名された JAR ファイルに署名を付けることができます。
162 .TP 2
163 \(bu
164 .B jarsigner
165 は、
166 .B javakey
167 を使って署名された JAR ファイルを検証できます。したがって、
168 .B jarsigner
169 は、JDK 1.2 のキーストアではなく JDK 1.1 のアイデンティティデータベースからの署名者別
170 名を認識し、これらを対象に処理を行うことができます。
171 .LP
172 次の表は、JDK 1.1.x で署名された JAR ファイルが、Java 2 プラットフォームでどのように扱われるかを
173 示しています。
174 .LP
175 .nf
176 .ft 3
177 1.1 データ
178 1.1 データ ベースから ポリシー
179 JAR ベース内の 1.2 キース ファイル
180 ファイル アイデン トアにイン がアイデン 与えられる
181 のタイプ ティティ ポートされ ティティ/ 特権
182 る信頼でき 別名に特権
183 るアイデン を与える
184 ティティ(4)
185
186 署名付き すべてのコードに
187 JAR x x x 与えられる
188 デフォルトの
189 特権
190
191 署名のない すべてのコードに
192 JAR x x x 与えられる
193 デフォルトの
194 特権
195
196 署名付き すべてのコードに
197 JAR x ○ x 与えられる
198 デフォルトの
199 特権
200
201 署名付き すべてのコードに
202 JAR ○/信頼で x x 与えられる
203 きない デフォルトの
204 特権 (3)
205
206 署名付き すべてのコードに
207 JAR ○/信頼で x ○ 与えられる
208 きない デフォルトの
209 特権 (1,3)
210
211 署名付き すべてのコードに
212 JAR x ○ ○ 与えられる
213 デフォルトの
214 特権とポリシー
215 ファイル内
216 で与えられる
217 特権
218
219 署名付き すべてのコードに
220 JAR ○/信頼 ○ ○ 与えられる
221 できる デフォルトの
222 特権とポリシー
223 ファイル内
224 で与えられる
225 特権 (2)
226
227 署名付き すべての
228 JAR ○/信頼 x x 特権
229 できる
230 署名付き すべての
231 JAR ○/信頼 ○ x 特権 (1)
232 できる
233 署名付き すべての
234 JAR ○/信頼 x ○ 特権 (1)
235 できる
236 .fi
237 .ft 1
238 .LP
239 注:
240 .TP 5
241 1.
242 ポリシーファイル内にアイデンティティ/別名についての言及がある場合、
243 それをキーストアにインポートして、ポリシーファイルの設定が与えられた
244 特権に反映されるようにする必要があります。
245 .TP 5
246 2.
247 ポリシーファイル/キーストアの組み合わせは、アイデンティティデータベース
248 内の信頼できるアイデンティティよりも優先されます。
249 .TP 5
250 3.
251 Java 2 プラットフォームでは、信頼できないアイデンティティは無視されます。
252 .TP 5
253 4.
254 JDK キーストアにインポートできるのは、信頼できるアイデンティティだけです。
255 .SS
256 キーストアの別名
257 .LP
258 .IX "jarsigner" "Keystore Aliases" "\fLjarsigner\fP \(em JAR signing and verification tool "
259 .LP
260 キーストアのすべてのエントリは、一意の「別名」を介してアクセスされます。
261 .LP
262 .B jarsigner
263 を使って JAR ファイルに署名を付けるときは、署名の生成に必要な非公開鍵を
264 含むキーストアエントリの別名を指定する必要があります。たとえば、次の例は、
265 working ディレクトリの
266 .B mystore
267 という名前のキーストアに含まれる別名
268 .B duke
269 に関連付けられた非公開鍵を使って、
270 .BR MyJARFile.jar
271 という名前の JAR ファイルに署名を付けます。出力ファイルは指定されていない
272 ので、
273 .BR MyJARFile.jar
274 は署名付きの JAR ファイルによって上書きされます。
275 .LP
276 .ft 3
277 .nf
278 jarsigner -keystore /working/mystore -storepass
279 myspass -keypass dukekeypasswd MyJARFile.jar duke
280 .fi
281 .ft 1
282 .LP
283 キーストアはパスワードで保護されているので、ストアのパスワード (上の例では
284 .BR myspass
285 ) を指定する必要があります。コマンド行でストアのパスワードを指定しなかった場合は、パスワードの入力を求められます。同様に、非公開鍵もキーストア内でパスワードによって保護されているので、非公開鍵のパスワード (上の例では
286 .BR dukekeypasswd
287 ) を指定する必要があります。コマンド行で非公開鍵のパスワードを指定しておらず、非公開鍵のパスワートがストアのパスワードと違っている場合は、非公開鍵のパスワードの入力を求められます。
288 .LP
289 .SS
290 キーストアの場所
291 .LP
292 .IX "jarsigner" "Keystore Location" "\fLjarsigner\fP \(em JAR signing and verification tool "
293 .LP
294 .B jarsigner
295 には、使用するキーストアの名前と場所を指定する
296 .I -keystore
297 オプションがあります。キーストアは、デフォルトではユーザのホームディレクトリの
298 .I .keystore
299 という名前のファイルに格納されます。ユーザのホームディレクトリは、
300 .I user.home
301 システムプロパティによって決まります。
302 .LP
303 .I \-keystore
304 オプションからの入力ストリームは
305 .I KeyStore.load
306 メソッドに渡されます。
307 URL として NONE が指定された場合は、NULL ストリームが
308 .I KeyStore.load
309 メソッドに渡されます。キーストアがハードウェアトークンデバイス上にあるなど、
310 ファイルベースでない場合は、
311 .I NONE
312 を指定してください。
313 .SS
314 キーストアの実装
315 .LP
316 .IX "jarsigner" "Keystore Implementation" "\fLjarsigner\fP \(em JAR signing and verification tool "
317 .LP
318 .I java.security
319 パッケージ内にある
320 .I KeyStore
321 クラス
322 では、キーストア内の情報にアクセスし、変更できるように
323 適切に定義されたインタフェースが提供されています。
324 このクラスは複数のさまざまな固定実装が可能で、
325 それぞれの実装は、特定の種類のキーストア用の固定実装です。
326 .LP
327 現在、キーストアの実装を使用するものとして、keytool と
328 .BR jarsigner
329 の 2 つのコマンド行ツールと、
330 .BR policytool
331 という名前の 1 つの GUI ベースのツールがあります。
332 .I KeyStore
333 クラスは public として使用可能なので、JDK ユーザは
334 .B KeyStore
335 を使ってほかのセキュリティアプリケーションも作成できます。
336 .LP
337 キーストアには、Sun が提供する組み込みのデフォルトの実装があります。これは、
338 JKS という名前の独自のキーストアタイプ (形式) を利用するもので、キーストアを
339 ファイルとして実装しています。この実装では、個々の非公開鍵は個別のパスワード
340 によって保護され、キーストア全体の完全性も (非公開鍵とは別の) パスワードに
341 よって保護されます。
342 .LP
343
344 キーストアの実装は、プロバイダベースです。具体的には、
345 .I KeyStore
346 クラスが提供するアプリケーションインタフェースは、Service Provider Interface (SPI)
347 という形で実装されています。つまり、対応する
348 .I KeystoreSpi
349 抽象クラス (これも
350 .I java.security
351 パッケージに含まれている) があり、このクラスが Service Provider Interface の
352 メソッドを定義しています。これらのメソッドは、「プロバイダ」が実装しなければなりま
353 せん。ここで、「プロバイダ」とは、Java Security API によってアクセス可能なサービス
354 のサブセットに対し、その固定実装を提供するパッケージまたはパッケージの集合の
355 ことです。したがって、キーストアの実装を提供するには、「Java 暗号化アーキテク
356 チャ用プロバイダの実装方法」(http://java.sun.com/javase/6/docs/technotes/guides/security/HowToImplAProvider.html) のページで説明しているように、クライアントがプロバイダを実装し、
357 .I KeystoreSpi
358 サブクラスの実装を提供する必要があります。
359 .LP
360 アプリケーションでは、
361 .I KeyStore
362 クラスが提供する
363 .B getInstance
364 ファクトリメソッドを使うことで、さまざまなプロバイダから異なる「タイプ」のキーストアの
365 実装を選択できます。キーストアのタイプは、キーストア情報の格納形式とデータ形式、
366 およびキーストア内の非公開鍵とキーストア自体の完全性を保護するために使われる
367 アルゴリズムを定義します。異なるタイプのキーストアの実装には、互いに互換性は
368 ありません。keytool、jarsigner、および policytool の各ツールは、
369 .B KeyStore
370 が提供する共通のアプリケーションインタフェースだけを使っているので、任意の
371 タイプのキーストアで使用できます。
372 .LP
373 .B keytool
374 は、ファイルベースのキーストア実装に対して機能します。
375 .B keytool
376 は、コマンド行で渡されたキーストアの位置をファイル名として扱い、
377 .BR FileInputStream
378 に変換して、そこからキーストア情報をロードします。一方、
379 .B jarsigner
380 ツールおよび
381 .B policytool
382 ツールは、URL を使って指定することが可能な任意の位置にあるキーストアを
383 読み取ることができます。
384 .LP
385 .B jarsigner
386
387 .BR keytool
388 の場合、
389 .I -storetype
390 オプションを使ってコマンド行でキーストアのタイプを指定できます。
391 .BR policytool
392 の場合は、[Edit] メニューの [Change Keystore] コマンドを使ってキーストアの
393 タイプを指定できます。
394 .LP
395 キーストアのタイプを明示的に指定しない場合、
396 .B keytool
397
398 .B jarsigner
399 、および
400 .B policytool
401 の各ツールは、セキュリティプロパティファイル内で指定
402 された
403 .I keystore.type
404 プロパティの値に基づいてキーストアの実装を選択します。セキュリティプロパティファ
405 イルは、
406 .I java.security
407 という名前でセキュリティプロパティディレクトリ
408 .I java.home/lib/security
409 に置かれています。
410 .I java.home
411 は、JDK の実行環境ディレクトリです。(SDK 内の jre ディレクトリ
412 または Java Runtime Environment のトップレベルのディレクトリ)。
413 .LP
414 各ツールは、
415 .I keystore.type
416 の値を取得し、この値で指定されたタイプのキーストアを実装しているプロバイダが
417 見つかるまで、現在インストールされているすべてのプロバイダを調べます。目的の
418 プロバイダが見つかると、そのプロバイダからのキーストアの実装を使います。
419 .LP
420 .I KeyStore
421 クラスでは
422 .I getDefaultType
423 という名前の static メソッドが定義されており、アプリケーションとアプレットはこの
424 メソッドを使うことで
425 .I keystore.type
426 プロパティの値を取得できます。次のコードは、デフォルトのキーストアタイプ (
427 .I keystore.type
428 プロパティで指定されたタイプ) のインスタンスを生成します。
429 .LP
430 .nf
431 \f3
432 .fl
433 KeyStore keyStore = KeyStore.getInstance(KeyStore.getDefaultType());
434 .fl
435 \fP
436 .fi
437
438 .LP
439 .LP
440 デフォルトのキーストアタイプは jks (Sun が提供する独自のタイプのキーストアの
441 実装) です。これは、セキュリティプロパティファイル内の次の行によって指定されて
442 います。
443 .LP
444 .RS 5
445 .B keystore.type=jks
446 .RE
447 .LP
448 注: キーストアタイプの指定では、大文字と小文字は区別されません。たとえば、「JKS」と「jks」は同じものとみなされます。
449 .LP
450 各ツールでデフォルト以外のキーストアの実装を使用するには、上の行を変更して
451 別のキーストアのタイプを指定します。
452 たとえば、pkcs12 と呼ばれるタイプのキーストアの実装を提供している
453 プロバイダパッケージを使用するには、上の行を次のように変更します。
454 .LP
455 .B keystore.type=pkcs12
456 .LP
457 PKCS#11 プロバイダパッケージを使用する場合、その詳細については、「Java PKCS#11 Reference Guide」(
458 http://java.sun.com/javase/6/docs/technotes/guides/security/p11guide.html#keytooljarsigner)
459 にある
460 「\f2KeyTool and JarSigner\fP」節を参照してください。
461 .LP
462 .SS
463 サポートされるアルゴリズム
464 .LP
465 .IX "jarsigner" "Supported Algorithms and Key Sizes" "\fLjarsigner\fP \(em JAR signing and verification tool "
466 .LP
467 デフォルトでは、
468 .B jarsigner
469 は次のどちらかのアルゴリズムを使って JAR ファイルに署名します。
470 .TP 2
471 \(bu
472 SHA-1 ダイジェストアルゴリズムを使った DSA (デジタル署名アルゴリズム)
473 .TP 2
474 \(bu
475 MD5 ダイジェストアルゴリズムを使った RSA アルゴリズム
476 .LP
477 具体的には、署名者の公開鍵と非公開鍵が DSA 鍵である場合、
478 .B jarsigner
479 は「SHA1withDSA」アルゴリズムを使って JAR ファイルに署名を付けようとします。署名者の
480 鍵が RSA 鍵である場合、
481 .B jarsigner
482 は「MD5withRSA」アルゴリズムを使って JAR ファイルに署名を付けます。
483 .LP
484 これらのデフォルトの署名アルゴリズムは、\f2\-sigalg\fP オプションを使ってオーバーライドできます。
485 .LP
486 .SS
487 署名付き JAR ファイル
488 .LP
489 .IX "jarsigner" "The Signed JAR File" "\fLjarsigner\fP \(em JAR signing and verification tool "
490 .LP
491 .B jarsigner
492 を使って JAR ファイルに署名を付けた場合、出力される署名付き JAR ファイルは
493 入力 JAR ファイルと同じですが、次の 2 つの追加ファイルが
494 .B META-INF
495 ディレクトリに置かれる点が異なります。
496 .TP 2
497 \(bu
498 .B .SF
499 拡張子の付いた署名ファイル
500 .TP 2
501 \(bu
502 .B .DSA
503 拡張子の付いた署名ブロックファイル
504 .LP
505 これら 2 つのファイルのベースファイル名は、
506 .I -sigFile
507 オプションの値から作成されます。たとえば、次のようにオプションを指定したとします。
508 .LP
509 .B -sigFile MKSIGN
510 .LP
511 この場合、ファイル名はそれぞれ
512 .B MKSIGN.SF
513
514 .BR MKSIGN.DSA
515 になります。
516 .LP
517 コマンド行に
518 .I -sigfile
519 オプションの指定がない場合、
520 .B .SF
521 ファイルと
522 .B .DSA
523 ファイルのベースファイル名は、コマンド行で指定された別名の先頭の 8 文字を
524 すべて大文字に変換したものになります。別名が 8 文字未満の場合は、別名が
525 そのまま使われます。別名の中に、署名ファイル名に使用できない文字が含まれ
526 ている場合は、該当する文字を下線 (_) に置き換えてファイル名が作成されます。
527 使用できる文字は、アルファベット、数字、下線 (_)、ハイフンです。
528 .LP
529 署名 (\f3.SF\f1) ファイル
530 .LP
531 署名ファイル (
532 .B .SF
533 ファイル) は、
534 .B jar
535 ツールで生成された JAR ファイルに常に含まれるマニフェストファイルと似ています。つまり、マニフェストファイル同様、
536 .B .SF
537 ファイルには、JAR ファイルに含まれているソースファイルごとに、次の 3 つの行があります。
538 .TP 2
539 \(bu
540 ファイル名
541 .TP 2
542 \(bu
543 使われているダイジェストアルゴリズム (SHA) の名前
544 .TP 2
545 \(bu
546 SHA ダイジェストの値
547 .LP
548 マニフェストファイルでは、SHA ダイジェストの値は、ソースファイルのバイナリデータ
549 のダイジェスト (ハッシュ) です。一方、
550 .B .SF
551 ファイルでは、ソースファイルのダイジェストの値は、マニフェストファイル中の該当する
552 ソースファイルに対応する 3 行のハッシュです。
553 .LP
554 署名ファイルには、デフォルトでマニフェストファイル全体のハッシュも含まれています。
555 後述の「JAR ファイルの検証」で説明するように、このヘッダの存在によって検証の
556 最適化が可能になっています。
557 .LP
558 署名ブロック (\f3.DSA\f1) ファイル
559 .LP
560 .B .SF
561 ファイルには署名が付けられ、署名は
562 .B .DSA
563 ファイルに置かれます。
564 .B .DSA
565 ファイルには、キーストアからの証明書または証明連鎖も符号化された形で含まれて
566 います。証明書または証明連鎖は、署名に使われた非公開鍵に対応する公開鍵を
567 認証します。
568 .LP
569 .SS
570 署名タイムスタンプ
571 .LP
572 .LP
573 J2SE 5.0 リリースの
574 .I jarsigner
575 ツールは、JAR ファイルの署名時に署名タイムスタンプを生成および格納できるようになりました。さらに、
576 .I jarsigner
577 は代替の署名機構もサポートします。この動作は省略可能で、署名時に次の各オプションによって制御されます。
578 .LP
579 .RS 3
580 .TP 2
581 o
582 \f2\-tsa url\fP
583 .TP 2
584 o
585 \f2\-tsacert alias\fP
586 .TP 2
587 o
588 \f2\-altsigner class\fP
589 .TP 2
590 o
591 \f2\-altsignerpath classpathlist\fP
592 .RE
593
594 .LP
595 .LP
596 これらの各オプションの詳細については、後述の「オプション」節を参照してください。
597 .LP
598 .SS
599 JAR ファイルの検証
600 .LP
601 .IX "jarsigner" "JAR File Verification" "\fLjarsigner\fP \(em JAR signing and verification tool "
602 .LP
603 JAR ファイルの検証が成功するのは、署名が有効であり、かつ署名の生成以後に
604 JAR ファイル内のどのファイルも変更されていない場合です。JAR ファイルの検証は、次の手順で行われます。
605 .TP 5
606 1.
607 .B .SF
608 ファイルそれ自体の署名を検証します。
609 .RS
610 .LP
611 この手順では、各署名ブロック (
612 .B .DSA
613 ) ファイルに格納されている署名が、実際に、公開鍵に対応する非公開鍵を使って
614 生成されたものであることを確認します。
615 .B .DSA
616 ファイルには、公開鍵の証明書も含まれています。また、この手順
617 では、目的の署名が、対応する署名 (
618 .B .SF
619 ) ファイル内の有効な署名であるかどうかを調べ、
620 .B .SF
621 ファイルが改変されていないことも確認します。
622 .RE
623 .TP 5
624 2.
625 .B .SF
626 ファイル内の各エントリのダイジェストをマニフェスト内の対応する各セクションと突き
627 合わせて検証します。
628 .RS
629 .LP
630 .B .SF
631 ファイルには、マニフェストファイル全体のハッシュが格納されたヘッダがデフォルトで
632 含まれています。このヘッダが存在する場合は、ヘッダ内のハッシュが実際にマニフェ
633 ストファイルのハッシュと一致するかどうかを検証することができます。ハッシュが一致す
634 る場合は、次の手順に進みます。
635 .LP
636 ハッシュが一致しない場合は、効率的には劣る方法を使って検証を行います。具体的
637 には、
638 .B .SF
639 ファイル内の各ソースファイル情報セクションのハッシュが、マニフェストファイル内の
640 対応するセクションのハッシュと一致するかどうかを確認します (「署名 (\f3.SF\f1)
641 ファイル」を参照)。
642 .LP
643 .B .SF
644 ファイルのヘッダに格納されたマニフェストファイルのハッシュと、実際のマニフェスト
645 ファイルのハッシュとが一致しない場合は、署名 (および
646 .B .SF
647 ファイル) の生成後に、ファイルに 1 つ以上のファイルが追加 (
648 .I jar
649 ツールを使用) された可能性があります。
650 .I jar
651 ツールを使ってファイルを追加した場合、マニフェストファイルは変更されますが
652 (新しいファイル用のセクションが追加される)、
653 .B .SF
654 ファイルは変更されません。この場合、
655 .B .SF
656 ファイルのヘッダ以外のセクションに格納されたハッシュが、マニフェストファイル内の
657 対応するセクションのハッシュと一致するときは、署名の生成時に JAR ファイル内に
658 存在していたファイルのうち、どのファイルも変更されていないことになり、検証は成功
659 したものとして扱われます。
660 .RE
661 .TP 5
662 3.
663 JAR ファイル内のファイルのうち、
664 .B .SF
665 ファイル内にエントリを持つ各ファイルを読み込みます。読み込み中にファイルの
666 ダイジェストを計算し、結果をマニフェストセクション内の該当するファイルの
667 ダイジェストと比較します。2 つのダイジェストは同じでなければならず、そうでない
668 場合は検証が失敗します。
669 .LP
670 検証プロセスの途中でなんらかの重大な検証エラーが発生した場合、検証プロセス
671 は中止され、セキュリティ例外がスローされます。スローされたセキュリティ例外は、
672 .BR jarsigner
673 がキャッチして表示します。
674 .LP
675 .SS
676 1 つの JAR ファイルを対象とする複数の署名
677 .LP
678 .IX "jarsigner" "Multiple Signatures for a JAR File" "\fLjarsigner\fP \(em JAR signing and verification tool "
679 .LP
680 1 つの JAR ファイルに対して
681 .B jarsigner
682 ツールを複数回実行し、実行のたびに、異なるユーザの別名を指定すれば、JAR
683 ファイルに複数のユーザの署名を付けることができます。たとえば、次のようにします。
684 .LP
685 .ft 3
686 .nf
687 jarsigner myBundle.jar susan
688 jarsigner myBundle.jar kevin
689 .fi
690 .ft 1
691 .LP
692 JAR ファイルが複数回署名されている場合、その JAR ファイルには
693 .B .SF
694 ファイルと
695 .B .DSA
696 ファイルの対が複数含まれることになります。
697 .B .SF
698 ファイルと
699 .B .DSA
700 ファイルの対は、1 回の署名に対して 1 つ作成されます。したがって、上の例で出力
701 される JAR ファイルには、次の名前を持つファイルが含まれます。
702 .LP
703 .ft 3
704 .nf
705 SUSAN.SF
706 SUSAN.DSA
707 KEVIN.SF
708 KEVIN.DSA
709 .fi
710 .ft 1
711 .LP
712 注: JDK 1.1 の
713 .B javakey
714 ツールで生成した署名と、
715 .B jarsigner
716 で生成した署名というように、
717 1 つの JAR ファイルに署名を混在させることができます。
718 つまり
719 .B javakey
720 ですでに以前署名した JAR ファイルに署名するために、
721 .B jarsigner
722 を使用できます。
723 .SH "オプション"
724 .LP
725 以下では、
726 .B jarsigner
727 のオプションについて説明します。オプションを指定するときは、次の点に注意
728 してください。
729 .TP 2
730 \(bu
731 どのオプション名にも先頭にマイナス記号 (-) が付く
732 .TP 2
733 \(bu
734 オプションは任意の順序で指定できる
735 .TP 2
736 \(bu
737 イタリック体の項目の実際の値 (オプションの値) は、ユーザが指定する必要がある
738 .TP 2
739 \(bu
740 .I -keystore、
741 .I -storepass、
742 .I -keypass、
743 .I -sigfile、
744 .I -sigalg、
745 .I -digestalg、
746 および
747 .I -signedjar
748 の各オプションを使用できるのは、JAR ファイルに署名を付ける場合だけである。
749 これらのオプションは、JAR ファイルを検証する場合には使用できない。同様に、
750 別名をコマンド行で指定するのは、JAR ファイルに署名を付ける場合だけである
751 .LP
752 .RS 3
753 .TP 3
754 .B -keystore url
755 キーストアの場所を示す URL を指定します。デフォルトは、ユーザのホームディレクト
756 リ内のファイル
757 .I .keystore
758 です。ユーザのホームディレクトリは、
759 .I user.home
760 システムプロパティによって決まります。
761 .LP
762 署名するときはキーストアが必要です。このため、デフォルトのキーストアが存在
763 しない場合、あるいはデフォルト以外のほかのキーストアを使用する場合は、
764 キーストアを明示的に指定する必要があります。
765 .LP
766 検証するときはキーストアは必要ありません。ただし、キーストアが指定されているか、
767 あるいはデフォルトのキーストアが存在していて、さらに
768 .I -verbose
769 オプションも指定されている場合は、JAR ファイルの検証に使われる証明書が
770 キーストアに存在するかどうかについての追加情報が出力されます。
771 .LP
772 注:
773 .I -keystore
774 の引数には、URL の代わりにファイル名 (とパス) を指定できます。ファイル名
775 (とパス) を指定した場合は、「file:」URL として扱われます。たとえば、次のように
776 指定できます。
777 .LP
778 .B -keystore filePathAndName
779 .LP
780 これは、次の指定と同じものとして扱われます。
781 .LP
782 .B -keystore file:filePathAndName
783 .LP
784 \fP
785 .fi
786 JRE の \f2$JAVA_HOME/lib/security\fP ディレクトリに格納された \f2java.security\fP セキュリティプロパティファイル内で Sun PKCS#11 プロバイダが設定されている場合、keytool と jarsigner は PKCS#11 トークンに基づいて動作できます。次のオプションを指定します。
787 .RS 3
788 .TP 2
789 o \f2\-keystore NONE\fP
790 .TP 2
791 o \f2\-storetype PKCS11\fP
792 .RE
793 たとえば、次のコマンドは、設定された PKCS#11 トークンの内容を一覧表示します。
794 .RS 3
795
796 .LP
797 .nf
798 \f3
799 .fl
800 jarsigner \-keystore NONE \-storetype PKCS11 \-list
801 .fl
802
803 .fl
804 \fP
805 .fi
806 .RE
807 .TP 3
808 .B -storetype storetype
809 インスタンスを生成するキーストアのタイプを指定します。デフォルトのキーストアの
810 タイプは、セキュリティプロパティファイルで keystore.type プロパティの値として
811 指定されたタイプで、
812 .I java.security.KeyStore
813 の static
814 .I getDefaultType
815 メソッドによって返されます。
816 .LP
817 \f2\-storepass\fP オプションを使って PCKS#11 トークンの PIN を指定することも
818 できます。何も指定しなかった場合、keytool と jarsigner はユーザにトークン PIN の
819 入力を求めます。トークンの認証パスが、専用の PIN パッドやバイオメトリックリーダの
820 ような保護されたパスである場合、\f2\-protected\fP オプションを指定する必要があります。
821 この場合、パスワードオプションは指定できません。
822 .TP
823 .B -storepass password
824 キーストアにアクセスするのに必要なパスワードを指定します。このオプションが必要
825 なのは、JAR ファイルに署名を付けるときだけです (JAR ファイルを検証するときは
826 不要)。署名を付けるときに、コマンド行で
827 .I -storepass
828 オプションを指定しなかった場合は、パスワードの入力を求められます。
829 .RS
830 .LP
831 注: テストを目的とする場合、または安全が保障されたシステムで実行する場合
832 以外は、コマンド行やスクリプトでパスワードを指定しないでください。また、
833 password プロンプトでパスワードを入力すると、入力したパスワードがエコーされ、
834 そのまま画面に表示されます。このため、周囲にほかのユーザがいる場合は、
835 パスワードを見られないように注意してください。
836 .RE
837 .TP
838 .B -keypass password
839 コマンド行で指定された別名に対応するキーストアエントリの非公開鍵を保護するの
840 に使うパスワードを指定します。
841 .B jarsigner
842 を使って JAR ファイルに署名を付けるときは、パスワードが必要です。コマンド行で
843 パスワードが指定されておらず、必要なパスワードがストアのパスワードと異なる
844 場合は、パスワードの入力を求められます。
845 .RS
846 .LP
847 注: テストを目的とする場合、または安全であることがわかっているシステムで
848 実行する場合以外は、コマンド行やスクリプトでパスワードを指定しないでください。
849 また、password プロンプトでパスワードを入力すると、入力したパスワードがエコー
850 され、そのまま画面に表示されます。このため、周囲にほかのユーザがいる場合は、
851 パスワードを見られないように注意してください。
852 .RE
853 .TP
854 .B -sigfile file
855 SF ファイルと .DSA ファイルの生成に使うベースファイル名を指定します。
856 たとえば、file に DUKESIGN を指定すると、生成される .SF ファイルと
857 .DSA ファイルの名前は、それぞれ DUKESIGN.SF と DUKESIGN.DSA になります。
858 これらのファイルは、署名付き JAR ファイルの META-INF ディレクトリに置かれます。
859 .RS
860 .LP
861 .I file
862 に使用できる文字は「a-zA-Z0-9_-」です。つまり、文字、数字、下線、
863 およびハイフンだけを使用できます。注:
864 .B .SF
865 および
866 .B .DSA
867 のファイル名では、小文字はすべて大文字に変換されます。
868 .LP
869 コマンド行で
870 .I -sigfile
871 オプションを指定しなかった場合、
872 .B .SF
873 ファイルと
874 .B .DSA
875 ファイルのベースファイル名は、コマンド行で指定された別名の先頭の 8 文字を
876 すべて大文字に変換したものになります。別名が 8 文字未満の場合は、別名が
877 そのまま使われます。別名の中に、署名ファイル名に使用できない文字が含まれている
878 場合は、該当する文字を下線 (_) に置き換えてファイル名が作成されます。
879 .TP 3
880 \-sigalg algorithm
881 .RS 3
882
883 .LP
884 JAR ファイルの署名に使用する署名アルゴリズムの名前を指定します。
885 .LP
886 標準署名アルゴリズム名の一覧については、「Java Cryptography Architecture」(
887 http://java.sun.com/javase/6/docs/technotes/guides/security/crypto/CryptoSpec.html#appa)
888 にある
889
890 .I Appendix A
891 」を参照してください。このアルゴリズムは、JAR ファイルの署名に使用する秘密鍵と互換性のあるものでなければなりません。このオプションを指定しなかった場合、秘密鍵のタイプに応じて SHA1withDSA、MD5withRSA のいずれかが使用されます。指定されたアルゴリズムの実装を提供するプロバイダが静的にインストールされているか、あるいはユーザがそのようなプロバイダを
892 .I \-providerClass
893 オプションを使って指定する必要があります。そうでない場合、コマンドの実行が失敗します。
894 .LP
895 .RE
896 .TP 3
897 \-digestalg algorithm
898 .RS 3
899 JAR ファイルのエントリをダイジェストする際に使用するメッセージダイジェストアルゴリズムの名前を指定します。
900 .LP
901 標準メッセージダイジェストアルゴリズム名の一覧については、「Java Cryptography Architecture」(http://java.sun.com/javase/6/docs/technotes/guides/security/crypto/CryptoSpec.html#appa)の
902
903 .I Appendix A
904 」を参照してください。このオプションを指定しなかった場合、SHA\-1 が使用されます。指定されたアルゴリズムの実装を提供するプロバイダが静的にインストールされているか、あるいはユーザがそのようなプロバイダを
905 .I \-providerClass
906 オプションを使って指定する必要があります。そうでない場合、コマンドの実行が失敗します。
907 .RE
908 .TP
909 .B -signedjar file
910 署名付き JAR ファイルの名前を指定します。
911 .RS
912 .LP
913 コマンド行で名前を指定しなかった場合は、入力 JAR ファイル (署名の対象となる
914 JAR ファイル) の名前と同じ名前が使われます。この場合、入力 JAR ファイルは署名
915 付き JAR ファイルによって上書きされます。
916 .RE
917 .TP
918 .B -verify
919 コマンド行でこのオプションが指定されている場合は、指定された JAR ファイルが
920 検証されます。JAR ファイルへの署名は行われません。検証が成功すると、
921 「jar verified」というメッセージが表示されます。署名されていない JAR ファイル、
922 またはサポートされていないアルゴリズム (RSA プロバイダがインストールされていない
923 場合の RSA など) を使って署名された JAR ファイルを検証しようとすると、
924 「jar is unsigned. (signatures missing or not parsable)」というメッセージが表示されます。
925 .RS
926 .LP
927 署名付き JAR ファイルは、
928 .B jarsigner
929 または JDK 1.1 の
930 .B javakey
931 ツール、あるいはその両方を使って検証できます。
932 .LP
933 検証についての詳細は、「JAR ファイルの検証」を参照してください。
934 .RE
935 .TP
936 .B -certs
937 コマンド行で、
938 .I -verify
939 および
940 .I -verbose
941 オプションとともにこのオプションが指定されている場合は、JAR ファイルの各署名者
942 の証明書情報も出力されます。証明書情報には次のものが含まれます。
943 .RS
944 .TP 2
945 \(bu
946 署名者の公開鍵を証明する (
947 .B .DSA
948 ファイルに格納された) 証明書の種類の名前
949 .TP 2
950 \(bu
951 証明書が X.509 証明書 (具体的には
952 .I java.security.cert.X509Certificate
953 のインスタンス) である場合は、署名者の識別名
954 .LP
955 キーストアの確認も行われます。コマンド行でキーストアの値が指定されていない
956 場合、デフォルトのキーストアファイルがあれば、それが確認されます。署名者の
957 公開鍵の証明書がキーストア内のエントリと一致した場合は、次の情報も表示
958 されます。
959 .TP 2
960 \(bu
961 署名者に該当するキーストアエントリの別名。この別名は括弧で囲まれます。
962 ただし、キーストアではなく JDK 1.1 のアイデンティティデータベースに由来する
963 署名者の場合は、括弧ではなく角括弧で囲まれます。
964 .RE
965 .TP
966 .B -verbose
967 コマンド行でこのオプションが指定されている場合、
968 .B jarsigner
969 は「冗長」モードで動作し、JAR の署名または検証の進行状況に関する追加情報を出
970 力します。
971 .TP
972 .B -internalsf
973 以前は、JAR ファイルの署名時に生成された
974 .B .DSA
975 (署名ブロック) ファイルの中に、生成された
976 .B .SF
977 ファイル (署名ファイル) の完全なコピーが符号化された形で含まれていました。この
978 動作は変更になり、現在では、出力 JAR ファイル全体のサイズを小さくするために、
979 デフォルトでは
980 .B .SF
981 ファイルが
982 .B .DSA
983 ファイルに含まれないようになっています。ただし、コマンド行で
984 .B -internalsf
985 オプションを指定すると、以前と同じように動作します。このオプションは、テストを行う
986 場合には便利ですが、それ以外には使用しないでください。このオプションを使用する
987 と、有益な最適化が行われなくなります。
988 .TP
989 .B -sectionsonly
990 コマンド行でこのオプションが指定されている場合、JAR ファイルの署名時に生成される
991 .B .SF
992 ファイル (署名ファイル) には、マニフェストファイル全体のハッシュを含むヘッダは追加されません。この場合、.SF ファイルに含まれるのは、JAR ファイル内の各ソースファイルに関する情報およびハッシュだけです。詳細は、「署名 (\f3.SF\f1) ファイル」を参照してください。
993 .RS
994 .LP
995 デフォルトでは、最適化を行うために、マニフェストファイル全体のハッシュを含むヘッダ
996 が追加されます。ヘッダが存在する場合は、JAR ファイルの検証時に、まずヘッダ内
997 のハッシュが、マニフェストファイル全体のハッシュと実際に一致するかどうかが確認
998 されます。ハッシュが一致する場合、検証は次の手順に進みます。ハッシュが一致
999 しない場合は、効率的には劣る方法を使って検証を行います。具体的には、
1000 .B .SF
1001 ファイル内の各ソースファイル情報セクションのハッシュが、マニフェストファイル内の
1002 対応するセクションのハッシュと一致するかどうかを確認します。
1003 .LP
1004 詳細は、「JAR ファイルの検証」を参照してください。
1005 .LP
1006 このオプションは、テストを行う場合には便利ですが、それ以外には使用しないで
1007 ください。このオプションを使用すると、有益な最適化が行われなくなります。
1008 .TP
1009 .B -protected
1010 \f2true\fP、\f2false\fP のいずれか。専用 PIN リーダなどの保護された認証パスを介してパスワードを指定する必要がある場合には、この値に \f2true\fP を指定してください。
1011 .RE
1012 .TP
1013 .B \-provider provider_class_name
1014 サービスプロバイダがセキュリティプロパティファイル (\f2java.security\fP) のリストに
1015 入っていないときに、暗号化サービスプロバイダのマスタークラスファイルの
1016 名前を指定します。
1017 .LP
1018 \f2\-providerArg\fP \f2ConfigFilePath\fP オプションと組み合わせて使用します。keytool と jarsigner はプロバイダを動的にインストールします (ここで、\f2ConfigFilePath\fP はトークン設定ファイルへのパスです)。セキュリティプロパティファイル内で Sun PKCS#11 プロバイダが設定されていない場合に PKCS#11 キーストアを一覧表示するコマンドの例を次に示します。
1019 .RS 3
1020
1021 .LP
1022 .nf
1023 \f3
1024 .fl
1025 jarsigner \-keystore NONE \-storetype PKCS11 \\
1026 .fl
1027 \-providerClass sun.security.pkcs11.SunPKCS11 \\
1028 .fl
1029 \-providerArg /foo/bar/token.config \\
1030 .fl
1031 \-list
1032 .fl
1033 \fP
1034 .fi
1035 .RE
1036 .TP 3
1037 .B \-providerName providerName
1038 \f2java.security\fP セキュリティプロパティファイル内で 2 つ以上のプロバイダが設定されている場合、\f2\-providerName\fP オプションを使って特定のプロバイダインスタンスを選択できます。このオプションの引数は、プロバイダの名前になります。
1039 .LP
1040 Sun PKCS#11 プロバイダの場合、\f2providerName\fP は \f2SunPKCS11\-\fP\f2TokenName\fP の形式になります。ここで、\f2TokenName\fP は、プロバイダインスタンスの設定時に使用した名前のサフィックスです。詳細については、
1041 .fi
1042 http://java.sun.com/javase/6/docs/technotes/guides/security/p11guide.html#KeyToolJarSigner#ATTRS
1043
1044 .na
1045 「\f2configuration attributes table\fP」を参照してください。たとえば、次のコマンドは、名前サフィックス \f2SmartCard\fP を持つ PKCS#11 キーストアプロバイダインスタンスの内容を一覧表示します。
1046 .RS 3
1047
1048 .LP
1049 .nf
1050 \f3
1051 .fl
1052 jarsigner \-keystore NONE \-storetype PKCS11 \\
1053 .fl
1054 \-providerName SunPKCS11\-SmartCard \\
1055 .fl
1056 \-list
1057 .fl
1058 \fP
1059 .fi
1060 .RE
1061 .TP
1062 .B \-Jjavaoption
1063 指定した
1064 .I javaoption
1065 文字列を直接実行時システムに渡します。
1066 \f3jarsigner\f1 は、実際には Java インタプリタに対する「ラッパー」です。このオプションには、空白を含めることはできません。このオプションは、実行環境またはメモリ使用を調整する場合に便利です。指定できるフラグを一覧表示するには、コマンド行で
1067 .I java -h
1068 または
1069 .I java -X
1070 と入力してください。
1071 .LP
1072 .TP 3
1073 \-tsa url
1074 JAR ファイル署名時にコマンド行に\f2「-tsa http://example.tsa.url」\fPと入力した場合、署名のタイムスタンプが生成されます。\f2http://example.tsa.url\fP という URL が、TSA (Time Stamping Authority) の場所を特定します。これは、\f2\-tsacert\fP オプション経由で見つかったどの URL よりも優先されます。\f2\-tsa\fP オプションを使用する場合、TSA の公開鍵証明書がキーストア内に存在している必要はありません。
1075 .LP
1076 タイムスタンプを生成するために、\f2jarsigner\fP は、
1077 .fi
1078 http://www.ietf.org/rfc/rfc3161.txt
1079
1080 .na
1081 「\f2RFC 3161\fP」で規定された TSP (Time\-Stamp Protocol) を使って TSA と通信します。成功すると、TSA から返されたタイムスタンプトークンが、署名とともに署名ブロックファイル内に格納されます。
1082 .LP
1083 .TP 3
1084 \-tsacert alias
1085 JAR ファイル署名時にコマンド行に\f2「-tsacert alias」\fPと表示された場合、署名のタイムスタンプが生成されます。\f2alias\fP は、キーストア内で現在有効になっている TSA の公開鍵証明書を特定します。そのエントリの証明書内で、TSA の場所を特定する URL を含む Subject Information Access 拡張が検索されます。
1086 .LP
1087 \f2\-tsacert\fP を使用する場合、TSA の公開鍵証明書がキーストア内に存在している必要があります。
1088 .LP
1089 .TP 3
1090 \-altsigner class
1091 使用する代替署名機構を指定します。この完全修飾クラス名は、
1092 .I com.sun.jarsigner.ContentSigner
1093 抽象クラスを拡張するクラスファイルを特定します。このクラスファイルへのパスは、
1094 .I \-altsignerpath
1095 オプションを使って定義します。
1096 .I \-altsigner
1097 オプションが指定された場合、
1098 .I jarsigner
1099 はその指定されたクラスが提供する署名機構を使用します。それ以外の場合、
1100 .I jarsigner
1101 はデフォルトの署名機構を使用します。
1102 .LP
1103 たとえば、\f2com.sun.sun.jarsigner.AuthSigner\fP という名前のクラスが提供する署名機構を使用するには、\f2jarsigner\fP オプション\f2「-altsigner com.sun.jarsigner.AuthSigner」\fPを使用します。
1104 .LP
1105 .TP 3
1106 \-altsignerpath classpathlist
1107 クラスファイル (このクラスファイル名は前述の \f2\-altsigner\fP オプションを使って指定) へのパスと、そのクラスが依存するすべての JAR ファイルへのパスを指定します。そのクラスファイルが JAR ファイル内に存在している場合には、次の例で示すように、その JAR ファイルへのパスを指定します。
1108 .LP
1109 絶対パス、現在のディレクトリに対する相対パスのいずれかを指定できます。複数のパスまたは JAR ファイルを \f2classpathlist\fP に含める場合には、Solaris 上ではコロン (\f2:\fP)、Windows 上ではセミコロン (\f2;\fP) をそれぞれ使ってエントリを区切ってください。このクラスがすでに検索パスに含まれている場合、このオプションを指定する必要はありません。
1110 .LP
1111 クラスファイルを含む JAR ファイルへのパスを指定する例:
1112 .RS 3
1113
1114 .LP
1115 .LP
1116 \f2\-altsignerpath /home/user/lib/authsigner.jar\fP
1117 .LP
1118 .RE
1119 .LP
1120 JAR ファイル名が含まれている点に注意してください。
1121 .LP
1122 クラスファイルを含む JAR ファイルへのパスを指定する例:
1123 .RS 3
1124 .LP
1125 \f2\-altsignerpath /home/user/classes/com/sun/tools/jarsigner/\fP
1126 .LP
1127 .RE
1128 .LP
1129 JAR ファイル名が含まれていない点に注意してください。
1130 .RE
1131 .LP
1132 .SH "例"
1133 .LP
1134 .SS
1135 JAR ファイルの署名
1136 .LP
1137 .IX "jarsigner" "Signing a JAR File" "\fLjarsigner\fP \(em JAR signing and verification tool "
1138 .LP
1139 .B bundle.jar
1140 という名前の JAR ファイルがあり、このファイルに、キーストアの別名が jane であるユーザの非公開鍵を使って、署名を付けるとします。キーストアは、mystore という名前で working ディレクトリにあり、キーストアのパスワードは mypass、
1141 .I jane
1142 の非公開鍵のパスワードは j638klm とします。この場合、次のコマンドを実行すると、JAR ファイルに署名を付けて sbundle.jar という署名付き JAR ファイルを作成できます。
1143 .LP
1144 .ft 3
1145 .nf
1146 jarsigner \-keystore "/working/mystore" \-storepass myspass
1147 -keypass j638klm -signedjar sbundle.jar bundle.jar jane
1148 .fi
1149 .ft 1
1150 .LP
1151 上のコマンドでは
1152 .I \-sigfile
1153 オプションが指定されていないので、署名付き JAR ファイルに格納される
1154 .B .SF
1155 ファイルと
1156 .B .DSA
1157 ファイルの名前は、別名に基づくデフォルトの名前になり、それぞれ
1158 .I JANE.SF
1159
1160 .I JANE.DSA
1161 になります。
1162 .LP
1163 ストアのパスワードと非公開鍵のパスワードをあとで入力する場合は、
1164 上のコマンドを短縮して次のように入力できます。
1165 .LP
1166 .ft 3
1167 .nf
1168 jarsigner \-keystore /working/mystore
1169 -signedjar sbundle.jar bundle.jar jane
1170 .fi
1171 .ft 1
1172 .LP
1173 デフォルトのキーストア (ホームディレクトリ内の
1174 .B .keystore
1175 という名前のキーストア) を使用する場合は、次に示すように、キーストアの指定を
1176 省略できます。
1177 .LP
1178 .ft 3
1179 .nf
1180 jarsigner \-signedjar sbundle.jar bundle.jar jane
1181 .fi
1182 .ft 1
1183 .LP
1184 また、署名付き JAR ファイルで入力 JAR ファイル (
1185 .I bundle.jar
1186 ) を上書きする場合は、
1187 .I -signedjar
1188 オプションの指定も省略できます。
1189 .LP
1190 .ft 3
1191 .nf
1192 jarsigner bundle.jar jane
1193 .fi
1194 .ft 1
1195 .LP
1196 .SS
1197 署名付き JAR ファイルの検証
1198 .LP
1199 .IX "jarsigner" "Verifying a Signed JAR File" "\fLjarsigner\fP \(em JAR signing and verification tool "
1200 .LP
1201 次に示すのは、署名付き JAR ファイルを検証し、署名が有効で JAR ファイルが
1202 改変されていないことを確認するためのコマンド例です。
1203 .LP
1204 .ft 3
1205 .nf
1206 jarsigner \-verify sbundle.jar
1207 .fi
1208 .ft 1
1209 .LP
1210 検証が成功すると、次のようなメッセージが表示されます。
1211 .LP
1212 .ft 3
1213 .nf
1214 jar verified.
1215 .fi
1216 .ft 1
1217 .LP
1218 検証が成功しなかった場合は、エラーメッセージが表示されます。
1219 .LP
1220 .I -verbose
1221 オプションを使うと、より多くの情報が表示されます。次に示すのは、
1222 .I -verbose
1223 オプションを指定した
1224 .B jarsigner
1225 の実行例とその出力結果です。
1226 .LP
1227 .ft 3
1228 .nf
1229 jarsigner -verify -verbose sbundle.jar
1230
1231 198 Fri Sep 26 16:14:06 PDT 1997 META-INF/MANIFEST.MF
1232 199 Fri Sep 26 16:22:10 PDT 1997 META-INF/JANE.SF
1233 1013 Fri Sep 26 16:22:10 PDT 1997 META-INF/JANE.DSA
1234 smk 2752 Fri Sep 26 16:12:30 PDT 1997 AclEx.class
1235 smk 849 Fri Sep 26 16:12:46 PDT 1997 test.class
1236
1237 s = signature was verified
1238 m = entry is listed in manifest
1239 k = at least one certificate was found in keystore
1240
1241 jar verified.
1242 .fi
1243 .ft 1
1244 .LP
1245 .SS
1246 証明書情報を使った検証
1247 .LP
1248 .IX "jarsigner" "Verification with Certificate Information" "\fLjarsigner\fP \(em JAR signing and verification tool "
1249
1250 検証時に、
1251 .I -verify
1252
1253 .I -verbose
1254 オプションに加えて
1255 .I -certs
1256 オプションを指定した場合は、JAR ファイル内の各署名者の証明書情報も出力されま
1257 す。これには、証明書のタイプ、署名者の識別名情報 (X.509 証明書の場合)、および、
1258 JAR ファイルの公開鍵の証明書がキーストアエントリの公開鍵の証明書と一致する場合
1259 には、括弧で囲まれた署名者のキーストア別名が含まれます。たとえば、次のように
1260 出力されます。
1261 .LP
1262 .ft 3
1263 .nf
1264 jarsigner -keystore /working/mystore -verify -verbose -certs myTest.jar
1265
1266 198 Fri Sep 26 16:14:06 PDT 1997 META-INF/MANIFEST.MF
1267 199 Fri Sep 26 16:22:10 PDT 1997 META-INF/JANE.SF
1268 1013 Fri Sep 26 16:22:10 PDT 1997 META-INF/JANE.DSA
1269 208 Fri Sep 26 16:23:30 PDT 1997 META-INF/JAVATEST.SF
1270 1087 Fri Sep 26 16:23:30 PDT 1997 META-INF/JAVATEST.DSA
1271 smk 2752 Fri Sep 26 16:12:30 PDT 1997 Tst.class
1272
1273 X.509, CN=Test Group, OU=Java Software, O=Sun Microsystems, L=CUP, S=CA, C=US (javatest)
1274 X.509, CN=Jane Smith, OU=Java Software, O=Sun, L=cup, S=ca, C=us (jane)
1275
1276 s = signature was verified
1277 m = entry is listed in manifest
1278 k = at least one certificate was found in keystore
1279
1280 jar verified.
1281 .fi
1282 .ft 1
1283 .LP
1284 署名者の証明書が X.509 証明書でない場合は、識別名情報は表示されず、証明書の
1285 タイプと別名だけが表示されます。たとえば、証明書が PGP 証明書で、別名が bob の
1286 場合は、次のように表示されます。
1287 .LP
1288 .ft 3
1289 .nf
1290 PGP, (bob)
1291 .fi
1292 .ft 1
1293 .LP
1294 .SS
1295 アイデンティティデータベース署名者を含む JAR ファイルの検証
1296 .LP
1297 .IX "jarsigner" "Verification of a JAR File" "\fLjarsigner\fP \(em JAR signing and verification tool "
1298 JAR ファイルが、JDK 1.1 の
1299 .B javakey
1300 ツールを使って署名されている場合、署名者はアイデンティティデータベース内の
1301 別名です。この場合、検証の出力には i という記号が含まれます。JAR ファイルが、
1302 アイデンティティデータベース内の別名とキーストア内の別名の両方によって署名
1303 されている場合は、k と i の両方が表示されます。
1304 .LP
1305 .I -certs
1306 オプションを指定した場合、キーストアの別名は括弧で囲まれるのに対し、アイデンティ
1307 ティデータベース内の別名は角括弧で囲まれて表示されます。たとえば、次のように
1308 表示されます。
1309 .LP
1310 .ft 3
1311 .nf
1312 jarsigner \-keystore /working/mystore \-verify \-verbose \-certs writeFile.jar
1313
1314 198 Fri Sep 26 16:14:06 PDT 1997 META-INF/MANIFEST.MF
1315 199 Fri Sep 26 16:22:10 PDT 1997 META-INF/JANE.SF
1316 1013 Fri Sep 26 16:22:10 PDT 1997 META-INF/JANE.DSA
1317 199 Fri Sep 27 12:22:30 PDT 1997 META-INF/DUKE.SF
1318 1013 Fri Sep 27 12:22:30 PDT 1997 META-INF/DUKE.DSA
1319 smki 2752 Fri Sep 26 16:12:30 PDT 1997 writeFile.html
1320
1321 X.509, CN=Jane Smith, OU=Java Software, O=Sun, L=cup, S=ca, C=us (jane)
1322 X.509, CN=Duke, OU=Java Software, O=Sun, L=cup, S=ca, C=us [duke]
1323
1324 s = signature was verified
1325 m = entry is listed in manifest
1326 k = at least one certificate was found in keystore
1327 i = at least one certificate was found in identity scope
1328
1329 jar verified.
1330 .fi
1331 .ft 1
1332 .LP
1333 別名 duke は角括弧で囲まれているので、この別名はキーストアの別名ではなく、
1334 アイデンティティデータベースの別名です。
1335 .SH "関連項目"
1336 .LP
1337
1338 .LP
1339 .RS 3
1340 .TP 2
1341 o
1342 jar ツールのドキュメント
1343 .TP 2
1344 o
1345 keytool ツールのドキュメント
1346 .TP 2
1347 o
1348 \f3jarsigner\fP ツールの使用例については、「Java Tutorial」
1349 (http://java.sun.com/docs/books/tutorial/trailmap.html)
1350 の「Security」( http://java.sun.com/docs/books/tutorial/security1.2/index.html)
1351 を参照
1352 .na
1353 .RE
1354
1355 .LP
1356
1357 .LP
1358