Java ARchive (JAR) ファイルの署名を生成し、署名付き JAR ファイルの署名を検証します。
jarsigner [ options ] jar-file alias jarsigner -verify [ options ] jar-file [alias...]
jarsigner -verify コマンドは、jar ファイル名のあとに 0 個以上のキーストア別名を取ることができます。指定すると、jarsigner は、jar ファイル内の個々の署名済みエントリを検証するために使用された証明書がいずれかのキーストア別名と一致するかどうかを確認します。別名は、-keystore で指定されたキーストアまたはデフォルトのキーストアで定義されています。
jarsigner ツールは、次の 2 つの目的で使用します。
JAR 機能を使うと、クラスファイル、イメージ、サウンド、およびその他のデジタルデータを単一のファイルにパッケージ化できるので、ファイルを迅速かつ容易に配布できます。開発者は、jar という名前のツールを使って JAR ファイルを作成できます。技術的な観点から言えば、すべての ZIP ファイルも JAR ファイルと見なすことができます。ただし、jar によって作成された JAR ファイル、または jarsigner によって処理された JAR ファイルには、META-INF/MANIFEST.MF ファイルが含まれています。
デジタル署名は、なんらかのデータ (「署名」の対象となるデータ) と、エンティティー (人、会社など) の非公開鍵とに基づいて計算されるビット列です。手書きの署名同様、デジタル署名には多くの利点があります。
ファイルに対してエンティティーの署名を生成するには、まず、エンティティーは、そのエンティティーに関連する公開鍵と非公開鍵のペアを持つ必要があります。また、公開鍵を認証する 1 つまたは複数の証明書も必要です。証明書とは、あるエンティティーが発行したデジタル署名付きの文書で、別なエンティティーの公開鍵が特定の値であることを証明しています。
jarsigner は、キーストアに含まれる鍵と証明書情報を使って、JAR ファイルのデジタル署名を生成します。キーストアは、非公開鍵と、非公開鍵に関連付けられた X.509 証明書チェーンが収められたデータベースです。キーストアの作成と管理には、keytool ユーティリティーを使います。
jarsigner は、エンティティーの非公開鍵を使って署名を生成します。署名付き JAR ファイルには、ファイルの署名に使用する非公開鍵に対応する公開鍵を保存するキーストアから取った証明書のコピーも含まれています。jarsigner は、署名付き JAR ファイルのデジタル署名を、ファイル内 (の署名ブロックファイル) に含まれている証明書を使って検証できます。
jarsigner はタイムスタンプを含む署名を生成するので、システムやデプロイヤ (Java Plug-in を含む) は JAR ファイルが署名証明書の有効期間中に署名されたかどうかをチェックできます。さらに、アプリケーションは API を使用してタイムスタンプ情報を取得できます。
現時点では、jarsigner で署名できるのは、SDK の jar ツールで作成された JAR ファイル、または ZIP ファイルだけです。JAR ファイルは ZIP ファイルと同じですが、JAR ファイルには META-INF/MANIFEST.MF ファイルが含まれている点が異なります。このようなファイルは、jarsigner が ZIP ファイルに署名を付けるときに自動的に作成されます。
デフォルトでは、jarsigner は JAR (または ZIP) ファイルに署名を付けます。署名付き JAR ファイルを検証する場合は、-verify
オプションを指定します。
キーストアのすべてのエントリは、一意の別名を介してアクセスされます。
jarsigner を使って JAR ファイルに署名を付けるときは、署名の生成に必要な非公開鍵を含むキーストアエントリの別名を指定する必要があります。たとえば、次の例は、working ディレクトリの mystore という名前のキーストアに含まれる別名 duke に関連付けられた非公開鍵を使って、MyJARFile.jar という名前の JAR ファイルに署名を付けます。出力ファイルは指定されていないので、MyJARFile.jar は署名付きの JAR ファイルによって上書きされます。
jarsigner -keystore /working/mystore -storepass <keystore password> -keypass <private key password> MyJARFile.jar duke
キーストアはパスワードで保護されているので、ストアのパスワードを指定する必要があります。コマンド行でストアのパスワードを指定しないと、パスワードの入力を求められます。同様に、非公開鍵もキーストア内でパスワードによって保護されているため、非公開鍵のパスワードを指定する必要があります。コマンド行で非公開鍵のパスワードを指定していない、また、指定したパスワートが保存されているパスワードと違っている場合には、非公開鍵のパスワードの入力を求められます。
jarsigner には、使用するキーストアの URL を指定する -keystore
オプションがあります。キーストアは、デフォルトではユーザーのホームディレクトリの .keystore
という名前のファイルに格納されます。ユーザーのホームディレクトリは、user.home
システムプロパティーによって決まります。Solaris システムの場合、user.home
がデフォルトでユーザーのホームディレクトリになっています。
-keystore
オプションからの入力ストリームは、KeyStore.load
メソッドに渡されます。URL として NONE
が指定されている場合は、null のストリームが KeyStore.load
メソッドに渡されます。NONE
は、KeyStore
がファイルベースではなく、たとえば、ハードウェアトークンデバイスに置かれている場合に指定します。
java.security
パッケージで提供される KeyStore
クラスには、キーストア内の情報に対するアクセスと変更を行うための明確に定義されたインタフェースが用意されています。複数の異なる固定実装を生成できます (それぞれ特定の型のキーストアを実装)。
現在、キーストアの実装を使用するものとして、keytool と jarsigner の 2 つのコマンド行ツールと、Policy Tool という GUI ベースのツールがあります。KeyStore
は public として使用可能なので、Java 2 SDK ユーザーは KeyStore を使ったほかのセキュリティーアプリケーションも作成できます。
キーストアには、Sun が提供する組み込みのデフォルトの実装があります。これは、JKS という名前の独自のキーストアタイプ (形式) を利用するもので、キーストアをファイルとして実装しています。この実装では、個々の非公開鍵は個別のパスワードによって保護され、キーストア全体の整合性も (非公開鍵とは別の) パスワードによって保護されます。
キーストアの実装は、プロバイダベースです。具体的には、KeyStore
が提供するアプリケーションインタフェースは、Service Provider Interface (SPI) という形で実装されています。つまり、対応する KeystoreSpi
抽象クラス (これも java.security
パッケージ内) があり、Service Provider Interface メソッド (「プロバイダ」が実装する必要がある) を定義しています。ここで、「プロバイダ」とは、Java Security API によってアクセス可能なサービスのサブセットに対し、その固定実装を提供するパッケージまたはパッケージの集合のことです。したがって、キーストアの実装を提供するには、「Java 暗号化アーキテクチャー用プロバイダの実装方法」で説明しているように、クライアントがプロバイダを実装し、KeystoreSpi サブクラスの実装を提供する必要があります。
アプリケーションでは、KeyStore
クラスが提供する getInstance ファクトリメソッドを使うことで、さまざまなプロバイダから異なる型のキーストア実装を選択できます。キーストアの型は、キーストア情報のストレージ形式とデータ形式を定義するとともに、キーストア内の非公開鍵とキーストア自体の整合性を保護するために使われるアルゴリズムを定義します。異なる型のキーストアの実装には、互換性はありません。
keytool は、任意のファイルベースキーストア実装で動作します。(コマンド行で渡されたキーストアの場所をファイル名として扱い、これを FileInputStream に変換して、そこからキーストア情報をロードします。)一方、jarsigner および policytool ツールは、URL を使って指定可能な任意の場所からキーストアを読み取ることができます。
jarsigner と keytool の場合は、-storetype オプションを使ってコマンド行でキーストアのタイプを指定できます。Policy Tool の場合は、「編集」メニューの「キーストアの変更」コマンドを使ってキーストアのタイプを指定できます。
キーストア型を明示的に指定しない場合、ツールはセキュリティープロパティーファイル内で指定された keystore.type
プロパティーの値に基づいてキーストア実装を選択します。セキュリティープロパティーファイルは、java.security という名前で SDK セキュリティープロパティーディレクトリ java.home/lib/security
に置かれています。java.home は、実行環境のディレクトリ (SDK の jre ディレクトリ、または Java 2 Runtime Environment の最上位のディレクトリ) です。
各ツールは、keystore.type
値を取得してから、現在インストールされているすべてのプロバイダを調べてその型のキーストアを実装しているものを見つけます。目的のプロバイダが見つかると、そのプロバイダからのキーストアの実装を使います。
KeyStore
クラスには、アプリケーションとアプレットが keystore.type
プロパティーの値を取得するための getDefaultType
という名前の static メソッドが定義されています。次のコード行は、デフォルトキーストア型 (keystore.type
プロパティーで指定されたもの) のインスタンスを生成します。
KeyStore keyStore = KeyStore.getInstance(KeyStore.getDefaultType());
デフォルトのキーストアタイプは JKS (Sun が提供する独自のタイプのキーストアの実装) です。これは、セキュリティープロパティーファイル内の次の行によって指定されています。
keystore.type=jks
注:キーストアのタイプの指定では、大文字と小文字は区別されません。たとえば、JKS と jks は同じものとして扱われます。
各ツールでデフォルト以外のキーストアの実装を使用するには、上の行を変更して別のキーストアのタイプを指定します。たとえば、pkcs12 と呼ばれるタイプのキーストアの実装を提供しているプロバイダパッケージを使用するには、上の行を次のように変更します。
keystore.type=pkcs12
PKCS#11 プロバイダパッケージを使用する場合、その詳細については、「Java PKCS#11 リファレンスガイド」の「KeyTool および JarSigner」を参照してください。
デフォルトでは、jarsigner は次のどちらかのアルゴリズムを使って JAR ファイルに署名します。
具体的には、署名者の公開鍵と非公開鍵が DSA 鍵である場合、jarsigner は SHA1withDSA アルゴリズムを使って JAR ファイルに署名を付けます。署名者の鍵が RSA 鍵である場合、jarsigner は SHA256withRSA アルゴリズムを使って JAR ファイルに署名を付けます。署名者の鍵が EC 鍵である場合、jarsigner は SHA256withECDSA アルゴリズムを使って JAR ファイルに署名を付けます。
これらのデフォルトの署名アルゴリズムは、-sigalg オプションを使ってオーバーライドできます。
jarsigner を使って JAR ファイルに署名を付けた場合、出力される署名付き JAR ファイルは入力 JAR ファイルと同じですが、次の 2 つの追加ファイルが META-INF ディレクトリに置かれる点が異なります。
これら 2 つのファイルのベースファイル名は、-sigFile
オプションの値から作成されます。たとえば、次のようにオプションを指定したとします。
-sigFile MKSIGN
この場合、ファイル名はそれぞれ MKSIGN.SF と MKSIGN.DSA になります。
コマンド行で -sigfile
オプションが出現しない場合、.SF ファイルと .DSA ファイルのベースファイル名は、コマンド行で指定された別名の先頭の 8 文字をすべて大文字に変換したものになります。別名が 8 文字未満の場合は、別名がそのまま使われます。別名の中に、署名ファイル名に使用できない文字が含まれている場合は、該当する文字を下線 (_) に置き換えてファイル名が作成されます。使用できる文字は、アルファベット、数字、下線 (_)、ハイフンです。
署名ファイル (.SF ファイル) は、jarsigner で署名を付けた JAR ファイルに常に含まれるマニフェストファイルと似ています。つまり、マニフェストファイル同様、.SF ファイルには、JAR ファイルに含まれているソースファイルごとに、次の 3 つの行があります。
マニフェストファイルでは、SHA ダイジェストの値は、ソースファイルのバイナリデータのダイジェスト (ハッシュ) です。一方、.SF ファイルでは、ソースファイルのダイジェストの値は、マニフェストファイル中の該当するソースファイルに対応する 3 行のハッシュです。
署名ファイルには、デフォルトでマニフェストファイル全体のハッシュも含まれています。後述の「JAR ファイルの検証」で説明するように、このヘッダーの存在によって検証の最適化が可能になっています。
jarsigner
ツールは、JAR ファイルの署名時に署名タイムスタンプを生成して保存できます。さらに、jarsigner
は代替署名メカニズムをサポートします。この動作は省略可能で、署名時に次の各オプションによって制御されます。
これらの各オプションの詳細については、後述の「オプション」を参照してください。
JAR ファイルの検証が成功するのは、署名が有効であり、かつ署名の生成以後に JAR ファイル内のどのファイルも変更されていない場合です。JAR ファイルの検証は、次の手順で行われます。
jar
ツールを使用) された可能性があります。jar
ツールを使ってファイルを追加した場合、マニフェストファイルは変更されますが (新しいファイル用のセクションが追加される)、.SF ファイルは変更されません。この場合、.SF ファイルのヘッダー以外のセクションに格納されたハッシュが、マニフェストファイル内の対応するセクションのハッシュと一致するときは、署名の生成時に JAR ファイル内に存在していたファイルのうち、どのファイルも変更されていないことになり、検証は成功したものとして扱われます。
検証プロセスの途中でなんらかの重大な検証エラーが発生した場合、検証プロセスは中止され、セキュリティー例外がスローされます。スローされたセキュリティー例外は、jarsigner がキャッチして表示します。
1 つの JAR ファイルに対して jarsigner ツールを複数回実行し、実行のたびに、異なるユーザーの別名を指定すれば、JAR ファイルに複数のユーザーの署名を付けることができます。
jarsigner myBundle.jar susan jarsigner myBundle.jar kevin
JAR ファイルが複数回署名されている場合、その JAR ファイルには .SF ファイルと .DSA ファイルの対が複数含まれることになります。.SF ファイルと .DSA ファイルの対は、1 回の署名に対して 1 つ作成されます。したがって、上の例で出力される JAR ファイルには、次の名前を持つファイルが含まれます。
SUSAN.SF SUSAN.DSA KEVIN.SF KEVIN.DSA
注:JAR ファイルでは、JDK 1.1 の javakey ツールで生成された署名と jarsigner で生成された署名が混在できます。つまり、すでに javakey を使って署名が付けられている JAR ファイルに、jarsigner を使って署名を付けることができます。
以下では、jarsigner のオプションについて説明します。注:
-keystore
、-storepass
、-keypass
、-sigfile
、-sigalg
、-digestalg
、および -signedjar
オプションを使用できるのは、署名付き JAR ファイルを検証する場合ではなく、JAR ファイルに署名する場合のみです。同様に、別名をコマンド行で指定するのは、JAR ファイルに署名を付ける場合だけである。-keystore
url-verbose
オプションも指定されている場合は、JAR ファイルの検証に使われる証明書がキーストアに存在するかどうかについての追加情報が出力されます。-keystore
の引数には、URL の代わりにファイル名 (とパス) を指定できます。ファイル名 (とパス) を指定した場合は、「file:」URL として扱われます。たとえば、次のように指定できます。
-keystore filePathAndNameこれは、次の指定と同じものとして扱われます。
-keystore file:filePathAndNameJRE の $JAVA_HOME/lib/security ディレクトリに格納された java.security セキュリティープロパティーファイル内で Sun PKCS#11 プロバイダが設定されている場合、keytool と jarsigner は PKCS#11 トークンに基づいて動作できます。次のオプションを指定します。
-keystore NONE
-storetype PKCS11
jarsigner -keystore NONE -storetype PKCS11 -list
-storetype
storetypejava.security.KeyStore
の static getDefaultType
メソッドで取得できます。-storepass
オプションを使って PCKS#11 トークンの PIN を指定することもできます。何も指定しなかった場合、keytool と jarsigner はユーザーにトークン PIN の 入力を求めます。トークンに保護された認証パス (専用の PIN パッドや生体読み取り機など) がある場合、-protected オプションを指定する必要がありますが、パスワードオプションを指定する必要はありません。
-storepass
[:env
|:file
] argument-storepass
オプションを指定しなかった場合は、パスワードの入力を求められます。env
または file
が指定されていない場合、パスワードの値は argument です。それ以外の場合、パスワードは次のように取得されます。
env
: argument という名前の環境変数からパスワードを取得しますfile
: argument という名前のファイルからパスワードを取得します-keypass
[:env
|:file
] argumentenv
または file
が指定されていない場合、パスワードの値は argument です。それ以外の場合、パスワードは次のように取得されます。
env
: argument という名前の環境変数からパスワードを取得しますfile
: argument という名前のファイルからパスワードを取得します-sigfile
file-sigfile
オプションが出現しない場合、.SF ファイルと .DSA ファイルのベースファイル名は、コマンド行で指定された別名の先頭の 8 文字をすべて大文字に変換したものになります。別名が 8 文字未満の場合は、別名がそのまま使われます。別名の中に、署名ファイル名に使用できない文字が含まれている場合は、該当する文字を下線 (_) に置き換えてファイル名が作成されます。
-sigalg
algorithm-digestalg
algorithm-signedjar
file-verify
-certs
-verify
および -verbose
オプションとともにこのオプションが指定されている場合は、JAR ファイルの各署名者の証明書情報も出力されます。証明書情報には次のものが含まれます。
java.security.cert.X509Certificate
のインスタンス) である場合は、署名者の識別名-certchain
file-verbose
-internalsf
-internalsf
オプションを指定すると、以前と同じように動作します。このオプションは、テストを行う場合には便利ですが、それ以外には使用しないでください。このオプションを使用すると、有益な最適化が行われなくなります。-sectionsonly
-protected
true
または false
。専用 PIN リーダーなどの保護された認証パスを介してパスワードを指定する必要がある場合には、この値に true
を指定してください。-providerClass
provider-class-name-providerArg
ConfigFilePath オプションと組み合わせて使用します。keytool と jarsigner はプロバイダを動的にインストールします (ここで、ConfigFilePath はトークン設定ファイルへのパスです)。セキュリティープロパティーファイル内で Sun PKCS#11 プロバイダが設定されていない場合に PKCS#11 キーストアを一覧表示するコマンドの例を次に示します。
jarsigner -keystore NONE -storetype PKCS11 \ -providerClass sun.security.pkcs11.SunPKCS11 \ -providerArg /foo/bar/token.config \ -list
-providerName
providerNamejarsigner -keystore NONE -storetype PKCS11 \ -providerName SunPKCS11-SmartCard \ -list
-J
javaoptionjava -h
または java -X
と入力してください。
-tsa
url"-tsa http://example.tsa.url"
が表示される場合、署名のタイムスタンプが生成されます。URL http://example.tsa.url
は、TSA (Time Stamping Authority) の場所を特定します。これは、-tsacert
オプションで検出された URL をオーバーライドします。-tsa
オプションでは、TSA の公開鍵証明書がキーストアに配置されている必要はありません。jarsigner
は RFC 3161 で定義されている TSP (Time-Stamp Protocol) を使用して TSA と通信します。成功すると、TSA から返されたタイムスタンプトークンが署名ブロックファイルの署名とともに保存されます。
-tsacert
alias"-tsacert alias"
が表示される場合、署名のタイムスタンプが生成されます。alias
は、キーストア内の現在有効な TSA の公開鍵証明書を特定します。エントリの証明書で、TSA の場所を特定する URL を含む Subject Information Access 拡張機能が確認されます。-tsacert
を使用する場合は、TSA の公開鍵証明書がキーストアに配置されている必要があります。
-altsigner
クラスcom.sun.jarsigner.ContentSigner abstract class
を拡張するクラスファイルを特定します。このクラスファイルへのパスは、-altsignerpath
オプションによって定義されます。-altsigner
オプションが使用されている場合、jarsigner
は指定されたクラスが提供する署名メカニズムを使用します。それ以外の場合、jarsigner
はデフォルトの署名メカニズムを使用します。com.sun.sun.jarsigner.AuthSigner
というクラスが提供する署名メカニズムを使用するには、jarsigner
オプション "-altsigner com.sun.jarsigner.AuthSigner"
を使用します。
-altsignerpath
classpathlist-altsigner
オプションで指定される) およびそれが依存する JAR ファイルへのパスを指定します。クラスファイルが JAR ファイル内にある場合、次の例のように JAR ファイルへのパスが指定されます。classpathlist
に複数のパスまたは JAR ファイルを含める場合、Solaris ではコロン (:
)、Windows ではセミコロン (;
) を使用して区切ります。目的のクラスがすでに検索パス内にある場合は、このオプションは不要です。-altsignerpath /home/user/lib/authsigner.jarJAR ファイル名が含まれていることに注意してください。
-altsignerpath /home/user/classes/com/sun/tools/jarsigner/JAR ファイル名は含まれていないことに注意してください。
-strict
-verbose
:sub-options-verbose
オプションに追加できます。-certs
も指定した場合、デフォルトモード (またはサブオプション all) では、エントリが処理されるたびにそのエントリが表示され、それに続いて JAR ファイルの各署名者の証明書情報が表示されます。-certs
と -verbose:grouped
サブオプションを指定した場合、同じ署名者情報を持つエントリがグループ化され、その証明書情報とともに表示されます。-certs
と -verbose:summary
サブオプションを指定した場合、同じ署名者情報を持つエントリがグループ化され、その証明書情報とともに表示されますが、各エントリの詳細は「1 つのエントリ (およびそれ以上)」としてまとめて表示されます。詳細は、「例」を参照してください。bundle.jar という名前の JAR ファイルがあるとします。このファイルに、キーストアの別名が jane であるユーザーの非公開鍵を使って、署名を付けるとします。この場合、次のコマンドを実行すると、JAR ファイルに署名を付けて sbundle.jar という署名付き JAR ファイルを作成できます。
jarsigner -keystore /working/mystore -storepass <keystore password> -keypass <private key password> -signedjar sbundle.jar bundle.jar jane
上のコマンドでは -sigfile
オプションが指定されていないため、署名付き JAR ファイルに格納される .SF ファイルと .DSA ファイルの名前は、別名からデフォルト名が付けられます。つまり、JANE.SF
と JANE.DSA
になります。
ストアのパスワードと非公開鍵のパスワードをあとで入力する場合は、上のコマンドを短縮して次のように入力できます。
jarsigner -keystore /working/mystore -signedjar sbundle.jar bundle.jar jane
デフォルトのキーストア (ホームディレクトリ内の .keystore という名前のキーストア) を使用する場合は、次に示すように、キーストアの指定を省略できます。
jarsigner -signedjar sbundle.jar bundle.jar jane
また、署名付き JAR ファイルで入力 JAR ファイル (bundle.jar
) を上書きする場合は、-signedjar
オプションの指定も省略できます。
jarsigner bundle.jar jane
次に示すのは、署名付き JAR ファイルを検証し、署名が有効で JAR ファイルが改変されていないことを確認するためのコマンド例です。
jarsigner -verify sbundle.jar
検証が成功すると、次のようなメッセージが表示されます。
jar verified.
というプロンプトが表示されます。検証が成功しなかった場合は、エラーメッセージが表示されます。
-verbose
オプションを使うと、より多くの情報が表示されます。-verbose
オプションを指定した jarsigner の実行例とその出力結果を以下に示します。
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.
検証時に、-verify
と -verbose
オプションに加えて -certs
オプションを指定した場合は、JAR ファイルの各署名者の証明書情報も出力されます。これには、証明書のタイプ、署名者の識別名情報 (X.509 証明書の場合のみ)、および JAR ファイルの公開鍵の証明書がキーストアエントリの公開鍵の証明書と一致する場合には、括弧で囲まれた署名者のキーストア別名が含まれます。次に例を示します。
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=Sun Microsystems, L=CUP, S=CA, C=US (javatest) X.509, CN=Jane Smith, OU=Java Software, O=Sun, 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.
署名者の証明書が X.509 証明書でない場合は、識別名情報は表示されません。その場合には、証明書のタイプと別名だけが表示されます。たとえば、証明書が PGP 証明書で、別名が bob の場合は、次のように表示されます。
PGP, (bob)
JAR ファイルが、JDK 1.1 の javakey ツールを使って署名されている場合、署名者はアイデンティティーデータベース内の別名です。この場合、検証の出力には i という記号が含まれます。JAR ファイルが、アイデンティティーデータベース内の別名とキーストア内の別名の両方によって署名されている場合は、k と i の両方が表示されます。
-certs
オプションを指定した場合、キーストアの別名は括弧で囲まれるのに対し、アイデンティティーデータベース内の別名は角括弧で囲まれて表示されます。たとえば、
jarsigner -keystore /working/mystore -verify -verbose -certs writeFile.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 199 Fri Sep 27 12:22:30 PDT 1997 META-INF/DUKE.SF 1013 Fri Sep 27 12:22:30 PDT 1997 META-INF/DUKE.DSA smki 2752 Fri Sep 26 16:12:30 PDT 1997 writeFile.html X.509, CN=Jane Smith, OU=Java Software, O=Sun, L=cup, S=ca, C=us (jane) X.509, CN=Duke, OU=Java Software, O=Sun, L=cup, S=ca, C=us [duke] s = signature was verified m = entry is listed in manifest k = at least one certificate was found in keystore i = at least one certificate was found in identity scope jar verified.
別名 duke は角括弧で囲まれているので、この別名はキーストアの別名ではなく、アイデンティティーデータベースの別名です。
hasExpiringCert 2 This jar contains entries whose signer certificate will expire within six months hasExpiredCert 4 This jar contains entries whose signer certificate has expired. notYetValidCert 4 This jar contains entries whose signer certificate is not yet valid. chainNotValidated 4 This jar contains entries whose certificate chain cannot be correctly validated. badKeyUsage 8 This jar contains entries whose signer certificate's KeyUsage extension doesn't allow code signing. badExtendedKeyUsage 8 This jar contains entries whose signer certificate's ExtendedKeyUsage extension doesn't allow code signing. badNetscapeCertType 8 This jar contains entries whose signer certificate's NetscapeCertType extension doesn't allow code signing. hasUnsignedEntry 16 This jar contains unsigned entries which have not been integrity-checked. notSignedByAlias 32 This jar contains signed entries which are not signed by the specified alias(es) aliasNotInStore 32 This jar contains signed entries that are not signed by alias in this keystore
-strict
オプションを指定した場合、検出された警告の OR を取った値がツールの終了コードとして返されます。たとえば、エントリの署名に使用される証明書の有効期限が切れており、その証明書の keyUsage 拡張機能でファイルの署名が許可されていない場合は、終了コード 12 (=4+8) が返されます。
注:UNIX で有効な値は 0-255 のみであるため、終了コードは再利用されています。いずれにしても、署名または検証処理が失敗すると、次の終了コードが返されます。
failure 1
keytool ツールと jarsigner ツールは、JDK 1.1 で提供されていた javakey ツールを完全に置き換えるものです。これらの新しいツールは javakey よりも多くの機能を備えており、キーストアと非公開鍵をパスワードで保護する機能や、署名の生成に加えて署名を検証する機能を持っています。
新しいキーストアアーキテクチャーは、javakey が作成して管理していたアイデンティティーデータベースに代わるものです。キーストア形式と、JDK 1.1 の javakey が使っていたデータベース形式との間には下位互換性はありません。ただし、次のようなことは可能です。
-identitydb
コマンドを使うと、アイデンティティーデータベースの情報をキーストアにインポートできます。次の表は、JDK 1.1.x で署名された JAR ファイルが、Java 2 プラットフォームでどのように扱われるかを示しています。
JAR ファイルのタイプ | 1.1 データベース内のアイデンティティー | 1.1 データベースから Java 2 Platform キーストアにインポートされる信頼できるアイデンティティー (4) | ポリシーファイルがアイデンティティー/別名に特権を与える | 与えられる特権 |
---|---|---|---|---|
署名付き JAR |
NO |
NO |
NO |
すべてのコードに与えられるデフォルトの特権 |
署名のない JAR |
NO |
NO |
NO |
すべてのコードに与えられるデフォルトの特権 |
署名付き JAR |
NO |
YES |
NO |
すべてのコードに与えられるデフォルトの特権 |
署名付き JAR |
あり/信頼できない |
NO |
NO |
すべてのコードに与えられるデフォルトの特権 (3) |
署名付き JAR |
あり/信頼できない |
NO |
YES |
すべてのコードに与えられるデフォルトの特権 (1,3) |
署名付き JAR |
NO |
YES |
YES |
すべてのコードに与えられるデフォルトの特権とポリシーファイル内で与えられる特権 |
署名付き JAR |
あり/信頼できる |
YES |
YES |
すべてのコードに与えられるデフォルトの特権とポリシーファイル内で与えられる特権 (2) |
署名付き JAR |
あり/信頼できる |
NO |
NO |
すべての特権 |
署名付き JAR |
あり/信頼できる |
YES |
NO |
すべての特権 (1) |
署名付き JAR |
あり/信頼できる |
NO |
YES |
すべての特権 (1) |
注: