src/solaris/doc/sun/man/man1/ja/jarsigner.1

Print this page

        

*** 1,1660 **** ! ." Copyright (c) 1998, 2011, Oracle and/or its affiliates. All rights reserved. ! ." DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. ! ." ! ." This code is free software; you can redistribute it and/or modify it ! ." under the terms of the GNU General Public License version 2 only, as ! ." published by the Free Software Foundation. ! ." ! ." This code is distributed in the hope that it will be useful, but WITHOUT ! ." ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or ! ." FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License ! ." version 2 for more details (a copy is included in the LICENSE file that ! ." accompanied this code). ! ." ! ." You should have received a copy of the GNU General Public License version ! ." 2 along with this work; if not, write to the Free Software Foundation, ! ." Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. ! ." ! ." Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA ! ." or visit www.oracle.com if you need additional information or have any ! ." questions. ! ." ! .TH jarsigner 1 "07 May 2011" ! ! .LP ! .SH "名前" ! jarsigner \- JAR 署名および検証ツール ! .LP ! .LP ! Java ARchive (JAR) ファイルの署名を生成し、署名付き JAR ファイルの署名を検証します。 ! .LP ! .SH "形式" ! .LP ! .nf ! \f3 ! .fl ! \fP\f3jarsigner\fP [ options ] jar\-file alias ! .fl ! \f3jarsigner\fP \-verify [ options ] jar\-file [alias...] ! .fl .fi ! ! .LP ! .LP ! jarsigner の \-verify コマンドでは、JAR ファイル名のあとに 0 個以上のキーストア別名を指定できます。キーストア別名が指定された場合、jarsigner は、JAR ファイル内の各署名付きエンティティーの検証に使用される証明書がキーストア別名のいずれかに一致することをチェックします。別名は、\-keystore で指定されたキーストア内またはデフォルトのキーストア内に定義されます。 ! .LP .SH "説明" ! .LP ! .LP ! \f3jarsigner\fP ツールは、次の 2 つの目的で使用します。 ! .LP ! .RS 3 ! .TP 3 ! 1. ! Java ARchive (JAR) ファイルに署名を付ける ! .TP 3 ! 2. ! 署名付き JAR ファイルの署名と整合性を検証する .RE ! ! .LP ! .LP ! JAR 機能を使うと、クラスファイル、イメージ、サウンド、およびその他のデジタルデータを単一のファイルにパッケージ化できるので、ファイルを迅速かつ容易に配布できます。開発者は、jar(1) という名前のツールを使って JAR ファイルを作成できます。技術的な観点から言えば、すべての ZIP ファイルも JAR ファイルとみなすことができます。 ただし、\f3jar\fP によって作成された JAR ファイル、または \f3jarsigner\fP によって処理された JAR ファイルには、META\-INF/MANIFEST.MF ファイルが含まれています。 ! .LP ! .LP ! 「デジタル署名」は、なんらかのデータ (「署名」の対象となるデータ) と、エンティティー (人、会社など) の非公開鍵とに基づいて計算されるビット列です。手書きの署名同様、デジタル署名には多くの利点があります。 ! .LP ! .RS 3 ! .TP 2 ! o ! 署名の生成に使われた非公開鍵と対になる公開鍵を使って計算を行うことで、デジタル署名が本物かどうかを検証できる ! .TP 2 ! o ! 非公開鍵が他人に知られない限り、デジタル署名の偽造は不可能である ! .TP 2 ! o ! デジタル署名は、その署名が付いたデータだけを対象とするものであり、ほかのデータの署名として機能することはない ! .TP 2 ! o ! 署名付きのデータは変更できない。 データが変更された場合は、その署名によってデータが本物ではないことが検証される .RE ! ! .LP ! .LP ! ファイルに対してエンティティーの署名を生成するには、まず、エンティティーは、そのエンティティーに関連する公開鍵と非公開鍵のペアを持つ必要があります。また、公開鍵を認証する 1 つまたは複数の証明書も必要です。「証明書」とは、あるエンティティーが発行したデジタル署名付きの文書で、別なエンティティーの公開鍵が特定の値であることを証明しています。 ! .LP ! .LP ! \f3jarsigner\fP は、「キーストア」に含まれる鍵と証明書情報を使って、JAR ファイルのデジタル署名を生成します。キーストアは、非公開鍵と、非公開鍵に関連付けられた X.509 証明書チェーンが収められたデータベースです。キーストアの作成と管理には、keytool(1) ユーティリティーを使います。 ! .LP ! .LP ! \f3jarsigner\fP は、エンティティーの非公開鍵を使って署名を生成します。署名付き JAR ファイルには特に、ファイルの署名に使用された非公開鍵に対応する公開鍵に対する、キーストア内の証明書のコピーが含まれています。\f3jarsigner\fP は、署名付き JAR ファイル内 (署名ブロックファイル内) にある証明書を使用してそのファイルのデジタル署名を検証できます。 ! .LP ! .LP ! \f3jarsigner\fP はタイムスタンプを含む署名を生成するので、システムやデプロイヤ (Java Plug\-in を含む) はJAR ファイルが署名証明書の有効期間中に署名されたかどうかをチェックできます。さらに、API を使用すると、アプリケーションからタイムスタンプ情報を取得できます。 ! .LP ! .LP ! 現時点では、\f3jarsigner\fP で署名できるのは、JDK の jar(1) ツールで作成された JAR ファイル、または ZIP ファイルだけです。JAR ファイルは ZIP ファイルと同じですが、JAR ファイルには META\-INF/MANIFEST.MF ファイルが含まれている点が異なります。META\-INF/MANIFEST.MF ファイルは、\f3jarsigner\fP が ZIP ファイルに署名を付けるときに自動的に作成されます。 ! .LP ! .LP ! デフォルトでは、\f3jarsigner\fP は JAR (または ZIP) ファイルに「署名」を付けます。署名付き JAR ファイルを「検証」する場合は、 \f2\-verify\fP オプションを指定します。 ! .LP ! .SS ! キーストアの別名 ! .LP ! .LP ! キーストアのすべてのエントリは、一意の「別名」を介してアクセスされます。 ! .LP ! .LP ! \f3jarsigner\fP を使って JAR ファイルに署名を付けるときは、署名の生成に必要な非公開鍵を含むキーストアエントリの別名を指定する必要があります。たとえば、次の例は、working ディレクトリの mystore という名前のキーストアに含まれる別名 duke に関連付けられた非公開鍵を使って、MyJARFile.jar という名前の JAR ファイルに署名を付けます。出力ファイルは指定されていないので、MyJARFile.jar は署名付きの JAR ファイルによって上書きされます。 ! .LP ! .nf ! \f3 ! .fl ! jarsigner \-keystore /working/mystore \-storepass \fP\f4<キーストアのパスワード>\fP\f3 ! .fl ! \-keypass \fP\f4<非公開鍵のパスワード>\fP\f3 MyJARFile.jar duke ! .fl ! \fP .fi ! ! .LP ! .LP ! キーストアはパスワードで保護されているので、ストアのパスワードを指定する必要があります。コマンド行でストアのパスワードを指定しないと、パスワードの入力を求められます。同様に、非公開鍵もキーストア内でパスワードによって保護されているため、非公開鍵のパスワードを指定する必要があります。コマンド行で非公開鍵のパスワードを指定していない、また、指定したパスワートが保存されているパスワードと違っている場合には、非公開鍵のパスワードの入力を求められます。 ! .LP ! .SS ! キーストアの場所 ! .LP ! .LP ! \f3jarsigner\fP には、 \f2使用するキーストアの URL を指定する \-keystore\fP があります。キーストア \f2は\fP デフォルトで、 \f2user.home\fP システムプロパティーで決まるユーザーのホームディレクトリの .keystore という名前のファイル内に格納されます。Solaris システムの場合、 \f2user.home\fP のデフォルトはユーザーの home ディレクトリになります。 ! .LP ! .LP ! \-keystore オプション \f2に指定した\fP 入力ストリームが \f2KeyStore.load\fP メソッドに渡される点に注意してください。URL として \f2NONE\fP が指定されている場合は、null のストリームが \f2KeyStore.load\fP メソッドに渡されます。 \f2NONE\fP は、 \f2KeyStore\fP がファイルベースではない場合、たとえばそれがハードウェアトークンデバイス上に存在している場合などに指定すべきです。 ! .LP ! .SS ! キーストアの実装 ! .LP ! .LP ! java.security パッケージ \f2で提供されている\fP KeyStore クラス \f2は、\fP キーストア内の情報へのアクセスおよび情報の変更を行うための、明確に定義されたインタフェースを提供します。キーストアの固定実装としては、それぞれが特定の「タイプ」のキーストアを対象とする複数の異なる実装が存在可能です。 ! .LP ! .LP ! 現在、キーストアの実装を使用するものとして、\f3keytool\fP と \f3jarsigner\fP の 2 つのコマンド行ツールと、\f3Policy Tool\fP という名前の 1 つの GUI ベースのツールがあります。KeyStore \f2は\fP public として使用可能なので、Java 2 SDK ユーザーは KeyStore を使ったほかのセキュリティーアプリケーションも作成できます。 ! .LP ! .LP ! キーストアには、Sun が提供する組み込みのデフォルトの実装があります。これは、JKS という名前の独自のキーストアタイプ (形式) を利用するもので、キーストアをファイルとして実装しています。この実装では、個々の非公開鍵は個別のパスワードによって保護され、キーストア全体の整合性も (非公開鍵とは別の) パスワードによって保護されます。 ! .LP ! .LP ! キーストアの実装は、プロバイダベースです。具体的には、 \f2KeyStore\fP によって提供されるアプリケーションインタフェースが「サービスプロバイダインタフェース」 (SPI) に基づいて実装されます。つまり、対応する抽象クラス \f2KeystoreSpi\fP が同じ \f2java.security\fP パッケージ内に存在しており、このクラスによって、「プロバイダ」が実装する必要のあるサービスプロバイダインタフェースメソッドが定義されています。ここで、「プロバイダ」とは、Java Security API によってアクセス可能なサービスのサブセットに対し、その固定実装を提供するパッケージまたはパッケージの集合のことです。したがって、キーストアの実装を提供するには、 ! .na ! \f2「Java 暗号化アーキテクチャー用プロバイダの実装方法」\fP @ ! .fi ! http://java.sun.com/javase/6/docs/technotes/guides/security/crypto/HowToImplAProvider.htmlで説明しているように、クライアントが「プロバイダ」を実装し、KeystoreSpi サブクラスの実装を提供する必要があります。 ! .LP ! .LP ! アプリケーションでは、KeyStore クラスが提供する getInstance ファクトリメソッドを使うことで、さまざまなプロバイダから異なる「タイプ」のキーストアの \f2実装を\fP 選択できます。キーストアのタイプは、キーストア情報の格納形式とデータ形式を定義するとともに、キーストア内の非公開鍵とキーストア自体の整合性を保護するために使われるアルゴリズムを定義します。異なるタイプのキーストアの実装には、互換性はありません。 ! .LP ! .LP ! \f3keytool\fP は、任意のファイルベースのキーストア実装で動作します。keytool は、コマンド行から渡されたキーストアの場所をファイル名として扱い、これを FileInputStream に変換して、FileInputStream からキーストアの情報をロードします。一方、\f3jarsigner\fP ツールと \f3policytool\fP ツールは、URL で指定可能な任意の場所からキーストアを読み込むことができます。 ! .LP ! .LP ! \f3jarsigner\fP と \f3keytool\fP の場合、\f2\-storetype\fP オプションを使ってコマンド行でキーストアのタイプを指定できます。\f3Policy Tool\fP の場合は、[Edit] メニューの [Change Keystore] コマンドを使ってキーストアのタイプを指定できます。 ! .LP ! .LP ! ユーザーがキーストアのタイプを明示的に指定しなかった場合、ツールは、単純にセキュリティープロパティーファイルで指定された \f2keystore.type\fP プロパティーの値に基づいて、キーストアの実装を選択します。このセキュリティープロパティーファイルは \f2java.security\fP と呼ばれ、SDK セキュリティープロパティーディレクトリ \f2java.home\fP/lib/security 内に存在しています。ここで、\f2java.home\fP は実行時環境のディレクトリ (SDK の \f2jre\fP ディレクトリまたは Java 2 Runtime Environment のトップレベルディレクトリ) です。 ! .LP ! .LP ! 各ツールは、 \f2keystore.type\fP の値を取得し、この値で指定されたタイプのキーストアを実装しているプロバイダが見つかるまで、現在インストールされているすべてのプロバイダを調べます。目的のプロバイダが見つかると、そのプロバイダからのキーストアの実装を使います。 ! .LP ! .LP ! \f2KeyStore\fP クラスに定義されている static メソッド \f2getDefaultType\fP を使用すると、アプリケーションやアプレットから \f2keystore.type\fP プロパティーの値を取得できます。次のコードは、デフォルトのキーストアタイプ \f2(keystore.type プロパティーで指定されたタイプ)\fP のインスタンスを生成します。 ! .LP ! .nf ! \f3 ! .fl ! KeyStore keyStore = KeyStore.getInstance(KeyStore.getDefaultType()); ! .fl ! \fP .fi ! ! .LP ! .LP ! デフォルトのキーストアタイプは JKS (Sun が提供する独自のタイプのキーストアの実装) です。これは、セキュリティープロパティーファイル内の次の行によって指定されています。 ! .LP ! .nf ! \f3 ! .fl ! keystore.type=jks ! .fl ! \fP .fi ! ! .LP ! .LP ! 注: キーストアのタイプの指定では、大文字と小文字は区別されません。たとえば、JKS と jks は同じものとして扱われます。 ! .LP ! .LP ! 各ツールでデフォルト以外のキーストアの実装を使用するには、上の行を変更して別のキーストアのタイプを指定します。たとえば、pkcs12 と呼ばれるタイプのキーストアの実装を提供しているプロバイダパッケージを使用するには、上の行を次のように変更します。 ! .LP ! .nf ! \f3 ! .fl ! keystore.type=pkcs12 ! .fl ! \fP .fi ! ! .LP ! .LP ! PKCS#11 プロバイダパッケージを使用する場合、その詳細については、「Java PKCS#11 Reference Guide」にある ! .na ! \f2「KeyTool and JarSigner」\fP @ ! .fi ! http://java.sun.com/javase/6/docs/technotes/guides/security/p11guide.html#KeyToolJarSigner節を参照してください。 ! .LP ! .SS ! サポートされるアルゴリズム ! .LP ! .LP ! \f3jarsigner\fP はデフォルトで、次のいずれかを使用して JAR ファイルに署名します。 ! .LP ! .RS 3 ! .TP 2 ! o ! SHA1 ダイジェストアルゴリズムを使った DSA (デジタル署名アルゴリズム) ! .TP 2 ! o ! SHA256 ダイジェストアルゴリズムを使用した RSA アルゴリズム ! .TP 2 ! o ! SHA256 と ECDSA (楕円曲線デジタル署名アルゴリズム) を使用した EC (楕円曲線) 暗号方式アルゴリズム .RE ! ! .LP ! .LP ! 具体的には、署名者の公開鍵と非公開鍵が DSA 鍵である場合、\f3jarsigner\fP は SHA1withDSA アルゴリズムを使って JAR ファイルに署名を付けます。署名者の鍵が RSA 鍵である場合、\f3jarsigner\fP は SHA256withRSA アルゴリズムを使って JAR ファイルに署名を付けます。署名者の鍵が EC 鍵である場合、\f3jarsigner\fP は SHA256withECDSA アルゴリズムを使って JAR ファイルに署名を付けます。 ! .LP ! .LP ! これらのデフォルトの署名アルゴリズムは、\f2\-sigalg\fP オプションを使ってオーバーライドできます。 ! .LP ! .SS ! 署名付き JAR ファイル ! .LP ! .LP ! \f3jarsigner\fP を使って JAR ファイルに署名を付けた場合、出力される署名付き JAR ファイルは入力 JAR ファイルと同じですが、次の 2 つの追加ファイルが META\-INF ディレクトリに置かれる点が異なります。 ! .LP ! .RS 3 ! .TP 2 ! o ! .SF 拡張子の付いた署名ファイル ! .TP 2 ! o ! .DSA、.RSA、または .EC を拡張子に持つ署名ブロックファイル .RE ! ! .LP ! .LP ! これら 2 つのファイルのベースファイル名は、 \f2\-sigFile\fP オプションの値から作成されます。たとえば、次のようにオプションを指定したとします。 ! .LP ! .nf ! \f3 ! .fl ! \-sigFile MKSIGN ! .fl ! \fP ! .fi ! ! .LP ! .LP ! この場合、ファイル名はそれぞれ MKSIGN.SF と MKSIGN.DSA になります。 ! .LP ! .LP ! コマンド行で \f2\-sigfile\fP オプションを指定しなかった場合、.SF ファイルと .DSA ファイルのベースファイル名は、コマンド行で指定された別名の先頭の 8 文字をすべて大文字に変換したものになります。別名が 8 文字未満の場合は、別名がそのまま使われます。別名の中に、署名ファイル名に使用できない文字が含まれている場合は、該当する文字を下線 (_) に置き換えてファイル名が作成されます。使用できる文字は、アルファベット、数字、下線 (_)、ハイフンです。 ! .LP ! \f3署名 (.SF) ファイル\fP ! .LP ! .LP ! 署名ファイル (.SF ファイル) は、\f3jarsigner\fP で署名を付けた JAR ファイルに常に含まれるマニフェストファイルと似ています。つまり、マニフェストファイル同様、.SF ファイルには、JAR ファイルに含まれているソースファイルごとに、次の 3 つの行があります。 ! .LP ! .RS 3 ! .TP 2 ! o ファイル名 - .TP 2 - o - 使われているダイジェストアルゴリズム (SHA) の名前 - .TP 2 - o - SHA ダイジェストの値 .RE ! ! .LP ! .LP ! マニフェストファイルでは、SHA ダイジェストの値は、ソースファイルのバイナリデータのダイジェスト (ハッシュ) です。一方、.SF ファイルでは、ソースファイルのダイジェストの値は、マニフェストファイル中の該当するソースファイルに対応する 3 行のハッシュです。 ! .LP ! .LP ! 署名ファイルには、デフォルトでマニフェストファイル全体のハッシュも含まれています。後述の「JAR ファイルの検証」で説明するように、このヘッダーの存在によって検証の最適化が可能になっています。 ! .LP ! \f3署名ブロックファイル\fP ! .LP ! .SF ファイルには署名が付けられ、署名は署名ブロックファイルに置かれます。このファイルには、キーストアからの証明書または証明書チェーンも符号化された形で含まれています。 証明書または証明書チェーンは、署名に使われた非公開鍵に対応する公開鍵を認証します。ファイルの拡張子は、使用されるダイジェストアルゴリズムに応じて .DSA、.RSA、.EC のいずれかになります。 ! .SS ! 署名タイムスタンプ ! .LP ! .LP ! \f2jarsigner\fP ツールは、JAR ファイルの署名時に署名タイムスタンプを生成して保存できます。さらに、 \f2jarsigner\fP は代替署名機構をサポートします。この動作は省略可能で、署名時に次の各オプションによって制御されます。 ! .LP ! .RS 3 ! .TP 2 ! o ! \f2\-tsa url\fP ! .TP 2 ! o ! \f2\-tsacert alias\fP ! .TP 2 ! o ! \f2\-altsigner class\fP ! .TP 2 ! o ! \f2\-altsignerpath classpathlist\fP .RE ! ! .LP ! .LP ! これらの各オプションの詳細については、後述の「オプション」節を参照してください。 ! .LP ! .SS ! JAR ファイルの検証 ! .LP ! .LP ! JAR ファイルの検証が成功するのは、署名が有効であり、かつ署名の生成以後に JAR ファイル内のどのファイルも変更されていない場合です。JAR ファイルの検証は、次の手順で行われます。 ! .LP ! .RS 3 ! .TP 3 ! 1. ! .SF ファイルそれ自体の署名を検証します。 ! .LP ! この手順では、各署名ブロック (.DSA) ファイルに格納されている署名が、実際に、公開鍵に対応する非公開鍵を使って生成されたものであることを確認します。 .DSA ファイルには、公開鍵の証明書 (または証明書チェーン) も含まれています。また、この手順では、目的の署名が、対応する署名 (.SF) ファイル内の有効な署名であるかどうかを調べ、.SF ファイルが改変されていないことも確認します。 ! .TP 3 ! 2. ! .SF ファイル内の各エントリのダイジェストをマニフェスト内の対応する各セクションと突き合わせて検証します。 ! .LP ! .SF ファイルには、マニフェストファイル全体のハッシュが格納されたヘッダーがデフォルトで含まれています。このヘッダーが存在する場合は、ヘッダー内のハッシュが実際にマニフェストファイルのハッシュと一致するかどうかを検証することができます。ハッシュが一致する場合は、次の手順に進みます。 ! .LP ! ハッシュが一致しない場合は、効率的には劣る方法を使って検証を行います。具体的には、.SF ファイル内の各ソースファイル情報セクションのハッシュが、マニフェストファイル内の対応するセクションのハッシュと一致するかどうかを確認します (「署名 (.SF) ファイル」を参照)。 ! .LP ! .SF ファイルのヘッダーに格納されたマニフェストファイルのハッシュと、実際のマニフェストファイルのハッシュとが一致しない場合は、署名 (および .SF ファイル) の生成後に、JAR ファイルに 1 つ以上のファイルが追加 \f2(jar ツールを使用)\fP された可能性があります。jar \f2ツール\fP を使ってファイルを追加した場合、マニフェストファイルは変更されますが (新しいファイル用のセクションが追加される)、.SF ファイルは変更されません。この場合、.SF ファイルのヘッダー以外のセクションに格納されたハッシュが、マニフェストファイル内の対応するセクションのハッシュと一致するときは、署名の生成時に JAR ファイル内に存在していたファイルのうち、どのファイルも変更されていないことになり、検証は成功したものとして扱われます。 ! .TP 3 ! 3. ! JAR ファイル内のファイルのうち、.SF ファイル内にエントリを持つ各ファイルを読み込みます。読み込み中にファイルのダイジェストを計算し、結果をマニフェストセクション内の該当するファイルのダイジェストと比較します。2 つのダイジェストは同じでなければならず、そうでない場合は検証が失敗します。 .RE ! ! .LP ! .LP ! 検証プロセスの途中でなんらかの重大な検証エラーが発生した場合、検証プロセスは中止され、セキュリティー例外がスローされます。スローされたセキュリティー例外は、\f3jarsigner\fP がキャッチして表示します。 ! .LP ! .SS ! 1 つの JAR ファイルを対象とする複数の署名 ! .LP ! .LP ! 1 つの JAR ファイルに対して \f3jarsigner\fP ツールを複数回実行し、実行のたびに、異なるユーザーの別名を指定すれば、JAR ファイルに複数のユーザーの署名を付けることができます。 ! .LP ! .nf ! \f3 ! .fl ! jarsigner myBundle.jar susan ! .fl ! jarsigner myBundle.jar kevin ! .fl ! \fP .fi ! ! .LP ! .LP ! JAR ファイルが複数回署名されている場合、その JAR ファイルには .SF ファイルと .DSA ファイルの対が複数含まれることになります。 .SF ファイルと .DSA ファイルの対は、1 回の署名に対して 1 つ作成されます。したがって、上の例で出力される JAR ファイルには、次の名前を持つファイルが含まれます。 ! .LP ! .nf ! \f3 ! .fl ! SUSAN.SF ! .fl ! SUSAN.DSA ! .fl ! KEVIN.SF ! .fl ! KEVIN.DSA ! .fl ! \fP .fi ! ! .LP ! .LP ! 注: JAR ファイルでは、JDK 1.1 の \f3javakey\fP ツールで生成された署名と \f3jarsigner\fP で生成された署名が混在できます。つまり、すでに \f3javakey\fP を使って署名が付けられている JAR ファイルに、\f3jarsigner\fP を使って署名を付けることができます。 ! .LP .SH "オプション" ! .LP ! .LP ! 以下では、\f3jarsigner\fP のオプションについて説明します。注: ! .LP ! .RS 3 ! .TP 2 ! o ! どのオプション名にも先頭にマイナス記号 (\-) が付く ! .TP 2 ! o ! オプションは任意の順序で指定できる ! .TP 2 ! o ! イタリック体の項目の実際の値 (オプションの値) は、ユーザーが指定する必要がある ! .TP 2 ! o ! \f2\-keystore\fP、 \f2\-storepass\fP、 \f2\-keypass\fP、 \f2\-sigfile\fP、 \f2\-sigalg\fP、 \f2\-digestalg\fP、および \f2\-signedjar\fP オプションを使用できるのは、署名付き JAR ファイルを検証する場合ではなく、JAR ファイルに署名する場合だけです。同様に、別名をコマンド行で指定するのは、JAR ファイルに署名を付ける場合だけである .RE ! ! .LP ! .RS 3 ! .TP 3 ! \-keystore url ! キーストアの場所を示す URL を指定します。デフォルトは、ユーザーのホームディレクトリ内のファイル \f2.keystore\fP です。 ユーザーのホームディレクトリは、user.home システムプロパティーによって決まります。 ! .LP ! 署名するときはキーストアが必要です。 このため、デフォルトのキーストアが存在しない場合、あるいはデフォルト以外のほかのキーストアを使用する場合は、キーストアを明示的に指定する必要があります。 ! .LP ! 検証するときはキーストアは必要ありません。ただし、キーストアが指定されているか、あるいはデフォルトのキーストアが存在していて、さらに \f2\-verbose\fP オプションも指定されていた場合、JAR ファイルの検証に使用される証明書がそのキーストアに 1 つでも含まれているかどうかに関する追加情報が出力されます。 ! .LP ! 注: \f2\-keystore\fP の引数には、URL の代わりにファイル名 (とパス) を指定できます。 ファイル名 (とパス) を指定した場合は、「file:」URL として扱われます。たとえば、次のように指定できます。 ! .nf ! \f3 ! .fl ! \-keystore \fP\f4filePathAndName\fP\f3 ! .fl ! \fP ! .fi ! .LP ! これは、次の指定と同じものとして扱われます。 ! .nf ! \f3 ! .fl ! \-keystore file:\fP\f4filePathAndName\fP\f3 ! .fl ! \fP ! .fi ! .LP ! JRE の \f2$JAVA_HOME/lib/security\fP ディレクトリに格納された \f2java.security\fP セキュリティープロパティーファイル内で Sun PKCS#11 プロバイダが設定されている場合、keytool と jarsigner は PKCS#11 トークンに基づいて動作できます。次のオプションを指定します。 ! .RS 3 ! .TP 2 ! o ! \f2\-keystore NONE\fP ! .TP 2 ! o ! \f2\-storetype PKCS11\fP ! .RE ! .LP ! たとえば、次のコマンドは、設定された PKCS#11 トークンの内容を一覧表示します。 ! .nf ! \f3 ! .fl ! jarsigner \-keystore NONE \-storetype PKCS11 \-list ! .fl ! ! .fl ! \fP .fi ! .TP 3 ! \-storetype storetype ! インスタンスを生成するキーストアのタイプを指定します。デフォルトのキーストアタイプは、セキュリティープロパティーファイル内の keystore.type プロパティーの値で指定されたタイプです。この値は、 \f2java.security.KeyStore\fP の static getDefaultType メソッド \f2で取得できます。\fP. ! .LP ! \-storepass オプションを使って PCKS#11 トークンの PIN を \f2指定することも\fP できます。何も指定しなかった場合、keytool と jarsigner はユーザーにトークン PIN の 入力を求めます。トークンに保護された認証パス (専用の PIN パッドや生体読み取り機など) がある場合、\f2\-protected\fP オプションを指定する必要がありますが、パスワードオプションを指定する必要はありません。 ! .TP 3 ! \-storepass[:env | :file] argument ! .LP ! キーストアにアクセスするのに必要なパスワードを指定します。このオプションが必要なのは、JAR ファイルに署名を付けるときだけです (JAR ファイルを検証するときは不要)。その場合、 \f2\-storepass\fP オプションをコマンド行で指定しなかった場合は、新しいパスワードの入力を求められます。 ! .LP ! 修飾子 \f2env\fP または \f2file\fP が指定されていない場合、パスワードの値は \f2argument\fP になります。それ以外の場合、パスワードは次のようにして取得されます。 ! .RS 3 ! .TP 2 ! o ! \f2env\fP: \f2argument\fP という名前の環境変数からパスワードを取得する ! .TP 2 ! o ! \f2file\fP: \f2argument\fP という名前のファイルからパスワードを取得する ! .RE ! .LP ! 注: テストを目的とする場合、またはセキュリティー保護されたシステムを使用している場合以外は、コマンド行やスクリプトでパスワードを指定しないでください。 ! .TP 3 ! \-keypass[:env | :file] argument ! .LP ! コマンド行で指定された別名に対応するキーストアエントリの非公開鍵を保護するのに使うパスワードを指定します。\f3jarsigner\fP を使って JAR ファイルに署名を付けるときは、パスワードが必要です。コマンド行でパスワードが指定されておらず、必要なパスワードがストアのパスワードと異なる場合は、パスワードの入力を求められます。 ! .LP ! 修飾子 \f2env\fP または \f2file\fP が指定されていない場合、パスワードの値は \f2argument\fP になります。それ以外の場合、パスワードは次のようにして取得されます。 ! .RS 3 ! .TP 2 ! o ! \f2env\fP: \f2argument\fP という名前の環境変数からパスワードを取得する ! .TP 2 ! o ! \f2file\fP: \f2argument\fP という名前のファイルからパスワードを取得する ! .RE ! .LP ! 注: テストを目的とする場合、またはセキュリティー保護されたシステムを使用している場合以外は、コマンド行やスクリプトでパスワードを指定しないでください。 ! .TP 3 ! \-sigfile file ! .SF ファイルと .DSA ファイルの生成に使うベースファイル名を指定します。たとえば、\f2file\fP に DUKESIGN を指定すると、生成される .SF ファイルと .DSA ファイルの名前は、それぞれ DUKESIGN.SF と DUKESIGN.DSA になります。 これらのファイルは、署名付き JAR ファイルの META\-INF ディレクトリに置かれます。 ! .LP ! \f2file\fP に使用できる文字は「a\-zA\-Z0\-9_\-」です。つまり、文字、数字、下線、およびハイフンだけを使用できます。注: .SF および .DSA のファイル名では、小文字はすべて大文字に変換されます。 ! .LP ! \-sigfile \f2\-sigfile\fP オプションを指定しなかった場合、.SF ファイルと .DSA ファイルのベースファイル名は、コマンド行で指定された別名の先頭の 8 文字をすべて大文字に変換したものになります。別名が 8 文字未満の場合は、別名がそのまま使われます。別名の中に、署名ファイル名に使用できない文字が含まれている場合は、該当する文字を下線 (_) に置き換えてファイル名が作成されます。 ! .TP 3 ! \-sigalg algorithm ! JAR ファイルの署名に使用する署名アルゴリズムの名前を指定します。 ! .LP ! 標準署名アルゴリズム名の一覧については、「Java Cryptography Architecture」にある ! .na ! \f2「Appendix A 」\fP @ ! .fi ! http://java.sun.com/javase/6/docs/technotes/guides/security/crypto/CryptoSpec.html#AppAを参照してください。このアルゴリズムは、JAR ファイルの署名に使用する秘密鍵と互換性のあるものでなければなりません。このオプションを指定しなかった場合、秘密鍵のタイプに応じて SHA1withDSA、SHA256withRSA、SHA256withECDSA のいずれかが使用されます。指定されたアルゴリズムの実装を提供するプロバイダが静的にインストールされているか、あるいはユーザーがそのようなプロバイダを \f2\-providerClass\fP オプションを使って指定する必要があります。そうでない場合、コマンドの実行が失敗します。 ! .TP 3 ! \-digestalg algorithm ! JAR ファイルのエントリをダイジェストする際に使用するメッセージダイジェストアルゴリズムの名前を指定します。 ! .LP ! 標準メッセージダイジェストアルゴリズム名の一覧については、「Java Cryptography Architecture」にある ! .na ! \f2「Appendix A 」\fP @ ! .fi ! http://java.sun.com/javase/6/docs/technotes/guides/security/crypto/CryptoSpec.html#AppAを参照してください。このオプションを指定しなかった場合、SHA256 が使用されます。指定されたアルゴリズムの実装を提供するプロバイダが静的にインストールされているか、あるいはユーザーがそのようなプロバイダを \f2\-providerClass\fP オプションを使って指定する必要があります。そうでない場合、コマンドの実行が失敗します。 ! .TP 3 ! \-signedjar file ! 署名付き JAR ファイルの名前を指定します。 ! .LP ! コマンド行で名前を指定しなかった場合は、入力 JAR ファイル (署名の対象となる JAR ファイル) の名前と同じ名前が使われます。 この場合、入力 JAR ファイルは署名付き JAR ファイルによって上書きされます。 ! .TP 3 ! \-verify ! コマンド行でこのオプションが指定されている場合は、指定された JAR ファイルが検証されます。 JAR ファイルへの署名は行われません。検証が成功すると、「jar verified」 というメッセージが表示されます。署名されていない JAR ファイル、またはサポートされていないアルゴリズム (RSA プロバイダのインストールを終了していない場合の RSA など) を使って署名された JAR ファイルを検証しようとすると、「jar is unsigned. (signatures missing or not parsable)」というメッセージが表示されます。 ! .LP ! 署名付き JAR ファイルは、\f3jarsigner\fP または JDK 1.1 の \f3javakey\fP ツール、あるいはその両方を使って検証できます。 ! .LP ! 検証についての詳細は、「JAR ファイルの検証」を参照してください。 ! .TP 3 \-certs ! コマンド行で、 \f2\-verify\fP および \f2\-verbose\fP オプションとともにこのオプションを指定した場合、JAR ファイルの各署名者の証明書情報が出力に含まれます。証明書情報には次のものが含まれます。 ! .RS 3 ! .TP 2 ! o ! 署名者の公開鍵を証明する (.DSA ファイルに格納された) 証明書の種類の名前 ! .TP 2 ! o ! 証明書が X. 証明書 (つまり、 \f2java.security.cert.X509Certificate\fP のインスタンス) である場合は、署名者の識別名 ! .RE ! .LP ! キーストアの確認も行われます。コマンド行でキーストアの値が指定されていない場合、デフォルトのキーストアファイルがあれば、検査されます。署名者の公開鍵の証明書がキーストア内のエントリと一致した場合は、次の情報も表示されます。 ! .RS 3 ! .TP 2 ! o ! 署名者に該当するキーストアエントリの別名。この別名は括弧で囲まれます。 ただし、キーストアではなく JDK 1.1 のアイデンティティーデータベースに由来する署名者の場合は、括弧ではなく大括弧で囲まれます。 ! .RE ! .TP 3 ! \-certchain file ! コマンド行で指定した別名で決まるキーストアエントリの非公開鍵に関連付けられた証明書チェーンが完全でない場合に、使用すべき証明書チェーンを指定します。そのような状態になる可能性があるのは、キーストアがハードウェアトークン上に格納されているが、そこには証明書チェーンの全体を保持できるだけの領域が存在していないような場合です。このファイルは一連の X.509 証明書が順に連結されたもの、PKCS#7 形式の単一データブロックのいずれかとなり、そのエンコーディング形式はバイナリエンコーディング形式、Internet RFC 1421 標準で規定される印刷可能エンコーディング形式 (BASE64 エンコーディングとも呼ばれる) のいずれかになります。 ! .TP 3 \-verbose ! コマンド行でこのオプションが指定されている場合、\f3jarsigner\fP は「冗長」モードで動作し、JAR の署名または検証の進行状況に関する追加情報を出力します。 ! .TP 3 \-internalsf ! 以前は、JAR ファイルの署名時に生成された .DSA (署名ブロック) ファイルの中に、生成された .SF ファイル (署名ファイル) の完全なコピーが符号化された形で含まれていました。この動作は変更されました。この動作は変更になり、現在では、出力 JAR ファイル全体のサイズを小さくするために、デフォルトでは .SF ファイルが .DSA ファイルに含まれないようになっています。ただし、 \f2\-internalsf\fP オプションをコマンド行で指定すると、以前と同じように動作します。\f3このオプションは、テストを行う場合には便利ですが、それ以外には使用しないでください。 このオプションを使用すると、有益な最適化が行われなくなります。\fP ! .TP 3 \-sectionsonly ! コマンド行でこのオプションが指定されている場合、JAR ファイルの署名時に生成される .SF ファイル (署名ファイル) には、マニフェストファイル全体のハッシュを含むヘッダーは追加されません。この場合、.SF ファイルに含まれるのは、JAR ファイル内の各ソースファイルに関する情報およびハッシュだけです。詳細は、「署名 (.SF) ファイル」を参照してください。 ! .LP ! デフォルトでは、最適化を行うために、マニフェストファイル全体のハッシュを含むヘッダーが追加されます。ヘッダーが存在する場合は、JAR ファイルの検証時に、まずヘッダー内のハッシュが、マニフェストファイル全体のハッシュと実際に一致するかどうかが確認されます。ハッシュが一致する場合、検証は次の手順に進みます。ハッシュが一致しない場合は、効率的には劣る方法を使って検証を行います。 具体的には、.SF ファイル内の各ソースファイル情報セクションのハッシュが、マニフェストファイル内の対応するセクションのハッシュと一致するかどうかを確認します。 ! .LP ! 詳細は、「JAR ファイルの検証」を参照してください。 ! .LP ! \f3このオプションは、テストを行う場合には便利ですが、それ以外には使用しないでください。 このオプションを使用すると、有益な最適化が行われなくなります。\fP ! .TP 3 \-protected ! \f2true\fP または \f2false\fP。専用 PIN リーダーなどの保護された認証パスを介してパスワードを指定する必要がある場合には、この値を \f2true\fP に指定してください。 ! .TP 3 ! \-providerClass provider\-class\-name ! サービスプロバイダがセキュリティープロパティーファイル (\f2java.security\fP) のリストに入っていないときに、暗号化サービスプロバイダのマスタークラスファイルの名前を指定します。 ! .LP ! \f2\-providerArg\fP \f2ConfigFilePath\fP オプションと組み合わせて使用します。keytool と jarsigner はプロバイダを動的にインストールします (ここで、\f2ConfigFilePath\fP はトークン設定ファイルへのパスです)。セキュリティープロパティーファイル内で Sun PKCS#11 プロバイダが設定されていない場合に PKCS#11 キーストアを一覧表示するコマンドの例を次に示します。 ! .nf ! \f3 ! .fl ! jarsigner \-keystore NONE \-storetype PKCS11 \\ ! .fl ! \-providerClass sun.security.pkcs11.SunPKCS11 \\ ! .fl ! \-providerArg /foo/bar/token.config \\ ! .fl \-list - .fl - \fP .fi ! .TP 3 ! \-providerName providerName ! \f2java.security\fP セキュリティープロパティーファイル内で 2 つ以上のプロバイダが設定されている場合、\f2\-providerName\fP オプションを使って特定のプロバイダインスタンスを選択できます。このオプションの引数は、プロバイダの名前です。 ! .LP ! Sun PKCS#11 プロバイダの場合、\f2providerName\fP は \f2SunPKCS11\-\fP\f2TokenName\fP という形式になります。 ここで「\f2TokenName\fP」は、プロバイダインスタンスが構成された名前の接尾辞です。 詳細は ! .na ! \f2構成属性の表\fP @ ! .fi ! http://java.sun.com/javase/6/docs/technotes/guides/security/p11guide.html#ATTRSを参照してください。たとえば、以下のコマンドでは、名前接尾辞 \f2SmartCard\fP の PKCS#11 キーストアプロバイダインスタンスの内容をリストします。 ! .nf ! \f3 ! .fl ! jarsigner \-keystore NONE \-storetype PKCS11 \\ ! .fl ! \-providerName SunPKCS11\-SmartCard \\ ! .fl \-list - .fl - \fP .fi ! .TP 3 ! できますjavaoption ! 指定された \f2javaoption\fP 文字列を Java インタプリタに直接渡します。\f3jarsigner\fP は、実際には Java インタプリタに対する「ラッパー」です。このオプションには、空白を含めることはできません。このオプションは、実行環境またはメモリー使用を調整する場合に便利です。使用可能なインタプリタオプションの一覧を表示するには、 \f2java \-h\fP または \f2java \-X\fP とコマンド行から入力します。 ! .LP ! .TP 3 ! \-tsa url ! \f2「\-tsa http://example.tsa.url」\fP が JAR ファイルの署名時にコマンド行に表示される場合、署名のタイムスタンプが生成されます。URL \f2http://example.tsa.url\fP は、TSA (Time Stamping Authority) の場所を特定します。これは、 \f2\-tsacert\fP オプションで検出された URL をオーバーライドします。 \f2\-tsa\fP オプションでは、TSA の公開鍵証明書をキーストアに配置する必要はありません。 ! .LP ! タイムスタンプを生成するために、 \f2jarsigner\fP は、 ! .na ! \f2RFC 3161\fP @ ! .fi ! http://www.ietf.org/rfc/rfc3161.txt で定義されている タイムスタンププロトコル (TSP) を使用して TSA と通信します。成功すると、TSA から返されたタイムスタンプトークンは署名ブロックファイルの署名とともに保存されます。 ! .LP ! .TP 3 ! \-tsacert alias ! \f2「\-tsacert alias」\fP が JAR ファイルの署名時にコマンド行に表示される場合、署名のタイムスタンプが生成されます。 \f2alias\fP は、キーストア内の現在有効な TSA の公開鍵証明書を特定します。エントリの証明書で、TSA の場所を特定する URL を含む Subject Information Access 拡張機能が確認されます。 ! .LP ! TSA の公開鍵証明書は、 \f2\-tsacert を使った場合、キーストアに配置されている必要があります。\fP. ! .LP ! .TP 3 ! \-altsigner class ! 代替署名機構を使用することを指定します。完全修飾クラス名は、com.sun.jarsigner.ContentSigner 抽象クラスを拡張するクラスファイルを \f2特定します。\fP. このクラスファイルへのパスは、 \f2\-altsignerpath\fP オプションによって定義されます。 \f2\-altsigner\fP オプションが使用されると、 \f2jarsigner\fP は、指定されたクラスが提供する署名機構を使用します。そうでない場合、 \f2jarsigner\fP はデフォルトの署名機構を使用します。 ! .LP ! たとえば、 \f2com.sun.sun.jarsigner.AuthSigner\fP という名前のクラスが提供する署名機構を使用するには、 \f2jarsigner\fP オプション \f2「\-altsigner com.sun.jarsigner.AuthSigner」を使用します。\fP ! .LP ! .TP 3 ! \-altsignerpath classpathlist ! クラスファイル (そのクラスファイル名は前述の \f2\-altsigner\fP オプションで指定される) およびそのクラスが依存するすべての JAR ファイルへのパスを指定します。クラスファイルが JAR ファイル内にある場合、以下の例のように JAR ファイルへのパスが指定されます。 ! .LP ! 絶対パスまたは現在のディレクトリからの相対パスを指定できます。 \f2classpathlist\fP に複数のパスや JAR ファイルが含まれる場合には、それらを Solaris の場合はコロン (\f2:\fP) で、Windows の場合はセミコロン (\f2;\fP) でそれぞれ区切ります。目的のクラスがすでに検索パス内にある場合は、このオプションは不要です。 ! .LP ! クラスファイルを含む、JAR ファイルへのパスを指定する例を示します。 ! .nf ! \f3 ! .fl ! \-altsignerpath /home/user/lib/authsigner.jar ! .fl ! \fP ! .fi ! .LP ! JAR ファイル名が含まれていることに注意してください。 ! .LP ! クラスファイルを含む JAR ファイルへのパスを指定する例を示します。 .nf - \f3 - .fl \-altsignerpath /home/user/classes/com/sun/tools/jarsigner/ - .fl - \fP .fi ! .LP ! JAR ファイル名は含まれていないことに留意してください。 ! .TP 3 \-strict ! 署名または検証処理中に、何らかの警告メッセージが表示される場合があります。コマンド行でこのオプションを指定すると、見つかった警告メッセージがツールの終了コードに反映されます。詳細は「警告」の項を参照してください。 ! .TP 3 ! \-verbose:sub\-options ! 検証処理で、 \f2\-verbose\fP オプションは、表示する情報の量を決定するサブオプションを取ります。 \f2\-certs\fP も指定した場合、デフォルトモード (またはサブオプション all) では、エントリが処理されるたびにそれらの各エントリが表示され、そのあとに JAR ファイルの各署名者の証明書情報も表示されます。 \f2\-certs\fP と \f2\-verbose:grouped\fP サブオプションを指定した場合、同じ署名者情報を持つエントリとその証明書情報が、いっしょにグループ化されて表示されます。 \f2\-certs\fP と \f2\-verbose:summary\fP サブオプションを指定した場合、同じ署名者情報を持つエントリとその証明書情報がいっしょにグループ化されて表示されますが、各エントリの詳細が「1 つのエントリ (およびそれ以上)」として要約されて表示されます。詳細は例の項を参照してください。 .RE - - .LP .SH "例" ! .LP ! .SS ! JAR ファイルの署名 ! .LP ! .LP ! bundle.jar という名前の JAR ファイルがあるとします。このファイルに、キーストアの別名が jane であるユーザーの非公開鍵を使って、署名を付けるとします。この場合、次のコマンドを実行すると、JAR ファイルに署名を付けて sbundle.jar という署名付き JAR ファイルを作成できます。 ! .LP ! .nf ! \f3 ! .fl ! jarsigner \-keystore /working/mystore \-storepass \fP\f4<キーストアのパスワード>\fP\f3 ! .fl ! \-keypass \fP\f4<非公開鍵のパスワード>\fP\f3 \-signedjar sbundle.jar bundle.jar jane ! .fl ! \fP ! .fi ! ! .LP ! .LP ! 上のコマンドでは \f2\-sigfile\fP が指定されていないため、署名付き JAR ファイルに格納される .SF ファイルと .DSA ファイルの名前は、別名からデフォルト名がつけられます。つまり、それらの名前は \f2JANE.SF\fP および \f2JANE.DSA\fP になります。 ! .LP ! .LP ! ストアのパスワードと非公開鍵のパスワードをあとで入力する場合は、上のコマンドを短縮して次のように入力できます。 ! .LP ! .nf ! \f3 ! .fl ! jarsigner \-keystore /working/mystore ! .fl ! \-signedjar sbundle.jar bundle.jar jane ! .fl ! \fP ! .fi ! ! .LP ! .LP ! デフォルトのキーストア (ホームディレクトリ内の .keystore という名前のキーストア) を使用する場合は、次に示すように、キーストアの指定を省略できます。 ! .LP ! .nf ! \f3 ! .fl ! jarsigner \-signedjar sbundle.jar bundle.jar jane ! .fl ! \fP ! .fi ! ! .LP ! .LP ! 最後に、入力 JAR ファイル (\f2bundle.jar\fP) を署名付き JAR ファイルで単純に上書きする場合は、次のように \f2\-signedjar\fP オプションを指定する必要はありません。 ! .LP ! .nf ! \f3 ! .fl ! jarsigner bundle.jar jane ! .fl ! \fP ! .fi ! ! .LP ! .SS ! 署名付き JAR ファイルの検証 ! .LP ! .LP ! 次に示すのは、署名付き JAR ファイルを検証し、署名が有効で JAR ファイルが改変されていないことを確認するためのコマンド例です。 ! .LP ! .nf ! \f3 ! .fl ! jarsigner \-verify sbundle.jar ! .fl ! \fP ! .fi ! ! .LP ! .LP ! 検証が成功すると、次のようなメッセージが表示されます。 ! .LP ! .nf ! \f3 ! .fl ! jar verified. ! .fl ! \fP .fi ! ! .LP ! .LP ! というプロンプトが表示されます。検証が成功しなかった場合は、エラーメッセージが表示されます。 ! .LP ! .LP ! \-verbose オプションを使うと、 \f2より多くの情報が\fP 表示されます。\-verbose オプション付きで \f3jarsigner\fP \f2を使用する例とその出力例を、\fP 次に示します。 ! .LP ! .nf ! \f3 ! .fl ! jarsigner \-verify \-verbose sbundle.jar ! .fl ! ! .fl ! 198 Fri Sep 26 16:14:06 PDT 1997 META\-INF/MANIFEST.MF ! .fl ! 199 Fri Sep 26 16:22:10 PDT 1997 META\-INF/JANE.SF ! .fl ! 1013 Fri Sep 26 16:22:10 PDT 1997 META\-INF/JANE.DSA ! .fl ! smk 2752 Fri Sep 26 16:12:30 PDT 1997 AclEx.class ! .fl ! smk 849 Fri Sep 26 16:12:46 PDT 1997 test.class ! .fl ! ! .fl ! s = 署名が検証されました ! .fl ! m = マニフェストにエントリが記載されています ! .fl ! k = キーストアで 1 つ以上の証明書が見つかりました ! .fl ! ! .fl ! JAR が検証されました。 ! .fl ! \fP ! .fi ! ! .LP ! .SS ! 証明書情報を使った検証 ! .LP ! .LP ! 検証時に \-verify と \-verbose オプションに加えて \f2\-certs\fP オプションを指定した場合は、 および JAR ファイルの各署名者の証明書情報も出力されます。これには、証明書タイプ、署名者識別名情報 (X.509 証明書の場合のみ)、および JAR ファイルの公開鍵の証明書がキーストアエントリの証明書に一致した場合には、括弧で囲まれた署名者のキーストア別名が含まれます。たとえば、 ! .LP ! .nf ! \f3 ! .fl ! jarsigner \-keystore /working/mystore \-verify \-verbose \-certs myTest.jar ! .fl ! ! .fl ! 198 Fri Sep 26 16:14:06 PDT 1997 META\-INF/MANIFEST.MF ! .fl ! 199 Fri Sep 26 16:22:10 PDT 1997 META\-INF/JANE.SF ! .fl ! 1013 Fri Sep 26 16:22:10 PDT 1997 META\-INF/JANE.DSA ! .fl ! 208 Fri Sep 26 16:23:30 PDT 1997 META\-INF/JAVATEST.SF ! .fl ! 1087 Fri Sep 26 16:23:30 PDT 1997 META\-INF/JAVATEST.DSA ! .fl ! smk 2752 Fri Sep 26 16:12:30 PDT 1997 Tst.class ! .fl ! ! .fl ! X.509, CN=Test Group, OU=Java Software, O=Sun Microsystems, L=CUP, S=CA, C=US (javatest) ! .fl ! X.509, CN=Jane Smith, OU=Java Software, O=Sun, L=cup, S=ca, C=us (jane) ! .fl ! ! .fl ! s = 署名が検証されました ! .fl ! m = マニフェストにエントリが記載されています ! .fl ! k = キーストアで 1 つ以上の証明書が見つかりました ! .fl ! ! .fl ! JAR が検証されました。 ! .fl ! \fP .fi ! ! .LP ! .LP ! 署名者の証明書が X.509 証明書でない場合は、識別名情報は表示されません。その場合には、証明書のタイプと別名だけが表示されます。たとえば、証明書が PGP 証明書で、別名が bob の場合は、次のように表示されます。 ! .LP ! .nf ! \f3 ! .fl ! PGP, (bob) ! .fl ! \fP .fi ! ! .LP ! .SS ! アイデンティティーデータベースの署名者を含む JAR ファイルの検証 ! .LP ! .LP ! JAR ファイルが、JDK 1.1 の \f3javakey\fP ツールを使って署名されている場合、署名者はアイデンティティーデータベース内の別名です。この場合、検証の出力には i という記号が含まれます。JAR ファイルが、アイデンティティーデータベース内の別名とキーストア内の別名の両方によって署名されている場合は、k と i の両方が表示されます。 ! .LP ! .LP ! \f2\-certs\fP オプションを指定した場合、キーストアの別名は括弧で囲まれるのに対し、アイデンティティーデータベース内の別名は角括弧で囲まれて表示されます。次に例を示します。 ! .LP ! .nf ! \f3 ! .fl ! jarsigner \-keystore /working/mystore \-verify \-verbose \-certs writeFile.jar ! .fl ! ! .fl ! 198 Fri Sep 26 16:14:06 PDT 1997 META\-INF/MANIFEST.MF ! .fl ! 199 Fri Sep 26 16:22:10 PDT 1997 META\-INF/JANE.SF ! .fl ! 1013 Fri Sep 26 16:22:10 PDT 1997 META\-INF/JANE.DSA ! .fl ! 199 Fri Sep 27 12:22:30 PDT 1997 META\-INF/DUKE.SF ! .fl ! 1013 Fri Sep 27 12:22:30 PDT 1997 META\-INF/DUKE.DSA ! .fl ! smki 2752 Fri Sep 26 16:12:30 PDT 1997 writeFile.html ! .fl ! ! .fl ! X.509, CN=Jane Smith, OU=Java Software, O=Sun, L=cup, S=ca, C=us (jane) ! .fl ! X.509, CN=Duke, OU=Java Software, O=Sun, L=cup, S=ca, C=us [duke] ! .fl ! ! .fl ! s = 署名が検証されました ! .fl ! m = マニフェストにエントリが記載されています ! .fl ! k = キーストアで 1 つ以上の証明書が見つかりました ! .fl ! i = アイデンティティースコープで 1 つ以上の証明書が見つかりました ! .fl ! ! .fl ! JAR が検証されました。 ! .fl ! \fP .fi ! ! .LP ! .LP ! 別名 duke は角括弧で囲まれているので、この別名はキーストアの別名ではなく、アイデンティティーデータベースの別名です。 ! .LP ! .SH "警告" ! .LP ! 署名/検証処理中には、jarsigner からさまざまな警告が表示される可能性があります。これらの警告コードは次のように定義されています。 ! .nf ! \f3 ! .fl ! hasExpiringCert 2 ! .fl ! この JAR に含まれるエントリの署名者の証明書が 6 か月以内に期限切れになります ! .fl ! ! .fl ! hasExpiredCert 4 ! .fl ! この JAR に含まれるエントリの署名者の証明書が期限切れになっています。 ! .fl ! ! .fl ! notYetValidCert 4 ! .fl ! この JAR に含まれるエントリの署名者の証明書がまだ有効になっていません。 ! .fl ! ! .fl ! chainNotValidated 4 ! .fl ! この JAR に含まれるエントリの証明書チェーンの検証を正しく行えません。 ! .fl ! ! .fl ! badKeyUsa ge 8 ! .fl ! この JAR に含まれるエントリの署名者の証明書の KeyUsage 拡張がコードの署名を許可していません。 ! .fl ! ! .fl ! badExtendedKeyUsage 8 ! .fl ! この JAR に含まれるエントリの署名者の証明書の ExtendedKeyUsage 拡張が ! .fl ! コードの署名を許可していません。 ! .fl ! ! .fl ! badNetscapeCertType 8 ! .fl ! この JAR に含まれるエントリの署名者の証明書の NetscapeCertType 拡張が ! .fl ! コードの署名を許可していません。 ! .fl ! ! .fl ! hasUnsignedEntry 16 ! .fl ! この JAR には、完全性チェックが行われていない署名なしエントリが含まれています。 ! .fl ! ! .fl ! notSignedByAlias 32 ! .fl ! この JAR には、指定された別名によって署名されていない署名付きエントリが含まれています ! .fl ! ! .fl ! aliasNotInStore 32 ! .fl ! この JAR には、このキーストアの別名によって署名されていない署名付きエントリが含まれています ! .fl ! ! .fl ! \fP .fi ! .LP ! .LP ! \f2\-strict\fP オプションを指定した場合、検出された警告の OR を取った値がツールの終了コードとして返されます。たとえば、エントリの署名に使用される証明書が期限切れになっていて、かつその証明書の keyUsage 拡張でファイルの署名が許可されていない場合、終了コード 12 (=4+8) が返されます。 ! .LP ! .LP ! \f3注\fP: UNIX で使用可能な値は 0 から 255 だけであるため、終了コードは再利用されます。いずれにしても、署名/検証処理が失敗すると、次の終了コードが返されます。 ! .LP ! .nf ! \f3 ! .fl ! failure 1 ! .fl ! \fP .fi ! ! .LP ! .SS ! JDK 1.1 との互換性 ! .LP ! .LP ! \f3keytool\fP ツールと \f3jarsigner\fP ツールは、JDK 1.1 で提供されていた \f3javakey\fP ツールを完全に置き換えるものです。これらの新しいツールは、キーストアと非公開鍵をパスワードで保護する機能や、署名の生成に加えて署名を検証する機能など、\f3javakey\fP より多くのを機能を備えています。 ! .LP ! .LP ! 新しいキーストアアーキテクチャーは、\f3javakey\fP が作成して管理していたアイデンティティーデータベースに代わるものです。キーストア形式と、JDK 1.1 の \f3javakey\fP が使っていたデータベース形式との間には下位互換性はありません。ただし、次のことは可能です。 ! .LP ! .RS 3 ! .TP 2 ! o ! \f3keytool\fP の \f2\-identitydb\fP コマンドを使うと、アイデンティティーデータベースの情報をキーストアにインポートできます。 ! .TP 2 ! o ! \f3jarsigner\fP は、以前に \f3javakey\fP を使って署名された JAR ファイルに署名を付けることができます。 ! .TP 2 ! o ! \f3jarsigner\fP は、\f3javakey\fPを使って署名された JAR ファイルを検証できます。したがって、jarsigner は、Java 2 SDK のキーストアではなく JDK 1.1 のアイデンティティーデータベースからの署名者別名を認識し、これらを対象に処理を行うことができます。 .RE ! .LP ! .LP ! 次の表は、JDK 1.1.x で署名された JAR ファイルが、Java 2 プラットフォームでどのように扱われるかを示しています。 ! .LP ! .LP ! .TS ! .if \n+(b.=1 .nr d. \n(.c-\n(c.-1 ! .de 35 ! .ps \n(.s ! .vs \n(.vu ! .in \n(.iu ! .if \n(.u .fi ! .if \n(.j .ad ! .if \n(.j=0 .na ! .. ! .nf ! .nr #~ 0 ! .if n .nr #~ 0.6n ! .ds #d .d ! .if \(ts\n(.z\(ts\(ts .ds #d nl ! .fc ! .nr 33 \n(.s ! .rm 80 81 82 83 84 ! .nr 34 \n(.lu ! .eo ! .am 80 ! .br ! .di a+ ! .35 ! .ft \n(.f ! .ll \n(34u*1u/6u ! .if \n(.l<\n(80 .ll \n(80u ! .in 0 ! \f3JAR ファイルのタイプ\fP ! .br ! .di ! .nr a| \n(dn ! .nr a- \n(dl ! .. ! .ec \ ! .eo ! .am 81 ! .br ! .di b+ ! .35 ! .ft \n(.f ! .ll \n(34u*1u/6u ! .if \n(.l<\n(81 .ll \n(81u ! .in 0 ! \f31.1 データベース内のアイデンティティー\fP ! .br ! .di ! .nr b| \n(dn ! .nr b- \n(dl ! .. ! .ec \ ! .eo ! .am 82 ! .br ! .di c+ ! .35 ! .ft \n(.f ! .ll \n(34u*1u/6u ! .if \n(.l<\n(82 .ll \n(82u ! .in 0 ! \f31.1 データベースから Java 2 Platform キーストアにインポートされる信頼できるアイデンティティー (4)\fP ! .br ! .di ! .nr c| \n(dn ! .nr c- \n(dl ! .. ! .ec \ ! .eo ! .am 83 ! .br ! .di d+ ! .35 ! .ft \n(.f ! .ll \n(34u*1u/6u ! .if \n(.l<\n(83 .ll \n(83u ! .in 0 ! \f3ポリシーファイルがアイデンティティー/別名に特権を与える\fP ! .br ! .di ! .nr d| \n(dn ! .nr d- \n(dl ! .. ! .ec \ ! .eo ! .am 84 ! .br ! .di e+ ! .35 ! .ft \n(.f ! .ll \n(34u*1u/6u ! .if \n(.l<\n(84 .ll \n(84u ! .in 0 ! すべてのコードに与えられるデフォルトの特権 ! .br ! .di ! .nr e| \n(dn ! .nr e- \n(dl ! .. ! .ec \ ! .eo ! .am 84 ! .br ! .di f+ ! .35 ! .ft \n(.f ! .ll \n(34u*1u/6u ! .if \n(.l<\n(84 .ll \n(84u ! .in 0 ! すべてのコードに与えられるデフォルトの特権 ! .br ! .di ! .nr f| \n(dn ! .nr f- \n(dl ! .. ! .ec \ ! .eo ! .am 84 ! .br ! .di g+ ! .35 ! .ft \n(.f ! .ll \n(34u*1u/6u ! .if \n(.l<\n(84 .ll \n(84u ! .in 0 ! すべてのコードに与えられるデフォルトの特権 ! .br ! .di ! .nr g| \n(dn ! .nr g- \n(dl ! .. ! .ec \ ! .eo ! .am 81 ! .br ! .di h+ ! .35 ! .ft \n(.f ! .ll \n(34u*1u/6u ! .if \n(.l<\n(81 .ll \n(81u ! .in 0 ! あり/信頼できない ! .br ! .di ! .nr h| \n(dn ! .nr h- \n(dl ! .. ! .ec \ ! .eo ! .am 84 ! .br ! .di i+ ! .35 ! .ft \n(.f ! .ll \n(34u*1u/6u ! .if \n(.l<\n(84 .ll \n(84u ! .in 0 ! すべてのコードに与えられるデフォルトの特権(3) ! .br ! .di ! .nr i| \n(dn ! .nr i- \n(dl ! .. ! .ec \ ! .eo ! .am 81 ! .br ! .di j+ ! .35 ! .ft \n(.f ! .ll \n(34u*1u/6u ! .if \n(.l<\n(81 .ll \n(81u ! .in 0 ! あり/信頼できない ! .br ! .di ! .nr j| \n(dn ! .nr j- \n(dl ! .. ! .ec \ ! .eo ! .am 84 ! .br ! .di k+ ! .35 ! .ft \n(.f ! .ll \n(34u*1u/6u ! .if \n(.l<\n(84 .ll \n(84u ! .in 0 ! すべてのコードに与えられるデフォルトの特権(1,3) ! .br ! .di ! .nr k| \n(dn ! .nr k- \n(dl ! .. ! .ec \ ! .eo ! .am 84 ! .br ! .di l+ ! .35 ! .ft \n(.f ! .ll \n(34u*1u/6u ! .if \n(.l<\n(84 .ll \n(84u ! .in 0 ! すべてのコードに与えられるデフォルトの特権とポリシーファイル内で与えられる特権 ! .br ! .di ! .nr l| \n(dn ! .nr l- \n(dl ! .. ! .ec \ ! .eo ! .am 84 ! .br ! .di m+ ! .35 ! .ft \n(.f ! .ll \n(34u*1u/6u ! .if \n(.l<\n(84 .ll \n(84u ! .in 0 ! すべてのコードに与えられるデフォルトの特権とポリシーファイル内で与えられる特権(2) ! .br ! .di ! .nr m| \n(dn ! .nr m- \n(dl ! .. ! .ec \ ! .35 ! .nf ! .ll \n(34u ! .nr 80 0 ! .nr 38 \w署名付き JAR ! .if \n(80<\n(38 .nr 80 \n(38 ! .nr 38 \w署名のない JAR ! .if \n(80<\n(38 .nr 80 \n(38 ! .nr 38 \w署名付き JAR ! .if \n(80<\n(38 .nr 80 \n(38 ! .nr 38 \w署名付き JAR ! .if \n(80<\n(38 .nr 80 \n(38 ! .nr 38 \w署名付き JAR ! .if \n(80<\n(38 .nr 80 \n(38 ! .nr 38 \w署名付き JAR ! .if \n(80<\n(38 .nr 80 \n(38 ! .nr 38 \w署名付き JAR ! .if \n(80<\n(38 .nr 80 \n(38 ! .nr 38 \w署名付き JAR ! .if \n(80<\n(38 .nr 80 \n(38 ! .nr 38 \w署名付き JAR ! .if \n(80<\n(38 .nr 80 \n(38 ! .nr 38 \w署名付き JAR ! .if \n(80<\n(38 .nr 80 \n(38 ! .80 ! .rm 80 ! .nr 38 \n(a- ! .if \n(80<\n(38 .nr 80 \n(38 ! .nr 81 0 ! .nr 38 \wなし ! .if \n(81<\n(38 .nr 81 \n(38 ! .nr 38 \wなし ! .if \n(81<\n(38 .nr 81 \n(38 ! .nr 38 \wなし ! .if \n(81<\n(38 .nr 81 \n(38 ! .nr 38 \wなし ! .if \n(81<\n(38 .nr 81 \n(38 ! .nr 38 \wあり/信頼できる ! .if \n(81<\n(38 .nr 81 \n(38 ! .nr 38 \wあり/信頼できる ! .if \n(81<\n(38 .nr 81 \n(38 ! .nr 38 \wあり/信頼できる ! .if \n(81<\n(38 .nr 81 \n(38 ! .nr 38 \wあり/信頼できる ! .if \n(81<\n(38 .nr 81 \n(38 ! .81 ! .rm 81 ! .nr 38 \n(b- ! .if \n(81<\n(38 .nr 81 \n(38 ! .nr 38 \n(h- ! .if \n(81<\n(38 .nr 81 \n(38 ! .nr 38 \n(j- ! .if \n(81<\n(38 .nr 81 \n(38 ! .nr 82 0 ! .nr 38 \wなし ! .if \n(82<\n(38 .nr 82 \n(38 ! .nr 38 \wなし ! .if \n(82<\n(38 .nr 82 \n(38 ! .nr 38 \wあり ! .if \n(82<\n(38 .nr 82 \n(38 ! .nr 38 \wなし ! .if \n(82<\n(38 .nr 82 \n(38 ! .nr 38 \wなし ! .if \n(82<\n(38 .nr 82 \n(38 ! .nr 38 \wあり ! .if \n(82<\n(38 .nr 82 \n(38 ! .nr 38 \wあり ! .if \n(82<\n(38 .nr 82 \n(38 ! .nr 38 \wなし ! .if \n(82<\n(38 .nr 82 \n(38 ! .nr 38 \wあり ! .if \n(82<\n(38 .nr 82 \n(38 ! .nr 38 \wなし ! .if \n(82<\n(38 .nr 82 \n(38 ! .82 ! .rm 82 ! .nr 38 \n(c- ! .if \n(82<\n(38 .nr 82 \n(38 ! .nr 83 0 ! .nr 38 \wなし ! .if \n(83<\n(38 .nr 83 \n(38 ! .nr 38 \wなし ! .if \n(83<\n(38 .nr 83 \n(38 ! .nr 38 \wなし ! .if \n(83<\n(38 .nr 83 \n(38 ! .nr 38 \wなし ! .if \n(83<\n(38 .nr 83 \n(38 ! .nr 38 \wあり ! .if \n(83<\n(38 .nr 83 \n(38 ! .nr 38 \wあり ! .if \n(83<\n(38 .nr 83 \n(38 ! .nr 38 \wあり ! .if \n(83<\n(38 .nr 83 \n(38 ! .nr 38 \wなし ! .if \n(83<\n(38 .nr 83 \n(38 ! .nr 38 \wなし ! .if \n(83<\n(38 .nr 83 \n(38 ! .nr 38 \wあり ! .if \n(83<\n(38 .nr 83 \n(38 ! .83 ! .rm 83 ! .nr 38 \n(d- ! .if \n(83<\n(38 .nr 83 \n(38 ! .nr 84 0 ! .nr 38 \w\f3与えられる特権\fP ! .if \n(84<\n(38 .nr 84 \n(38 ! .nr 38 \wすべての特権 ! .if \n(84<\n(38 .nr 84 \n(38 ! .nr 38 \wすべての特権 (1) ! .if \n(84<\n(38 .nr 84 \n(38 ! .nr 38 \wすべての特権 (1) ! .if \n(84<\n(38 .nr 84 \n(38 ! .84 ! .rm 84 ! .nr 38 \n(e- ! .if \n(84<\n(38 .nr 84 \n(38 ! .nr 38 \n(f- ! .if \n(84<\n(38 .nr 84 \n(38 ! .nr 38 \n(g- ! .if \n(84<\n(38 .nr 84 \n(38 ! .nr 38 \n(i- ! .if \n(84<\n(38 .nr 84 \n(38 ! .nr 38 \n(k- ! .if \n(84<\n(38 .nr 84 \n(38 ! .nr 38 \n(l- ! .if \n(84<\n(38 .nr 84 \n(38 ! .nr 38 \n(m- ! .if \n(84<\n(38 .nr 84 \n(38 ! .35 ! .nf ! .ll \n(34u ! .nr 38 1n ! .nr 79 0 ! .nr 40 \n(79+(0*\n(38) ! .nr 80 +\n(40 ! .nr 41 \n(80+(3*\n(38) ! .nr 81 +\n(41 ! .nr 42 \n(81+(3*\n(38) ! .nr 82 +\n(42 ! .nr 43 \n(82+(3*\n(38) ! .nr 83 +\n(43 ! .nr 44 \n(83+(3*\n(38) ! .nr 84 +\n(44 ! .nr TW \n(84 ! .if t .if \n(TW>\n(.li .tm Table at line 1078 file Input is too wide - \n(TW units ! .fc   ! .nr #T 0-1 ! .nr #a 0-1 ! .eo ! .de T# ! .ds #d .d ! .if \(ts\n(.z\(ts\(ts .ds #d nl ! .mk ## ! .nr ## -1v ! .ls 1 ! .ls ! .. ! .ec ! .ne \n(a|u+\n(.Vu ! .ne \n(b|u+\n(.Vu ! .ne \n(c|u+\n(.Vu ! .ne \n(d|u+\n(.Vu ! .if (\n(a|+\n(#^-1v)>\n(#- .nr #- +(\n(a|+\n(#^-\n(#--1v) ! .if (\n(b|+\n(#^-1v)>\n(#- .nr #- +(\n(b|+\n(#^-\n(#--1v) ! .if (\n(c|+\n(#^-1v)>\n(#- .nr #- +(\n(c|+\n(#^-\n(#--1v) ! .if (\n(d|+\n(#^-1v)>\n(#- .nr #- +(\n(d|+\n(#^-\n(#--1v) ! .ta \n(80u \n(81u \n(82u \n(83u \n(84u ! .nr 31 \n(.f ! .nr 35 1m ! \&\h'|\n(40u'\h'|\n(41u'\h'|\n(42u'\h'|\n(43u'\h'|\n(44u'\f3与えられる特権\fP ! .mk ## ! .nr 31 \n(## ! .sp |\n(##u-1v ! .nr 37 \n(40u ! .in +\n(37u ! .a+ ! .in -\n(37u ! .mk 32 ! .if \n(32>\n(31 .nr 31 \n(32 ! .sp |\n(##u-1v ! .nr 37 \n(41u ! .in +\n(37u ! .b+ ! .in -\n(37u ! .mk 32 ! .if \n(32>\n(31 .nr 31 \n(32 ! .sp |\n(##u-1v ! .nr 37 \n(42u ! .in +\n(37u ! .c+ ! .in -\n(37u ! .mk 32 ! .if \n(32>\n(31 .nr 31 \n(32 ! .sp |\n(##u-1v ! .nr 37 \n(43u ! .in +\n(37u ! .d+ ! .in -\n(37u ! .mk 32 ! .if \n(32>\n(31 .nr 31 \n(32 ! .sp |\n(31u ! .ne \n(e|u+\n(.Vu ! .if (\n(e|+\n(#^-1v)>\n(#- .nr #- +(\n(e|+\n(#^-\n(#--1v) ! .ta \n(80u \n(81u \n(82u \n(83u \n(84u ! .nr 31 \n(.f ! .nr 35 1m ! \&\h'|\n(40u'署名付き JAR\h'|\n(41u'なし\h'|\n(42u'なし\h'|\n(43u'なし\h'|\n(44u' ! .mk ## ! .nr 31 \n(## ! .sp |\n(##u-1v ! .nr 37 \n(44u ! .in +\n(37u ! .e+ ! .in -\n(37u ! .mk 32 ! .if \n(32>\n(31 .nr 31 \n(32 ! .sp |\n(31u ! .ne \n(f|u+\n(.Vu ! .if (\n(f|+\n(#^-1v)>\n(#- .nr #- +(\n(f|+\n(#^-\n(#--1v) ! .ta \n(80u \n(81u \n(82u \n(83u \n(84u ! .nr 31 \n(.f ! .nr 35 1m ! \&\h'|\n(40u'署名のない JAR\h'|\n(41u'なし\h'|\n(42u'なし\h'|\n(43u'なし\h'|\n(44u' ! .mk ## ! .nr 31 \n(## ! .sp |\n(##u-1v ! .nr 37 \n(44u ! .in +\n(37u ! .f+ ! .in -\n(37u ! .mk 32 ! .if \n(32>\n(31 .nr 31 \n(32 ! .sp |\n(31u ! .ne \n(g|u+\n(.Vu ! .if (\n(g|+\n(#^-1v)>\n(#- .nr #- +(\n(g|+\n(#^-\n(#--1v) ! .ta \n(80u \n(81u \n(82u \n(83u \n(84u ! .nr 31 \n(.f ! .nr 35 1m ! \&\h'|\n(40u'署名付き JAR\h'|\n(41u'なし\h'|\n(42u'あり\h'|\n(43u'なし\h'|\n(44u' ! .mk ## ! .nr 31 \n(## ! .sp |\n(##u-1v ! .nr 37 \n(44u ! .in +\n(37u ! .g+ ! .in -\n(37u ! .mk 32 ! .if \n(32>\n(31 .nr 31 \n(32 ! .sp |\n(31u ! .ne \n(h|u+\n(.Vu ! .ne \n(i|u+\n(.Vu ! .if (\n(h|+\n(#^-1v)>\n(#- .nr #- +(\n(h|+\n(#^-\n(#--1v) ! .if (\n(i|+\n(#^-1v)>\n(#- .nr #- +(\n(i|+\n(#^-\n(#--1v) ! .ta \n(80u \n(81u \n(82u \n(83u \n(84u ! .nr 31 \n(.f ! .nr 35 1m ! \&\h'|\n(40u'署名付き JAR\h'|\n(41u'\h'|\n(42u'なし\h'|\n(43u'なし\h'|\n(44u' ! .mk ## ! .nr 31 \n(## ! .sp |\n(##u-1v ! .nr 37 \n(41u ! .in +\n(37u ! .h+ ! .in -\n(37u ! .mk 32 ! .if \n(32>\n(31 .nr 31 \n(32 ! .sp |\n(##u-1v ! .nr 37 \n(44u ! .in +\n(37u ! .i+ ! .in -\n(37u ! .mk 32 ! .if \n(32>\n(31 .nr 31 \n(32 ! .sp |\n(31u ! .ne \n(j|u+\n(.Vu ! .ne \n(k|u+\n(.Vu ! .if (\n(j|+\n(#^-1v)>\n(#- .nr #- +(\n(j|+\n(#^-\n(#--1v) ! .if (\n(k|+\n(#^-1v)>\n(#- .nr #- +(\n(k|+\n(#^-\n(#--1v) ! .ta \n(80u \n(81u \n(82u \n(83u \n(84u ! .nr 31 \n(.f ! .nr 35 1m ! \&\h'|\n(40u'署名付き JAR\h'|\n(41u'\h'|\n(42u'なし\h'|\n(43u'あり\h'|\n(44u' ! .mk ## ! .nr 31 \n(## ! .sp |\n(##u-1v ! .nr 37 \n(41u ! .in +\n(37u ! .j+ ! .in -\n(37u ! .mk 32 ! .if \n(32>\n(31 .nr 31 \n(32 ! .sp |\n(##u-1v ! .nr 37 \n(44u ! .in +\n(37u ! .k+ ! .in -\n(37u ! .mk 32 ! .if \n(32>\n(31 .nr 31 \n(32 ! .sp |\n(31u ! .ne \n(l|u+\n(.Vu ! .if (\n(l|+\n(#^-1v)>\n(#- .nr #- +(\n(l|+\n(#^-\n(#--1v) ! .ta \n(80u \n(81u \n(82u \n(83u \n(84u ! .nr 31 \n(.f ! .nr 35 1m ! \&\h'|\n(40u'署名付き JAR\h'|\n(41u'なし\h'|\n(42u'あり\h'|\n(43u'あり\h'|\n(44u' ! .mk ## ! .nr 31 \n(## ! .sp |\n(##u-1v ! .nr 37 \n(44u ! .in +\n(37u ! .l+ ! .in -\n(37u ! .mk 32 ! .if \n(32>\n(31 .nr 31 \n(32 ! .sp |\n(31u ! .ne \n(m|u+\n(.Vu ! .if (\n(m|+\n(#^-1v)>\n(#- .nr #- +(\n(m|+\n(#^-\n(#--1v) ! .ta \n(80u \n(81u \n(82u \n(83u \n(84u ! .nr 31 \n(.f ! .nr 35 1m ! \&\h'|\n(40u'署名付き JAR\h'|\n(41u'あり/信頼できる\h'|\n(42u'あり\h'|\n(43u'あり\h'|\n(44u' ! .mk ## ! .nr 31 \n(## ! .sp |\n(##u-1v ! .nr 37 \n(44u ! .in +\n(37u ! .m+ ! .in -\n(37u ! .mk 32 ! .if \n(32>\n(31 .nr 31 \n(32 ! .sp |\n(31u ! .ta \n(80u \n(81u \n(82u \n(83u \n(84u ! .nr 31 \n(.f ! .nr 35 1m ! \&\h'|\n(40u'署名付き JAR\h'|\n(41u'あり/信頼できる\h'|\n(42u'なし\h'|\n(43u'なし\h'|\n(44u'すべての特権 ! .ta \n(80u \n(81u \n(82u \n(83u \n(84u ! .nr 31 \n(.f ! .nr 35 1m ! \&\h'|\n(40u'署名付き JAR\h'|\n(41u'あり/信頼できる\h'|\n(42u'あり\h'|\n(43u'なし\h'|\n(44u'すべての特権 (1) ! .ta \n(80u \n(81u \n(82u \n(83u \n(84u ! .nr 31 \n(.f ! .nr 35 1m ! \&\h'|\n(40u'署名付き JAR\h'|\n(41u'あり/信頼できる\h'|\n(42u'なし\h'|\n(43u'あり\h'|\n(44u'すべての特権 (1) ! .fc ! .nr T. 1 ! .T# 1 ! .35 ! .rm a+ ! .rm b+ ! .rm c+ ! .rm d+ ! .rm e+ ! .rm f+ ! .rm g+ ! .rm h+ ! .rm i+ ! .rm j+ ! .rm k+ ! .rm l+ ! .rm m+ ! .TE ! .if \n-(b.=0 .nr c. \n(.c-\n(d.-50 ! ! .LP ! .LP ! 注 \- ! .LP ! .RS 3 ! .TP 3 ! 1. ! ポリシーファイル内にアイデンティティー/別名についての言及がある場合、それをキーストアにインポートして、ポリシーファイルの設定が与えられた特権に反映されるようにする必要があります。 ! .TP 3 ! 2. ! ポリシーファイル/キーストアの組み合わせは、アイデンティティーデータベース内の信頼できるアイデンティティーよりも優先されます。 ! .TP 3 ! 3. ! Java 2 プラットフォームでは、信頼できないアイデンティティーは無視されます。 ! .TP 3 ! 4. ! Java 2 SDK キーストアにインポートできるのは、信頼できるアイデンティティーだけです。 .RE ! ! .LP .SH "関連項目" ! .LP ! .RS 3 ! .TP 2 ! o ! jar(1) ツールのドキュメント ! .TP 2 ! o ! keytool(1) ツールのドキュメント ! .TP 2 ! o ! .na ! \f4jarsigner\fP\f2 ツールの使用例については、\fP @ ! .fi ! http://download.oracle.com/javase/tutorial/security/index.html ! .na ! \f2「Java チュートリアル」\fP\f4の\fP @ ! .fi ! http://download.oracle.com/javase/tutorial/index.html「Security」\f3を参照\fP .RE ! ! .LP ! --- 1,1071 ---- ! '\" t ! .\" Copyright (c) 1998, 2013, Oracle and/or its affiliates. All rights reserved. ! .\" Title: jarsigner ! .\" Language: English ! .\" Date: 2013年11月21日 ! .\" SectDesc: セキュリティ・ツール ! .\" Software: JDK 8 ! .\" Arch: 汎用 ! .\" ! .\" DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. ! .\" ! .\" This code is free software; you can redistribute it and/or modify it ! .\" under the terms of the GNU General Public License version 2 only, as ! .\" published by the Free Software Foundation. ! .\" ! .\" This code is distributed in the hope that it will be useful, but WITHOUT ! .\" ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or ! .\" FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License ! .\" version 2 for more details (a copy is included in the LICENSE file that ! .\" accompanied this code). ! .\" ! .\" You should have received a copy of the GNU General Public License version ! .\" 2 along with this work; if not, write to the Free Software Foundation, ! .\" Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. ! .\" ! .\" Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA ! .\" or visit www.oracle.com if you need additional information or have any ! .\" questions. ! .\" ! .pl 99999 ! .TH "jarsigner" "1" "2013年11月21日" "JDK 8" "セキュリティ・ツール" ! .\" ----------------------------------------------------------------- ! .\" * Define some portability stuff ! .\" ----------------------------------------------------------------- ! .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ! .\" http://bugs.debian.org/507673 ! .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html ! .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ! .ie \n(.g .ds Aq \(aq ! .el .ds Aq ' ! .\" ----------------------------------------------------------------- ! .\" * set default formatting ! .\" ----------------------------------------------------------------- ! .\" disable hyphenation ! .nh ! .\" disable justification (adjust text to left margin only) ! .ad l ! .\" ----------------------------------------------------------------- ! .\" * MAIN CONTENT STARTS HERE * ! .\" ----------------------------------------------------------------- ! .SH "NAME" ! jarsigner \- Javaアーカイブ(JAR)ファイルに対して署名および検証を行います。 ! .SH "概要" ! .sp ! .if n \{\ ! .RS 4 ! .\} ! .nf ! \fIjarsigner\fR [ \fIoptions\fR ] \fIjar\-file\fR \fIalias\fR .fi ! .if n \{\ ! .RE ! .\} ! .sp ! .if n \{\ ! .RS 4 ! .\} ! .nf ! \fIjarsigner\fR \fI\-verify\fR [ \fIoptions\fR ] \fIjar\-file\fR [\fIalias \&.\&.\&.\fR] ! .fi ! .if n \{\ ! .RE ! .\} ! .PP ! \fIoptions\fR ! .RS 4 ! コマンドライン・オプション。オプションを参照してください。 ! .RE ! .PP ! \-verify ! .RS 4 ! \fI\-verify\fRオプションでは、JARファイル名の後に0個以上のキーストア別名を指定できます。\fI\-verify\fRオプションが指定された場合、\fIjarsigner\fRコマンドでは、JARファイル内の各署名付きエンティティの検証に使用される証明書が、いずれかのキーストア別名に一致することをチェックします。別名は、\fI\-keystore\fRで指定されたキーストア内またはデフォルトのキーストア内に定義されます。 ! .sp ! \fI\-strict\fRオプションも指定した場合、\fIjarsigner\fRコマンドにより重大な警告が検出されると、メッセージ「jarが検証されました。署名者エラー」が表示されます。 ! .RE ! .PP ! \fIjar\-file\fR ! .RS 4 ! 署名されるJARファイル。 ! .sp ! \fI\-strict\fRオプションも指定した場合、\fIjarsigner\fRコマンドにより重大な警告が検出されると、メッセージ「jarは署名されました \- 署名者エラーがあります。」というメッセージが表示されます。 ! .RE ! .PP ! \fIalias\fR ! .RS 4 ! 別名は、\fI\-keystore\fRで指定されたキーストア内またはデフォルトのキーストア内に定義されます。 ! .RE .SH "説明" ! .PP ! \fIjarsigner\fRツールには、次の2つの目的があります。 ! .sp ! .RS 4 ! .ie n \{\ ! \h'-04'\(bu\h'+03'\c ! .\} ! .el \{\ ! .sp -1 ! .IP \(bu 2.3 ! .\} ! Javaアーカイブ(JAR)ファイルに署名する目的。 .RE ! .sp ! .RS 4 ! .ie n \{\ ! \h'-04'\(bu\h'+03'\c ! .\} ! .el \{\ ! .sp -1 ! .IP \(bu 2.3 ! .\} ! 署名付きJARファイルの署名と整合性を検証する目的。 .RE ! .PP ! JAR機能を使用すると、クラス・ファイル、イメージ、サウンドおよびその他のデジタル・データを単一のファイルにパッケージ化できるので、ファイルを迅速かつ容易に配布できます。\fIjar\fRという名前のツールを使用して、開発者はJARファイルを作成できます。(技術的な観点から言えば、すべてのZIPファイルもJARファイルとみなすことができます。ただし、\fIjar\fRコマンドによって作成されたJARファイル、または\fIjarsigner\fRコマンドによって処理されたJARファイルには、\fIMETA\-INF/MANIFEST\&.MF\fRファイルも含まれています。) ! .PP ! デジタル署名は、なんらかのデータ(署名の対象となるデータ)、およびエンティティ(人、会社など)の秘密鍵から計算されるビットの文字列です。手書きの署名同様、デジタル署名には多くの利点があります。 ! .sp ! .RS 4 ! .ie n \{\ ! \h'-04'\(bu\h'+03'\c ! .\} ! .el \{\ ! .sp -1 ! .IP \(bu 2.3 ! .\} ! 署名の生成に使用された秘密鍵に対応する公開鍵を使用する計算によって、それが本物であることを検証できます。 ! .RE ! .sp ! .RS 4 ! .ie n \{\ ! \h'-04'\(bu\h'+03'\c ! .\} ! .el \{\ ! .sp -1 ! .IP \(bu 2.3 ! .\} ! 秘密鍵が他人に知られない限り、デジタル署名の偽造は不可能です。 ! .RE ! .sp ! .RS 4 ! .ie n \{\ ! \h'-04'\(bu\h'+03'\c ! .\} ! .el \{\ ! .sp -1 ! .IP \(bu 2.3 ! .\} ! これは、署名が付いたデータの機能であり、他のデータの署名となるように要求できません。 ! .RE ! .sp ! .RS 4 ! .ie n \{\ ! \h'-04'\(bu\h'+03'\c ! .\} ! .el \{\ ! .sp -1 ! .IP \(bu 2.3 ! .\} ! 署名付きデータは変更できません。データが変更された場合、署名によって本物であると検証できません。 ! .RE ! .PP ! ファイルに対してエンティティの署名を生成するには、まず、エンティティは、そのエンティティに関連する公開鍵/秘密鍵のペアと、公開鍵を認証する1つ以上の証明書を持つ必要があります。証明書とは、あるエンティティからのデジタル署名付きの文書で、別のエンティティの公開鍵が特定の値を持つことを示しています。 ! .PP ! \fIjarsigner\fRコマンドは、キーストアからの鍵と証明書情報を使用して、JARファイルのデジタル署名を生成します。キーストアは、秘密鍵、および対応する公開鍵を認証する、秘密鍵に関連したX\&.509証明書チェーンのデータベースです。\fIkeytool\fRコマンドを使用して、キーストアを作成および管理します。 ! .PP ! \fIjarsigner\fRコマンドでは、エンティティの秘密鍵を使用して署名を生成します。署名付きJARファイルには、特に、ファイルへの署名に使用する秘密鍵に対応する公開鍵のキーストアからの証明書のコピーが含まれます。\fIjarsigner\fRコマンドでは、内部(署名ブロック・ファイル内)の証明書を使用して、署名付きJARファイルのデジタル署名を検証できます。 ! .PP ! \fIjarsigner\fRコマンドでは、署名証明書の有効期間中にJARファイルが署名されたされたかどうかをシステムやデプロイヤ(Java Plug\-inを含む)がチェックできる、タイムスタンプを含む署名を生成できます。さらに、APIを使用すると、アプリケーションでタイムスタンプ情報を取得できます。 ! .PP ! 現時点では、\fIjarsigner\fRコマンドでは、\fIjar\fRコマンドまたはZIPファイルによって作成されたJARファイルのみに署名できます。JARファイルはZIPファイルと同じですが、JARファイルには\fIMETA\-INF/MANIFEST\&.MF\fRファイルも含まれている点が異なります。\fIMETA\-INF/MANIFEST\&.MF\fRファイルは、\fIjarsigner\fRコマンドによってZIPファイルに署名する際に作成されます。 ! .PP ! デフォルトの\fIjarsigner\fRコマンドの動作では、JARまたはZIPファイルに署名します。\fI\-verify\fRオプションを使用して、署名付きJARファイルを検証します。 ! .PP ! \fIjarsigner\fRコマンドは、署名または検証の後に署名者の証明書の検証も試行します。検証エラーまたはその他の問題が発生すると、コマンドにより警告メッセージが生成されます。\fI\-strict\fRオプションを指定した場合、コマンドにより重大な警告がエラーとして処理されます。エラーと警告を参照してください。 ! .SS "キーストアの別名" ! .PP ! キーストアのすべてのエンティティは、一意の別名を使用してアクセスされます。 ! .PP ! \fIjarsigner\fRコマンドを使用してJARファイルに署名するときは、署名の生成に必要な秘密鍵を含むキーストア・エントリの別名を指定する必要があります。たとえば、次のコマンドでは、\fIworking\fRディレクトリの\fImystore\fRという名前のキーストアに含まれる別名\fIduke\fRに関連付けられた秘密鍵を使用して、\fIMyJARFile\&.jar\fRという名前のJARファイルに署名します。出力ファイルは指定されていないため、\fIMyJARFile\&.jar\fRは署名付きのJARファイルによって上書きされます。 ! .sp ! .if n \{\ ! .RS 4 ! .\} ! .nf ! jarsigner \-keystore /working/mystore \-storepass <keystore password> ! \-keypass <private key password> MyJARFile\&.jar duke .fi ! .if n \{\ ! .RE ! .\} ! .PP ! キーストアはパスワードで保護されているので、ストアのパスワードを指定する必要があります。コマンドラインで指定しないと、入力を求められます。同様に、秘密鍵もキーストア内でパスワードによって保護されているため、秘密鍵のパスワードを指定する必要があります。コマンドラインでパスワードを指定していない場合、または指定したパスワートが保存されているパスワードと同じではない場合は、パスワードの入力を求められます。 ! .SS "キーストアの場所" ! .PP ! \fIjarsigner\fRコマンドには、使用するキーストアのURLを指定する\fI\-keystore\fRオプションがあります。キーストアはデフォルトで、\fIuser\&.home\fRシステム・プロパティで決まるユーザーのホーム・ディレクトリの\fI\&.keystore\fRという名前のファイル内に格納されます。 ! .PP ! Oracle Solarisシステムの場合、\fIuser\&.home\fRは、ユーザーのホーム・ディレクトリにデフォルト設定されます。 ! .PP ! \fI\-keystore\fRオプションからの入力ストリームは、\fIKeyStore\&.load\fRメソッドに渡されます。URLとして\fINONE\fRが指定されている場合は、nullのストリームが\fIKeyStore\&.load\fRメソッドに渡されます。\fINONE\fRは、\fIKeyStore\fRクラスがファイルベースではない場合、たとえば、ハードウェア・トークン・デバイスに置かれている場合に指定します。 ! .SS "キーストアの実装" ! .PP ! \fIjava\&.security package\fRで提供されている\fIKeyStore\fRクラスは、キーストア内の情報へのアクセスおよび情報の変更を行うための、明確に定義された多くのインタフェースを提供します。複数の異なる固定実装を指定することができ、各実装は特定のタイプのキーストアを対象とします。 ! .PP ! 現在、キーストアの実装を使用する2つのコマンドライン・ツール(\fIkeytool\fRと\fIjarsigner\fR)、およびポリシー・ツールという名前の1つのGUIベースのツールがあります。\fIKeyStore\fRクラスは公開されているため、JDKユーザーは、それを使用する他のセキュリティ・アプリケーションを書き込むことができます。 ! .PP ! Oracleが提供する組込みのデフォルトの実装があります。これは、JKSという名前の独自のキーストア・タイプ(形式)を使用するもので、キーストアをファイルとして実装しています。組込みの実装では、各秘密鍵は個別のパスワードによって保護され、キーストア全体の整合性は(秘密鍵とは別の)パスワードによって保護されます。 ! .PP ! キーストアの実装はプロバイダベースで、つまり、\fIKeyStore\fRクラスにより提供されるアプリケーション・インタフェースは、サービス・プロバイダ・インタフェース(SPI)に関して実装されます。対応する\fIKeystoreSpi\fR抽象クラスがあり、これも\fIjava\&.security package\fRに含まれています。このクラスが、プロバイダが実装する必要のあるサービス・プロバイダ・インタフェースのメソッドを定義しています。ここで、プロバイダとは、Java Security APIによってアクセス可能なサービスのサブセットに対し、その固定実装を提供するパッケージまたはパッケージの集合のことです。キーストアの実装を提供するには、http://docs\&.oracle\&.com/javase/8/docs/technotes/guides/security/crypto/HowToImplAProvider\&.htmlにある ! Java暗号化アーキテクチャのプロバイダの実装方法で説明しているように、クライアントはプロバイダを実装し、\fIKeystoreSpi\fRサブクラスの実装を提供する必要があります。 ! .PP ! アプリケーションでは、\fIKeyStore\fRクラスの\fIgetInstance\fRファクトリ・メソッドを使用して、様々なプロバイダから異なるタイプのキーストアの実装を選択できます。キーストアのタイプは、キーストア情報の格納形式とデータ形式を定義するとともに、キーストア内の秘密鍵とキーストア自体の整合性を保護するために使用されるアルゴリズムを定義します。異なるタイプのキーストアの実装には、互換性はありません。 ! .PP ! \fIjarsigner\fRおよび\fIpolicytool\fRコマンドは、URLを使用して指定できる任意の場所からファイルベースのキーストアを読み取ることができます。また、これらのコマンドは、Windows上のMSCAPIおよびすべてのプラットフォーム上のPKCS11で提供されるような非ファイルベースのキーストアを読み取ることができます。 ! .PP ! \fIjarsigner\fRコマンドおよび\fIkeytool\fRコマンドの場合、\fI\-storetype\fRオプションを使用して、コマンドラインでキーストアのタイプを指定できます。ポリシー・ツールの場合、\fB「キーストア」\fRメニューの\fB「編集」\fRコマンドを使用して、キーストアのタイプを指定できます。 ! .PP ! ユーザーがキーストアのタイプを明示的に指定しなかった場合、セキュリティ・プロパティ・ファイルで指定された\fIkeystore\&.type\fRプロパティの値に基づいて、ツールによってキーストアの実装が選択されます。このセキュリティ・プロパティ・ファイルは\fIjava\&.security\fRと呼ばれ、JDKセキュリティ・プロパティ・ディレクトリ\fIjava\&.home/lib/security\fR内に存在しています。ここで、\fIjava\&.home\fRは実行時環境のディレクトリです。\fIjre\fRディレクトリは、JDKまたはJava Runtime Environment (JRE)の最上位のディレクトリにあります。 ! .PP ! 各ツールは、\fIkeystore\&.type\fRの値を取得し、そのタイプのキーストアを実装しているプロバイダが見つかるまで、インストールされているすべてのプロバイダを調べます。目的のプロバイダが見つかると、そのプロバイダからのキーストアの実装を使用します。 ! .PP ! \fIKeyStore\fRクラスに定義されているstaticメソッド\fIgetDefaultType\fRを使用すると、アプリケーションやアプレットから\fIkeystore\&.type\fRプロパティの値を取得できます。次のコードの行では、\fIkeystore\&.type property\fRで指定された、デフォルトのキーストア・タイプのインスタンスを作成します。 ! .sp ! .if n \{\ ! .RS 4 ! .\} ! .nf ! KeyStore keyStore = KeyStore\&.getInstance(KeyStore\&.getDefaultType()); .fi ! .if n \{\ ! .RE ! .\} ! .PP ! デフォルトのキーストア・タイプは、\fIjks\fR ! (Oracleが提供する独自のタイプのキーストアの実装)です。これは、セキュリティ・プロパティ・ファイル内の次の行によって指定されています。 ! .sp ! .if n \{\ ! .RS 4 ! .\} ! .nf ! keystore\&.type=jks .fi ! .if n \{\ ! .RE ! .\} ! .PP ! キーストアのタイプの指定では、大文字と小文字は区別されません。たとえば、\fIJKS\fRは\fIjks\fRと同じになります。 ! .PP ! ツールでデフォルト以外のキーストアの実装を使用するには、その行を変更して別のキーストアのタイプを指定します。たとえば、\fIpkcs12\fRと呼ばれるキーストアのタイプのキーストアの実装を提供するプロバイダ・パッケージがある場合、行を次のように変更します。 ! .sp ! .if n \{\ ! .RS 4 ! .\} ! .nf ! keystore\&.type=pkcs12 .fi ! .if n \{\ .RE ! .\} ! .PP ! \fB注意:\fR ! PKCS 11プロバイダ・パッケージを使用する場合、http://docs\&.oracle\&.com/javase/8/docs/technotes/guides/security/p11guide\&.htmlにある ! Java PKCS #11リファレンス・ガイドの「KeyTool」および「JarSigner」を参照してください。 ! .SS "サポートされるアルゴリズム" ! .PP ! デフォルトで、\fIjarsigner\fRコマンドでは次のいずれかのアルゴリズムを使用してJARファイルに署名します。 ! .sp ! .RS 4 ! .ie n \{\ ! \h'-04'\(bu\h'+03'\c ! .\} ! .el \{\ ! .sp -1 ! .IP \(bu 2.3 ! .\} ! SHA1ダイジェスト・アルゴリズムを使用したデジタル署名アルゴリズム(DSA) .RE ! .sp ! .RS 4 ! .ie n \{\ ! \h'-04'\(bu\h'+03'\c ! .\} ! .el \{\ ! .sp -1 ! .IP \(bu 2.3 ! .\} ! SHA256ダイジェスト・アルゴリズムを使用したRSAアルゴリズム。 ! .RE ! .sp ! .RS 4 ! .ie n \{\ ! \h'-04'\(bu\h'+03'\c ! .\} ! .el \{\ ! .sp -1 ! .IP \(bu 2.3 ! .\} ! SHA256と楕円曲線デジタル署名アルゴリズム(ECDSA)を使用した楕円曲線(EC)暗号方式アルゴリズム ! .RE ! .PP ! 署名者の公開鍵と秘密鍵がDSA鍵である場合、\fIjarsigner\fRは\fISHA1withDSA\fRアルゴリズムを使用してJARファイルに署名します。署名者の鍵がRSA鍵である場合、\fIjarsigner\fRは\fISHA256withRSA\fRアルゴリズムを使用してJARファイルに署名しようとします。署名者の鍵がEC鍵である場合、\fIjarsigner\fRは\fISHA256withECDSA\fRアルゴリズムを使用してJARファイルに署名します。 ! .PP ! これらのデフォルトの署名アルゴリズムは、\fI\-sigalg\fRオプションを使用してオーバーライドできます。 ! .SS "署名付きJARファイル" ! .PP ! \fIjarsigner\fRコマンドを使用してJARファイルに署名する場合、出力される署名付きJARファイルは入力JARファイルと同じですが、次の2つの追加ファイルがMETA\-INFディレクトリに置かれる点が異なります。 ! .sp ! .RS 4 ! .ie n \{\ ! \h'-04'\(bu\h'+03'\c ! .\} ! .el \{\ ! .sp -1 ! .IP \(bu 2.3 ! .\} ! \fI\&.SF\fR拡張子の付いた署名ファイル ! .RE ! .sp ! .RS 4 ! .ie n \{\ ! \h'-04'\(bu\h'+03'\c ! .\} ! .el \{\ ! .sp -1 ! .IP \(bu 2.3 ! .\} ! \fI\&.DSA\fR、\fI\&.RSA\fRまたは\fI\&.EC\fR拡張子の付いた署名ブロック・ファイル ! .RE ! .PP ! これら2つのファイルのベース・ファイル名は、\fI\-sigFile\fRオプションの値から作成されます。たとえば、オプションが\fI\-sigFile MKSIGN\fRの場合、ファイルは\fIMKSIGN\&.SF\fRおよび\fIMKSIGN\&.DSA\fRという名前になります。 ! .PP ! コマンドラインで\fI\-sigfile\fRオプションを指定しなかった場合、\fI\&.SF\fRファイルと\fI\&.DSA\fRファイルのベース・ファイル名は、コマンドラインで指定された別名の先頭の8文字をすべて大文字に変換したものになります。別名が8文字未満の場合は、別名がそのまま使用されます。別名に、署名ファイル名で使用できない文字が含まれている場合、ファイル名の作成時に、該当する文字が下線(_)文字に変換されます。有効な文字は、アルファベット、数字、下線およびハイフンです。 ! 署名ファイル.PP ! 署名ファイル(\fI\&.SF\fRファイル)は、\fIjarsigner\fRコマンドを使用してファイルに署名する際にJARファイルに常に含まれるマニフェスト・ファイルと似ています。JARファイルに含まれているソース・ファイルごとに、\fI\&.SF\fRファイルには、マニフェスト・ファイルにあるような、次に示す3つの行があります。 ! .sp ! .RS 4 ! .ie n \{\ ! \h'-04'\(bu\h'+03'\c ! .\} ! .el \{\ ! .sp -1 ! .IP \(bu 2.3 ! .\} ファイル名 .RE ! .sp ! .RS 4 ! .ie n \{\ ! \h'-04'\(bu\h'+03'\c ! .\} ! .el \{\ ! .sp -1 ! .IP \(bu 2.3 ! .\} ! ダイジェスト・アルゴリズム(SHA)の名前 .RE ! .sp ! .RS 4 ! .ie n \{\ ! \h'-04'\(bu\h'+03'\c ! .\} ! .el \{\ ! .sp -1 ! .IP \(bu 2.3 ! .\} ! SHAダイジェストの値 .RE ! .PP ! マニフェスト・ファイルでは、各ソース・ファイルのSHAダイジェストの値は、ソース・ファイルのバイナリ・データのダイジェスト(ハッシュ)になります。\fI\&.SF\fRファイルでは、指定されたソース・ファイルのダイジェストの値は、ソース・ファイルのマニフェスト・ファイル内のその3行のハッシュになります。 ! .PP ! 署名ファイルには、デフォルトで、マニフェスト・ファイル全体のハッシュが格納されたヘッダーが含まれています。ヘッダーにはマニフェスト・ヘッダーのハッシュも含まれています。ヘッダーが存在すると、検証の最適化が有効になります。JARファイルの検証を参照してください。 ! 署名ブロック・ファイル.PP ! \fI\&.SF\fRファイルには署名が付けられ、署名は署名ブロック・ファイルに置かれます。このファイルには、署名に使用された秘密鍵に対応する公開鍵を認証するキーストアからの証明書または証明書チェーンも、内部でエンコードされて含まれています。ファイルの拡張子は、使用されるダイジェスト・アルゴリズムに応じて、\fI\&.DSA\fR、\fI\&.RSA\fRまたは\fI\&.EC\fRになります。 ! .SS "署名タイムスタンプ" ! .PP ! \fIjarsigner\fRコマンドでは、JARファイルの署名時に署名タイムスタンプを生成および保存できます。さらに、\fIjarsigner\fRは代替署名機構をサポートします。この動作は省略可能で、署名時に次の各オプションによって制御されます。オプションを参照してください。 ! .sp ! .if n \{\ ! .RS 4 ! .\} ! .nf ! \-tsa \fIurl\fR ! \-tsacert \fIalias\fR ! \-altsigner \fIclass\fR ! \-altsignerpath \fIclasspathlist\fR ! \-tsapolicyid \fIpolicyid\fR .fi ! .if n \{\ ! .RE ! .\} ! .SS "JARファイルの検証" ! .PP ! JARファイルの検証が成功するのは、署名が有効であり、かつ署名の生成以降にJARファイル内のどのファイルも変更されていない場合です。JARファイルの検証は、次の手順で行われます。 ! .sp ! .RS 4 ! .ie n \{\ ! \h'-04' 1.\h'+01'\c ! .\} ! .el \{\ ! .sp -1 ! .IP " 1." 4.2 ! .\} ! \fI\&.SF\fRファイルの署名を検証します。 ! .sp ! 検証では、各署名ブロック(\fI\&.DSA\fR)ファイルに格納された署名が、証明書(または証明書チェーン)も\fI\&.DSA\fRファイルに示される公開鍵に対応する秘密鍵を使用して生成されたことを確認します。また、署名が対応する署名(\fI\&.SF\fR)ファイルの有効な署名であることが確認され、それにより、\fI\&.SF\fRファイルが改ざんされていないことも確認されます。 ! .RE ! .sp ! .RS 4 ! .ie n \{\ ! \h'-04' 2.\h'+01'\c ! .\} ! .el \{\ ! .sp -1 ! .IP " 2." 4.2 ! .\} ! \fI\&.SF\fRファイル内の各エントリに示されるダイジェストを、マニフェスト内の対応する各セクションと突きあわせて検証します。 ! .sp ! \fI\&.SF\fRファイルには、マニフェスト・ファイル全体のハッシュが格納されたヘッダーがデフォルトで含まれています。ヘッダーが存在する場合、検証では、ヘッダー内のハッシュがマニフェスト・ファイルのハッシュと一致するかどうかを確認するためにチェックできます。一致する場合、検証は次の手順に進みます。 ! .sp ! 一致しない場合、\fI\&.SF\fRファイル内の各ソース・ファイル情報セクションのハッシュが、マニフェスト・ファイル内の対応するセクションのハッシュと一致することを確認するために、あまり最適化されていない検証が必要になります。署名ファイルを参照してください。 ! .sp ! \fI\&.SF\fRファイルのヘッダーに格納されたマニフェスト・ファイルのハッシュが、現在のマニフェスト・ファイルのハッシュに一致しない理由の1つは、署名および\fI\&.SF\fRファイルの生成後に、(\fIjar\fRツールを使用して)1つ以上のファイルがJARファイルに追加されたことです。\fIjar\fRツールを使用してファイルを追加した場合、新しいファイル用のセクションが追加されることにより、マニフェスト・ファイルは変更されますが、\fI\&.SF\fRファイルは変更されません。検証がまだ成功しているとみなされるのは、署名の生成以降にJARファイル内のどのファイルも変更されていない場合です。これが発生するのは、\fI\&.SF\fRファイルのヘッダー以外のセクションのハッシュが、マニフェスト・ファイル内の対応するセクションのハッシュと一致する場合です。 ! .RE ! .sp ! .RS 4 ! .ie n \{\ ! \h'-04' 3.\h'+01'\c ! .\} ! .el \{\ ! .sp -1 ! .IP " 3." 4.2 ! .\} ! \fI\&.SF\fRファイル内にエントリを持つJARファイル内の各ファイルを読み取ります。読取り中にファイルのダイジェストを計算し、結果をマニフェスト・セクション内のこのファイルのダイジェストと比較します。ダイジェストは同じである必要があり、そうでない場合は検証が失敗します。 ! .sp ! 検証プロセス中になんらかの重大な検証エラーが発生した場合、そのプロセスは停止され、セキュリティ例外がスローされます。\fIjarsigner\fRコマンドでは、例外を捕捉および表示します。 ! .RE ! .PP ! \fB注意:\fR ! 追加の警告(または、\fI\-strict\fRオプションを指定した場合はエラー)はすべて読む必要があります。同様に、証明が信頼できるかを決定するために、(\fI\-verbose\fRおよび\fI\-certs\fRオプションを指定して)証明書の内容も読む必要があります。 ! .SS "1つのJARファイルを対象とする複数の署名" ! .PP ! 次のように、\fIjarsigner\fRコマンドをファイルで複数回実行し、実行のたびに異なるユーザーの別名を指定することによって、1つのJARファイルに複数のユーザーの署名を付けることができます。 ! .sp ! .if n \{\ ! .RS 4 ! .\} ! .nf ! jarsigner myBundle\&.jar susan ! jarsigner myBundle\&.jar kevin .fi ! .if n \{\ ! .RE ! .\} ! .PP ! JARファイルが複数回署名されている場合、そのJARファイルには、複数の\fI\&.SF\fRファイルと\fI\&.DSA\fRファイルが含まれており、1回の署名に対して1つのペアとなります。前述の例では、出力JARファイルには、次の名前のファイルが含まれています。 ! .sp ! .if n \{\ ! .RS 4 ! .\} ! .nf ! SUSAN\&.SF ! SUSAN\&.DSA ! KEVIN\&.SF ! KEVIN\&.DSA ! .fi ! .if n \{\ ! .RE ! .\} .SH "オプション" ! .PP ! 次の各項では、様々な\fIjarsigner\fRオプションについて説明します。次の標準に注意してください。 ! .sp ! .RS 4 ! .ie n \{\ ! \h'-04'\(bu\h'+03'\c ! .\} ! .el \{\ ! .sp -1 ! .IP \(bu 2.3 ! .\} ! どのオプション名にも先頭にマイナス記号(\-)が付きます。 .RE ! .sp ! .RS 4 ! .ie n \{\ ! \h'-04'\(bu\h'+03'\c ! .\} ! .el \{\ ! .sp -1 ! .IP \(bu 2.3 ! .\} ! オプションは任意の順序で指定できます。 ! .RE ! .sp ! .RS 4 ! .ie n \{\ ! \h'-04'\(bu\h'+03'\c ! .\} ! .el \{\ ! .sp -1 ! .IP \(bu 2.3 ! .\} ! イタリック体または下線付きの項目(オプションの値)の実際の値は、指定する必要があります。 ! .RE ! .sp ! .RS 4 ! .ie n \{\ ! \h'-04'\(bu\h'+03'\c ! .\} ! .el \{\ ! .sp -1 ! .IP \(bu 2.3 ! .\} ! \fI\-storepass\fR、\fI\-keypass\fR、\fI\-sigfile\fR、\fI\-sigalg\fR、\fI\-digestalg\fR、\fI\-signedjar\fRおよびTSA関連のオプションを使用できるのは、JARファイルに署名する場合のみです。署名付きJARファイルを検証する場合ではありません。\fI\-keystore \fRオプションは、JARファイルの署名および検証に関連します。また、別名は、JARファイルの署名および検証時に指定します。 ! .RE ! .PP ! \-keystore \fIurl\fR ! .RS 4 ! キーストアの場所を示すURLを指定します。これにより、\fIuser\&.home\fRシステム・プロパティで決定されたユーザーのホーム・ディレクトリ内のファイル\fI\&.keystore\fRにデフォルト設定されます。 ! .sp ! キーストアは署名時には必要です。デフォルトのキーストアが存在しない場合、またはデフォルト以外のキーストアを使用する場合は、キーストアを明示的に指定する必要があります。 ! .sp ! 検証するときはキーストアは必要ありません。ただし、キーストアが指定されているか、あるいはデフォルトのキーストアが存在していて、さらに\fI\-verbose\fRオプションも指定されていた場合、JARファイルの検証に使用される証明書がそのキーストアに1つでも含まれているかどうかに関する追加情報が出力されます。 ! .sp ! \fI\-keystore\fR引数には、URLではなくファイル名とパスを指定でき、この場合、ファイル: URLと同じように処理されます。たとえば、次にように指定すると同等になります。 ! .sp ! .if n \{\ ! .RS 4 ! .\} ! .nf ! \-keystore \fIfilePathAndName\fR ! \-keystore file:\fIfilePathAndName\fR .fi ! .if n \{\ ! .RE ! .\} ! (JREの\fI$JAVA_HOME/lib/security directory\fRにある) ! \fIjava\&.security\fRセキュリティ・プロパティ・ファイル内でSun PKCS #11プロバイダが構成された場合、\fIkeytool\fRおよび\fIjarsigner\fRツールはPKCS#11トークンに基づいて動作できます。次のオプションを指定します。 ! .sp ! .if n \{\ ! .RS 4 ! .\} ! .nf ! \-keystore NONE ! \-storetype PKCS11 ! .fi ! .if n \{\ ! .RE ! .\} ! たとえば、次のコマンドは、構成されたPKCS#11トークンの内容を一覧表示します。 ! .sp ! .if n \{\ ! .RS 4 ! .\} ! .nf ! keytool \-keystore NONE \-storetype PKCS11 \-list ! .fi ! .if n \{\ ! .RE ! .\} ! .RE ! .PP ! \-storetype \fIstoretype\fR ! .RS 4 ! インスタンスを生成するキーストアのタイプを指定します。デフォルトのキーストア・タイプは、セキュリティ・プロパティ・ファイル内の\fIkeystore\&.type\fRプロパティの値で指定されたタイプです。この値は、\fIjava\&.security\&.KeyStore\fRのstatic ! \fIgetDefaultType\fRメソッドによって返されます。 ! .sp ! \fI\-storepass\fRオプションを使用して、PCKS #11トークンのPINを指定することもできます。何も指定しない場合、\fIkeytool\fRおよび\fIjarsigner\fRコマンドによって、トークンPINの指定を求められます。トークンに保護された認証パス(専用のPINパッドや生体読取り機など)がある場合、\fI\-protected\fRオプションを指定する必要がありますが、パスワード・オプションは指定できません。 ! .RE ! .PP ! \-storepass[:env | :file] \fIargument\fR ! .RS 4 ! キーストアにアクセスするのに必要なパスワードを指定します。これが必要なのは、JARファイルに署名を付けるときのみです(検証するときには不要です)。その場合、\fI\-storepass\fRオプションをコマンドラインで指定しないと、パスワードの入力を求められます。 ! .sp ! 修飾子\fIenv\fRまたは\fIfile\fRが指定されていない場合、パスワードの値は\fIargument\fRになります。それ以外の場合、パスワードは次のようにして取得されます。 ! .sp ! .RS 4 ! .ie n \{\ ! \h'-04'\(bu\h'+03'\c ! .\} ! .el \{\ ! .sp -1 ! .IP \(bu 2.3 ! .\} ! \fIenv\fR: ! \fIargument\fRという名前の環境変数からパスワードを取得します。 ! .RE ! .sp ! .RS 4 ! .ie n \{\ ! \h'-04'\(bu\h'+03'\c ! .\} ! .el \{\ ! .sp -1 ! .IP \(bu 2.3 ! .\} ! \fIfile\fR: ! \fIargument\fRという名前のファイルからパスワードを取得します。 ! .RE ! .sp ! \fB注意:\fR ! テストを目的とする場合またはセキュリティ保護されたシステムを使用している場合以外は、コマンドラインやスクリプトでパスワードを指定しないでください。 ! .RE ! .PP ! \-keypass [:env | :file] \fIargument\fR ! .RS 4 ! コマンドラインで指定された別名に対応するキーストア・エントリの秘密鍵を保護するのに使用するパスワードを指定します。\fIjarsigner\fRを使用してJARファイルに署名を付けるときは、パスワードが必要です。コマンドラインでパスワードが指定されておらず、必要なパスワードがストアのパスワードと異なる場合は、パスワードの入力を求められます。 ! .sp ! 修飾子\fIenv\fRまたは\fIfile\fRが指定されていない場合、パスワードの値は\fIargument\fRになります。それ以外の場合、パスワードは次のようにして取得されます。 ! .sp ! .RS 4 ! .ie n \{\ ! \h'-04'\(bu\h'+03'\c ! .\} ! .el \{\ ! .sp -1 ! .IP \(bu 2.3 ! .\} ! \fIenv\fR: ! \fIargument\fRという名前の環境変数からパスワードを取得します。 ! .RE ! .sp ! .RS 4 ! .ie n \{\ ! \h'-04'\(bu\h'+03'\c ! .\} ! .el \{\ ! .sp -1 ! .IP \(bu 2.3 ! .\} ! \fIfile\fR: ! \fIargument\fRという名前のファイルからパスワードを取得します。 ! .RE ! .sp ! \fB注意:\fR ! テストを目的とする場合またはセキュリティ保護されたシステムを使用している場合以外は、コマンドラインやスクリプトでパスワードを指定しないでください。 ! .RE ! .PP ! \-sigfile \fIfile\fR ! .RS 4 ! 生成された\fI\&.SF\fRファイルおよび\fI\&.DSA\fRファイルに使用するベース・ファイル名を指定します。たとえば、ファイルが\fIDUKESIGN\fRの場合、生成される\fI\&.SF\fRおよび\fI\&.DSA\fRファイルは、\fIDUKESIGN\&.SF\fRおよび\fIDUKESIGN\&.DSA\fRという名前で、署名付きJARファイルの\fIMETA\-INF\fRディレクトリに格納されます。 ! .sp ! ファイル内の文字は、セット\fIa\-zA\-Z0\-9_\-\fRから指定される必要があります。アルファベット、数字、下線およびハイフン文字のみを使用できます。\fI\&.SF\fRおよび\fI\&.DSA\fRのファイル名では、小文字はすべて大文字に変換されます。 ! .sp ! コマンドラインで\fI\-sigfile\fRオプションを指定しなかった場合、\fI\&.SF\fRファイルと\fI\&.DSA\fRファイルのベース・ファイル名は、コマンドラインで指定された別名の先頭の8文字をすべて大文字に変換したものになります。別名が8文字未満の場合は、別名がそのまま使用されます。別名に、署名ファイル名で無効な文字が含まれている場合、ファイル名を作成するために、該当する文字が下線(_)文字に変換されます。 ! .RE ! .PP ! \-sigalg \fIalgorithm\fR ! .RS 4 ! JARファイルの署名に使用する署名アルゴリズムの名前を指定します。 ! .sp ! 標準的な署名アルゴリズム名のリストは、http://docs\&.oracle\&.com/javase/8/docs/technotes/guides/security/crypto/CryptoSpec\&.html#AppAにある ! Java Cryptography Architecture (JCA)リファレンス・ガイドの「付録A: 標準名」を参照してください。 ! .sp ! このアルゴリズムには、JARファイルの署名に使用する秘密鍵との互換性が必要です。このオプションを指定しない場合、秘密鍵のタイプに応じて、\fISHA1withDSA\fR、\fISHA256withRSA\fRまたは\fISHA256withECDSA\fRが使用されます。指定されたアルゴリズムの実装を提供するプロバイダが静的にインストールされているか、\fI\-providerClass\fRオプションを使用してそのようなプロバイダをユーザーが指定する必要があります。そうでない場合、コマンドは失敗します。 ! .RE ! .PP ! \-digestalg \fIalgorithm\fR ! .RS 4 ! JARファイルのエントリをダイジェストする際に使用するメッセージ・ダイジェスト・アルゴリズムの名前を指定します。 ! .sp ! 標準的なメッセージ・ダイジェスト・アルゴリズム名のリストは、http://docs\&.oracle\&.com/javase/8/docs/technotes/guides/security/crypto/CryptoSpec\&.html#AppAにある ! Java Cryptography Architecture (JCA)リファレンス・ガイドの「付録A: 標準名」を参照してください。 ! .sp ! このオプションを指定しない場合、\fISHA256\fRが使用されます。指定されたアルゴリズムの実装を提供するプロバイダが静的にインストールされているか、\fI\-providerClass\fRオプションを使用してそのようなプロバイダをユーザーが指定する必要があります。そうでない場合、コマンドは失敗します。 ! .RE ! .PP \-certs ! .RS 4 ! コマンドラインで、\fI\-certs\fRオプションを\fI\-verify\fRおよび\fI\-verbose\fRオプションとともに指定した場合、JARファイルの各署名者の証明書情報が出力に含まれます。この情報には、署名者の公開鍵を証明する証明書(\fI\&.DSA\fRファイルに格納)のタイプの名前が含まれ、証明書がX\&.509証明書(\fIjava\&.security\&.cert\&.X509Certificate\fRのインスタンス)の場合、署名者の識別名が含まれます。 ! .sp ! キーストアの確認も行われます。コマンドラインでキーストアの値が指定されていない場合、デフォルトのキーストア・ファイル(ある場合)がチェックされます。署名者の公開鍵の証明書がキーストア内のエントリと一致する場合、その署名者のキーストアのエントリの別名が丸カッコ内に表示されます。 ! .RE ! .PP ! \-certchain \fIfile\fR ! .RS 4 ! コマンドラインで指定した別名によって表されるキーストア・エントリの秘密鍵に関連付けられた証明書チェーンが完全ではない場合に、使用する証明書チェーンを指定します。これは、証明書チェーン全体を保持するのに十分な領域がないハードウェア・トークン上にキーストアが格納されている場合に発生します。このファイルは一連の連結されたX\&.509証明書、PKCS#7形式の単一データ・ブロックのいずれかとなり、そのエンコーディング形式はバイナリ・エンコーディング形式、Internet RFC 1421標準で規定される印刷可能エンコーディング形式(Base64エンコーディングとも呼ばれる)のいずれかになります。インターネットRFC 1421証明書符号化規格およびhttp://tools\&.ietf\&.org/html/rfc1421を参照してください。 ! .RE ! .PP \-verbose ! .RS 4 ! コマンドラインで\fI\-verbose\fRオプションを指定した場合、冗長モードで動作し、このモードでは、\fIjarsigner\fRは、JARの署名または検証の進行状況に関する追加情報を出力します。 ! .RE ! .PP \-internalsf ! .RS 4 ! 以前は、JARファイルの署名時に生成された\fI\&.DSA\fR ! (署名ブロック)ファイルに、生成された\fI\&.SF\fRファイル(署名ファイル)のエンコードされた完全なコピーが含まれていました。 この動作は変更されました。出力JARファイル全体のサイズを小さくするために、デフォルトでは\fI\&.DSA\fRファイルには\fI\&.SF\fRファイルのコピーが含まれないようになっています。コマンドラインで\fI\-internalsf\fRを指定した場合、以前と同じように動作します。このオプションは、テストを行う場合に便利です。実際には、\fI\-internalsf\fRオプションは、オーバーヘッドが大きくなるため、使用しないでください。 ! .RE ! .PP \-sectionsonly ! .RS 4 ! コマンドラインで\fI\-sectionsonly\fRオプションを指定した場合、JARファイルの署名時に生成される\fI\&.SF\fRファイル(署名ファイル)には、マニフェスト・ファイル全体のハッシュを含むヘッダーは含まれません。これに含まれるのは、JARファイル内の各ソース・ファイルに関連する情報およびハッシュのみです。署名ファイルを参照してください。 ! .sp ! デフォルトでは、最適化のために、このヘッダーが追加されます。ヘッダーが存在する場合、JARファイルを検証するたびに、検証では、まずヘッダー内のハッシュがマニフェスト・ファイル全体のハッシュと一致するかどうかを確認するためにチェックできます。一致する場合、検証は次の手順に進みます。一致しない場合、\fI\&.SF\fRファイル内の各ソース・ファイル情報セクションのハッシュが、マニフェスト・ファイル内の対応するセクションのハッシュと一致するという、あまり最適化されていない検証を実行する必要があります。JARファイルの検証を参照してください。 ! .sp ! \fI\-sectionsonly\fRオプションは、主にテスト用に使用されます。これを使用するとオーバーヘッドが大きくなるため、テスト用以外では使用しないでください。 ! .RE ! .PP \-protected ! .RS 4 ! \fItrue\fRまたは\fIfalse\fRのいずれかの値を指定できます。専用PINリーダーなどの保護された認証パスによってパスワードを指定する必要がある場合、\fItrue\fRを指定します。 ! .RE ! .PP ! \-providerClass \fIprovider\-class\-name\fR ! .RS 4 ! 暗号化サービス・プロバイダが\fIjava\&.security\fRセキュリティ・プロパティ・ファイルに指定されていないときは、そのマスター・クラス・ファイルの名前を指定するときに使用されます。 ! .sp ! \fI\-providerArg ConfigFilePath\fRオプションとともに使用し、\fIkeytool\fRおよび\fIjarsigner\fRツールは、プロバイダを動的にインストールし、トークン構成ファイルへのパスに\fIConfigFilePath\fRを使用します。次の例は、Oracle PKCS #11プロバイダがセキュリティ・プロパティ・ファイルに構成されていなかった場合に\fIPKCS #11\fRキーストアを一覧表示するコマンドを示しています。 ! .sp ! .if n \{\ ! .RS 4 ! .\} ! .nf ! jarsigner \-keystore NONE \-storetype PKCS11 \e ! \-providerClass sun\&.security\&.pkcs11\&.SunPKCS11 \e ! \-providerArg /mydir1/mydir2/token\&.config \e \-list .fi ! .if n \{\ ! .RE ! .\} ! .RE ! .PP ! \-providerName \fIproviderName\fR ! .RS 4 ! \fIjava\&.security\fRセキュリティ・プロパティ・ファイル内で2つ以上のプロバイダが構成された場合、\fI\-providerName\fRオプションを使用して、特定のプロバイダ・インスタンスを対象にすることができます。このオプションの引数は、プロバイダの名前です。 ! .sp ! Oracle PKCS #11プロバイダの場合、\fIproviderName\fRは\fISunPKCS11\-\fR\fITokenName\fRという形式になります。ここで、構成属性の表で詳細に説明されているように、\fITokenName\fRは、プロバイダ・インスタンスが構成された名前の接尾辞です。たとえば、次のコマンドは、名前接尾辞\fISmartCard\fRの\fIPKCS #11\fRキーストア・プロバイダ・インスタンスの内容を一覧表示します。 ! .sp ! .if n \{\ ! .RS 4 ! .\} ! .nf ! jarsigner \-keystore NONE \-storetype PKCS11 \e ! \-providerName SunPKCS11\-SmartCard \e \-list .fi ! .if n \{\ ! .RE ! .\} ! .RE ! .PP ! \-J\fIjavaoption\fR ! .RS 4 ! 指定された\fIjavaoption\fR文字列をJavaインタプリタに直接渡します。\fIjarsigner\fRコマンドは、インタプリタに対するラッパーです。このオプションには、空白を含めることはできません。このオプションは、実行環境またはメモリー使用を調整する場合に便利です。指定できるインタプリタ・オプションを一覧表示するには、コマンドラインで\fIjava \-h\fRまたは\fIjava \-X\fRと入力してください。 ! .RE ! .PP ! \-tsa \fIurl\fR ! .RS 4 ! \fI\-tsa http://example\&.tsa\&.url\fRがJARファイルの署名時にコマンドラインにある場合、署名のタイムスタンプが生成されます。URL ! \fIhttp://example\&.tsa\&.url\fRは、Time Stamping Authority (TSA)の場所を特定し、\fI\-tsacert\fRオプションを指定して検出されたURLをオーバーライドします。\fI\-tsa\fRオプションでは、TSAの公開鍵証明書をキーストアに配置する必要はありません。 ! .sp ! タイムスタンプを生成するために、\fIjarsigner\fRは、RFC 3161で定義されているタイムスタンプ・プロトコル(TSP)を使用してTSAと通信します。成功すると、TSAによって返されたタイムスタンプ・トークンは、署名ブロック・ファイルの署名とともに保存されます。 ! .RE ! .PP ! \-tsacert \fIalias\fR ! .RS 4 ! \fI\-tsacert alias\fRがJARファイルの署名時にコマンドラインにある場合、署名のタイムスタンプが生成されます。別名は、キーストア内の有効なTSAの公開鍵証明書を特定します。エントリの証明書で、TSAの場所を特定するURLを含むSubject Information Access拡張機能が確認されます。 ! .sp ! \fI\-tsacert\fRオプションを使用する場合は、TSAの公開鍵証明書がキーストアに配置されている必要があります。 ! .RE ! .PP ! \-tsapolicyid \fIpolicyid\fR ! .RS 4 ! TSAサーバーに送信するポリシーIDを識別するオブジェクト識別子(OID)を指定します。このオプションを指定しない場合、ポリシーIDは送信されず、TSAサーバーはデフォルトのポリシーIDを選択します。 ! .sp ! オブジェクト識別子は、ITU Telecommunication Standardization Sector (ITU\-T)標準であるX\&.696によって定義されます。これらの識別子は、通常、\fI1\&.2\&.3\&.4\fRなどの、負ではない数字のピリオド区切りのセットです。 ! .RE ! .PP ! \-altsigner \fIclass\fR ! .RS 4 ! このオプションは、代替署名メカニズムを指定します。完全修飾クラス名は、\fIcom\&.sun\&.jarsigner\&.ContentSigner\fR抽象クラスを拡張するクラス・ファイルを識別します。このクラス・ファイルへのパスは、\fI\-altsignerpath\fRオプションによって定義されます。\fI\-altsigner\fRオプションを使用した場合、\fIjarsigner\fRコマンドでは、指定されたクラスによって提供される署名メカニズムを使用します。それ以外の場合、\fIjarsigner\fRコマンドはデフォルトの署名メカニズムを使用します。 ! .sp ! たとえば、\fIcom\&.sun\&.sun\&.jarsigner\&.AuthSigner\fRという名前のクラスが提供する署名メカニズムを使用するには、jarsignerのオプション\fI\-altsigner com\&.sun\&.jarsigner\&.AuthSigner\fRを使用します。 ! .RE ! .PP ! \-altsignerpath \fIclasspathlist\fR ! .RS 4 ! クラス・ファイルおよびそれが依存するJARファイルへのパスを指定します。\fI\-altsigner\fRオプションを使用して、クラス・ファイル名を指定します。クラス・ファイルがJARファイル内にある場合、このオプションでは、そのJARファイルへのパスを指定します。 ! .sp ! 絶対パスまたは現在のディレクトリへの相対パスを指定できます。\fIclasspathlist\fRに複数のパスやJARファイルが含まれる場合、それらを、Oracle Solarisの場合はコロン(:)で、Windowsの場合はセミコロン(;)で、それぞれ区切ります。目的のクラスがすでに検索パス内にある場合は、このオプションは不要です。 ! .sp ! 次の例では、クラス・ファイルを含むJARファイルへのパスを指定する方法を示します。JARファイル名を含めます。 ! .sp ! .if n \{\ ! .RS 4 ! .\} ! .nf ! \-altsignerpath /home/user/lib/authsigner\&.jar ! .fi ! .if n \{\ ! .RE ! .\} ! 次の例では、クラス・ファイルを含むJARファイルへのパスを指定する方法を示します。JARファイル名を省略します。 ! .sp ! .if n \{\ ! .RS 4 ! .\} .nf \-altsignerpath /home/user/classes/com/sun/tools/jarsigner/ .fi ! .if n \{\ ! .RE ! .\} ! .RE ! .PP \-strict ! .RS 4 ! 署名または検証処理中に、コマンドにより警告メッセージが発行される場合があります。このオプションを指定すると、コマンドにより検出された重大な警告メッセージがツールの終了コードに反映されます。エラーと警告を参照してください。 ! .RE ! .PP ! \-verbose \fIsuboptions\fR ! .RS 4 ! 検証処理の場合、\fI\-verbose\fRオプションには、表示する情報の量を決定するサブオプションを指定します。\fI\-certs\fRオプションも指定した場合、デフォルト・モード(またはサブオプション\fIall\fR)では、エントリが処理されるたびに各エントリが表示され、その後にJARファイルの各署名者の証明書情報も表示されます。\fI\-certs\fRおよび\fI\-verbose:grouped\fRサブオプションを指定した場合、同じ署名者情報を持つエントリが、その証明書情報とともに、グループ化されて表示されます。\fI\-certs\fRおよび\fI\-verbose:summary\fRサブオプションを指定した場合、同じ署名者情報を持つエントリが、その証明書情報とともに、グループ化されて表示されます。各エントリの詳細は、\fI1つのエントリ(以上)\fRにまとめられて表示されます。例を参照してください。 ! .RE ! .SH "エラーと警告" ! .PP ! 署名または検証プロセス中に、\fIjarsigner\fRコマンドで、様々なエラーまたは警告が発行される可能性があります。 ! .PP ! 障害がある場合、\fIjarsigner\fRコマンドはコード1で終了します。障害はないが、1つ以上の重大な警告がある場合、\fI\-strict\fRオプションが指定されて\fBいない\fR場合は、\fIjarsigner\fRコマンドはコード0で終了し、\fI\-strict\fRが指定されている場合は警告コードのOR値で終了します。情報警告のみがある、または警告がまったくない場合、コマンドは常にコード0で終了します。 ! .PP ! たとえば、エントリの署名に使用される証明書が期限切れで、ファイルの署名を許可しないKeyUsage拡張機能を使用している場合、\fI\-strict\fRオプションが指定されていると、\fIjarsigner\fRコマンドはコード12 (=4+8)で終了します。 ! .PP ! \fB注意:\fR ! UNIXベースのオペレーティング・システムでは0から255までの値のみが有効のため、終了コードは再利用されます。 ! .PP ! 次のセクションでは、\fIjarsigner\fRコマンドにより発行できるエラーおよび警告の名前、コード、説明を記述します。 ! .SS "障害" ! .PP ! コマンドライン解析エラー、JARファイルに署名する鍵ペアを検索できない、または署名付きJARファイルの検証失敗など(限定されません)、\fIjarsigner\fRコマンドの失敗理由。 ! .PP ! failure ! .RS 4 ! コード1。署名または検証が失敗します。 ! .RE ! .SS "重大な警告" ! .PP ! \fB注意:\fR ! \fI\-strict\fRオプションを指定した場合、重大な警告はエラーとして報告されます。 ! .PP ! JARファイルの署名に使用する証明書にエラーがある、または署名付きJARファイルに他の問題があるなど、\fIjarsigner\fRコマンドが重大な警告を発行する理由。 ! .PP ! hasExpiredCert ! .RS 4 ! コード4。このjarには、署名者証明書が期限切れのエントリが含まれています。 ! .RE ! .PP ! notYetValidCert ! .RS 4 ! コード4。このjarには、署名者証明書がまだ有効になっていないエントリが含まれています。 ! .RE ! .PP ! chainNotValidated ! .RS 4 ! コード4。このjarには、証明書チェーンが正しく検証できないエントリが含まれています。 ! .RE ! .PP ! badKeyUsage ! .RS 4 ! コード8。このJARには、署名者証明書のKeyUsage拡張機能がコード署名を許可しないエントリが含まれています。 ! .RE ! .PP ! badExtendedKeyUsage ! .RS 4 ! コード8。このjarには、署名者証明書のExtendedKeyUsage拡張機能がコード署名を許可しないエントリが含まれています。 ! .RE ! .PP ! badNetscapeCertType ! .RS 4 ! コード8。このjarには、署名者証明書のNetscapeCertType拡張機能がコード署名を許可しないエントリが含まれています。 ! .RE ! .PP ! hasUnsignedEntry ! .RS 4 ! コード16。このjarには、整合性チェックをしていない未署名のエントリが含まれています。 ! .RE ! .PP ! notSignedByAlias ! .RS 4 ! コード32。このjarには、指定された別名によって署名されていない署名済エントリが含まれています。 ! .RE ! .PP ! aliasNotInStore ! .RS 4 ! コード32。このjarには、このキーストア内の別名によって署名されていない署名済エントリが含まれます。 ! .RE ! .SS "情報警告" ! .PP ! 情報警告には、エラーではないが不適切とみなされるものが含まれます。コードはありません。 ! .PP ! hasExpiringCert ! .RS 4 ! このjarには、署名者証明書が6か月以内に期限切れとなるエントリが含まれています。 ! .RE ! .PP ! noTimestamp ! .RS 4 ! このjarには、タイムスタンプを含まない署名が含まれています。タイムスタンプなしでは、署名者証明書の有効期限(\fIYYYY\-MM\-DD\fR)後または将来の取消日後、ユーザーはこのJARファイルを検証できない場合があります。 .RE .SH "例" ! .SS "JARファイルの署名" ! .PP ! 次のコマンドを使用して、キーストア別名が\fIworking\fRディレクトリの\fImystore\fRという名前のキーストアにある\fIjane\fRであるユーザーの秘密鍵でbundle\&.jarに署名し、署名付きJARファイルに\fIsbundle\&.jar\fRという名前を付けます。 ! .sp ! .if n \{\ ! .RS 4 ! .\} ! .nf ! jarsigner \-keystore /working/mystore ! \-storepass <keystore password> ! \-keypass <private key password> ! \-signedjar sbundle\&.jar bundle\&.jar jane .fi ! .if n \{\ ! .RE ! .\} ! .PP ! 前述のコマンドでは\fI\-sigfile\fRが指定されていないため、署名付きJARファイルに格納される生成された\fI\&.SF\fRファイルおよび\fI\&.DSA\fRファイルの名前は、別名に基づいたデフォルトの名前になります。これらは、名前付きの\fIJANE\&.SF\fRおよび\fIJANE\&.DSA\fRです。 ! .PP ! ストアのパスワードおよび秘密鍵のパスワードを求められる場合、前述のコマンドを短縮して、次のことを実行できます。 ! .sp ! .if n \{\ ! .RS 4 ! .\} ! .nf ! jarsigner \-keystore /working/mystore ! \-signedjar sbundle\&.jar bundle\&.jar jane .fi ! .if n \{\ ! .RE ! .\} ! .PP ! キーストアがデフォルトのキーストア(ホーム・ディレクトリ内の\&.keystore)である場合、次に示すように、キーストアを指定する必要がありません。 ! .sp ! .if n \{\ ! .RS 4 ! .\} ! .nf ! jarsigner \-signedjar sbundle\&.jar bundle\&.jar jane .fi ! .if n \{\ ! .RE ! .\} ! .PP ! 入力JARファイル(bundle\&.jar)を署名付きJARファイルで上書きする場合、次のように\fI\-signedjar\fRオプションを指定する必要はありません。 ! .sp ! .if n \{\ ! .RS 4 ! .\} ! .nf ! jarsigner bundle\&.jar jane .fi ! .if n \{\ ! .RE ! .\} ! .SS "署名付きJARファイルの検証" ! .PP ! 署名付きJARファイルを検証して、署名が有効でJARファイルが改ざんされなかったことを確認するには、次のようなコマンドを使用します。 ! .sp ! .if n \{\ ! .RS 4 ! .\} ! .nf ! jarsigner \-verify sbundle\&.jar .fi + .if n \{\ + .RE + .\} + .PP + 検証が成功すると、\fIjar verified\fRが表示されます。そうでない場合は、エラー・メッセージが表示されます。\fI\-verbose\fRオプションを使用すると、詳細情報を取得できます。\fIjarsigner\fRを\fI\-verbose\fRオプションとともに使用するサンプルを、次に示します。 + .sp + .if n \{\ + .RS 4 + .\} + .nf + jarsigner \-verify \-verbose sbundle\&.jar + + 198 Fri Sep 26 16:14:06 PDT 1997 META\-INF/MANIFEST\&.MF + 199 Fri Sep 26 16:22:10 PDT 1997 META\-INF/JANE\&.SF + 1013 Fri Sep 26 16:22:10 PDT 1997 META\-INF/JANE\&.DSA + smk 2752 Fri Sep 26 16:12:30 PDT 1997 AclEx\&.class + smk 849 Fri Sep 26 16:12:46 PDT 1997 test\&.class + + s = signature was verified + m = entry is listed in manifest + k = at least one certificate was found in keystore ! jar verified\&. .fi ! .if n \{\ .RE + .\} + .SS "証明書情報を使用した検証" + .PP + \fI\-certs\fRオプションを\fI\-verify\fRおよび\fI\-verbose\fRオプションとともに指定した場合、JARファイルの各署名者の証明書情報が出力に含まれます。この情報には、証明書タイプ、署名者の識別名情報(X\&.509証明書の場合)が含まれ、丸カッコ内には、JARファイルの公開鍵証明書がキーストア・エントリの公開鍵証明書に一致する場合の署名者のキーストア別名が含まれます。たとえば、次のようになります。 + .sp + .if n \{\ + .RS 4 + .\} + .nf + jarsigner \-keystore /working/mystore \-verify \-verbose \-certs myTest\&.jar + + 198 Fri Sep 26 16:14:06 PDT 1997 META\-INF/MANIFEST\&.MF + 199 Fri Sep 26 16:22:10 PDT 1997 META\-INF/JANE\&.SF + 1013 Fri Sep 26 16:22:10 PDT 1997 META\-INF/JANE\&.DSA + 208 Fri Sep 26 16:23:30 PDT 1997 META\-INF/JAVATEST\&.SF + 1087 Fri Sep 26 16:23:30 PDT 1997 META\-INF/JAVATEST\&.DSA + smk 2752 Fri Sep 26 16:12:30 PDT 1997 Tst\&.class + + X\&.509, CN=Test Group, OU=Java Software, O=Oracle, L=CUP, S=CA, C=US (javatest) + X\&.509, CN=Jane Smith, OU=Java Software, O=Oracle, L=cup, S=ca, C=us (jane) + + s = signature was verified + m = entry is listed in manifest + k = at least one certificate was found in keystore ! jar verified\&. ! .fi ! .if n \{\ .RE ! .\} ! .PP ! 署名者の証明書がX\&.509証明書ではない場合、識別名情報は表示されません。その場合には、証明書のタイプと別名のみが表示されます。たとえば、証明書がPGP証明書で、別名が\fIbob\fRである場合、\fIPGP, (bob)\fRを取得します。 .SH "関連項目" ! .sp ! .RS 4 ! .ie n \{\ ! \h'-04'\(bu\h'+03'\c ! .\} ! .el \{\ ! .sp -1 ! .IP \(bu 2.3 ! .\} ! jar(1) .RE ! .sp ! .RS 4 ! .ie n \{\ ! \h'-04'\(bu\h'+03'\c ! .\} ! .el \{\ ! .sp -1 ! .IP \(bu 2.3 ! .\} ! keytool(1) ! .RE ! .sp ! .RS 4 ! .ie n \{\ ! \h'-04'\(bu\h'+03'\c ! .\} ! .el \{\ ! .sp -1 ! .IP \(bu 2.3 ! .\} ! http://docs\&.oracle\&.com/javase/tutorial/security/index\&.htmlにある ! 「コース: Java SEのセキュリティ機能」 ! .RE ! .br ! 'pl 8.5i ! 'bp