jarsigner [ options ] jar-file alias
jarsigner -verify [ options ] jar-file [alias ...]
options
-verify
-strictオプションも指定した場合、jarsignerコマンドにより重大な警告が検出されると、メッセージ「jarが検証されました。署名者エラー」が表示されます。
jar-file
-strictオプションも指定した場合、jarsignerコマンドにより重大な警告が検出されると、メッセージ「jarは署名されました - 署名者エラーがあります。」というメッセージが表示されます。
alias
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コマンドでは、署名証明書の有効期間中にJARファイルが署名されたされたかどうかをシステムやデプロイヤ(Java Plug-inを含む)がチェックできる、タイムスタンプを含む署名を生成できます。さらに、APIを使用すると、アプリケーションでタイムスタンプ情報を取得できます。
現時点では、jarsignerコマンドでは、jarコマンドまたはZIPファイルによって作成されたJARファイルのみに署名できます。JARファイルはZIPファイルと同じですが、JARファイルにはMETA-INF/MANIFEST.MFファイルも含まれている点が異なります。META-INF/MANIFEST.MFファイルは、jarsignerコマンドによってZIPファイルに署名する際に作成されます。
デフォルトのjarsignerコマンドの動作では、JARまたはZIPファイルに署名します。-verifyオプションを使用して、署名付きJARファイルを検証します。
jarsignerコマンドは、署名または検証の後に署名者の証明書の検証も試行します。検証エラーまたはその他の問題が発生すると、コマンドにより警告メッセージが生成されます。-strictオプションを指定した場合、コマンドにより重大な警告がエラーとして処理されます。エラーと警告を参照してください。
キーストアのすべてのエンティティは、一意の別名を使用してアクセスされます。
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オプションがあります。キーストアはデフォルトで、user.homeシステム・プロパティで決まるユーザーのホーム・ディレクトリの.keystoreという名前のファイル内に格納されます。
Oracle Solarisシステムの場合、user.homeは、ユーザーのホーム・ディレクトリにデフォルト設定されます。
-keystoreオプションからの入力ストリームは、KeyStore.loadメソッドに渡されます。URLとしてNONEが指定されている場合は、nullのストリームがKeyStore.loadメソッドに渡されます。NONEは、KeyStoreクラスがファイルベースではない場合、たとえば、ハードウェア・トークン・デバイスに置かれている場合に指定します。
java.security packageで提供されているKeyStoreクラスは、キーストア内の情報へのアクセスおよび情報の変更を行うための、明確に定義された多くのインタフェースを提供します。複数の異なる固定実装を指定することができ、各実装は特定のタイプのキーストアを対象とします。
現在、キーストアの実装を使用する2つのコマンド行ツール(keytoolとjarsigner)、およびポリシー・ツールという名前の1つのGUIベースのツールがあります。KeyStoreクラスは公開されているため、JDKユーザーは、それを使用する他のセキュリティ・アプリケーションを書き込むことができます。
Oracleが提供する組込みのデフォルトの実装があります。これは、JKSという名前の独自のキーストア・タイプ(形式)を使用するもので、キーストアをファイルとして実装しています。組込みの実装では、各秘密鍵は個別のパスワードによって保護され、キーストア全体の整合性は(秘密鍵とは別の)パスワードによって保護されます。
キーストアの実装はプロバイダベースで、つまり、KeyStoreクラスにより提供されるアプリケーション・インタフェースは、サービス・プロバイダ・インタフェース(SPI)に関して実装されます。対応するKeystoreSpi抽象クラスがあり、これもjava.security packageに含まれています。このクラスが、プロバイダが実装する必要のあるサービス・プロバイダ・インタフェースのメソッドを定義しています。ここで、プロバイダとは、Java Security APIによってアクセス可能なサービスのサブセットに対し、その固定実装を提供するパッケージまたはパッケージの集合のことです。キーストアの実装を提供するには、http://docs.oracle.com/javase/8/docs/technotes/guides/security/crypto/HowToImplAProvider.htmlにある Java暗号化アーキテクチャのプロバイダの実装方法で説明しているように、クライアントはプロバイダを実装し、KeystoreSpiサブクラスの実装を提供する必要があります。
アプリケーションでは、KeyStoreクラスのgetInstanceファクトリ・メソッドを使用して、様々なプロバイダから異なるタイプのキーストアの実装を選択できます。キーストアのタイプは、キーストア情報の格納形式とデータ形式を定義するとともに、キーストア内の秘密鍵とキーストア自体の整合性を保護するために使用されるアルゴリズムを定義します。異なるタイプのキーストアの実装には、互換性はありません。
jarsignerおよびpolicytoolコマンドは、URLを使用して指定できる任意の場所からファイルベースのキーストアを読み取ることができます。また、これらのコマンドは、Windows上のMSCAPIおよびすべてのプラットフォーム上のPKCS11で提供されるような非ファイルベースのキーストアを読み取ることができます。
jarsignerコマンドおよびkeytoolコマンドの場合、-storetypeオプションを使用して、コマンド行でキーストアのタイプを指定できます。ポリシー・ツールの場合、「キーストア」メニューの「編集」コマンドを使用して、キーストアのタイプを指定できます。
ユーザーがキーストアのタイプを明示的に指定しなかった場合、セキュリティ・プロパティ・ファイルで指定されたkeystore.typeプロパティの値に基づいて、ツールによってキーストアの実装が選択されます。このセキュリティ・プロパティ・ファイルはjava.securityと呼ばれ、JDKセキュリティ・プロパティ・ディレクトリjava.home/lib/security内に存在しています。ここで、java.homeは実行時環境のディレクトリです。jreディレクトリは、JDKまたはJava Runtime Environment (JRE)の最上位のディレクトリにあります。
各ツールは、keystore.typeの値を取得し、そのタイプのキーストアを実装しているプロバイダが見つかるまで、インストールされているすべてのプロバイダを調べます。目的のプロバイダが見つかると、そのプロバイダからのキーストアの実装を使用します。
KeyStoreクラスに定義されているstaticメソッドgetDefaultTypeを使用すると、アプリケーションやアプレットからkeystore.typeプロパティの値を取得できます。次のコードの行では、keystore.type propertyで指定された、デフォルトのキーストア・タイプのインスタンスを作成します。
KeyStore keyStore = KeyStore.getInstance(KeyStore.getDefaultType());
デフォルトのキーストア・タイプは、jks (Oracleが提供する独自のタイプのキーストアの実装)です。これは、セキュリティ・プロパティ・ファイル内の次の行によって指定されています。
keystore.type=jks
キーストアのタイプの指定では、大文字と小文字は区別されません。たとえば、JKSはjksと同じになります。
ツールでデフォルト以外のキーストアの実装を使用するには、その行を変更して別のキーストアのタイプを指定します。たとえば、pkcs12と呼ばれるキーストアのタイプのキーストアの実装を提供するプロバイダ・パッケージがある場合、行を次のように変更します。
keystore.type=pkcs12
注意: PKCS 11プロバイダ・パッケージを使用する場合、http://docs.oracle.com/javase/8/docs/technotes/guides/security/p11guide.htmlにある 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ファイルに常に含まれるマニフェスト・ファイルと似ています。JARファイルに含まれているソース・ファイルごとに、.SFファイルには、マニフェスト・ファイルにあるような、次に示す3つの行があります。
マニフェスト・ファイルでは、各ソース・ファイルのSHAダイジェストの値は、ソース・ファイルのバイナリ・データのダイジェスト(ハッシュ)になります。.SFファイルでは、指定されたソース・ファイルのダイジェストの値は、ソース・ファイルのマニフェスト・ファイル内のその3行のハッシュになります。
署名ファイルには、デフォルトで、マニフェスト・ファイル全体のハッシュが格納されたヘッダーが含まれています。ヘッダーにはマニフェスト・ヘッダーのハッシュも含まれています。ヘッダーが存在すると、検証の最適化が有効になります。JARファイルの検証を参照してください。
署名ブロック・ファイル
.SFファイルには署名が付けられ、署名は署名ブロック・ファイルに置かれます。このファイルには、署名に使用された秘密鍵に対応する公開鍵を認証するキーストアからの証明書または証明書チェーンも、内部でエンコードされて含まれています。ファイルの拡張子は、使用されるダイジェスト・アルゴリズムに応じて、.DSA、.RSAまたは.ECになります。
jarsignerコマンドでは、JARファイルの署名時に署名タイムスタンプを生成および保存できます。さらに、jarsignerは代替署名機構をサポートします。この動作は省略可能で、署名時に次の各オプションによって制御されます。オプションを参照してください。
-tsa url -tsacert alias -altsigner class -altsignerpath classpathlist -tsapolicyid policyid
JARファイルの検証が成功するのは、署名が有効であり、かつ署名の生成以降にJARファイル内のどのファイルも変更されていない場合です。JARファイルの検証は、次の手順で行われます。
検証では、各署名ブロック(.DSA)ファイルに格納された署名が、証明書(または証明書チェーン)も.DSAファイルに示される公開鍵に対応する秘密鍵を使用して生成されたことを確認します。また、署名が対応する署名(.SF)ファイルの有効な署名であることが確認され、それにより、.SFファイルが改ざんされていないことも確認されます。
.SFファイルには、マニフェスト・ファイル全体のハッシュが格納されたヘッダーがデフォルトで含まれています。ヘッダーが存在する場合、検証では、ヘッダー内のハッシュがマニフェスト・ファイルのハッシュと一致するかどうかを確認するためにチェックできます。一致する場合、検証は次の手順に進みます。
一致しない場合、.SFファイル内の各ソース・ファイル情報セクションのハッシュが、マニフェスト・ファイル内の対応するセクションのハッシュと一致することを確認するために、あまり最適化されていない検証が必要になります。署名ファイルを参照してください。
.SFファイルのヘッダーに格納されたマニフェスト・ファイルのハッシュが、現在のマニフェスト・ファイルのハッシュに一致しない理由の1つは、署名および.SFファイルの生成後に、(jarツールを使用して)1つ以上のファイルがJARファイルに追加されたことです。jarツールを使用してファイルを追加した場合、新しいファイル用のセクションが追加されることにより、マニフェスト・ファイルは変更されますが、.SFファイルは変更されません。検証がまだ成功しているとみなされるのは、署名の生成以降にJARファイル内のどのファイルも変更されていない場合です。これが発生するのは、.SFファイルのヘッダー以外のセクションのハッシュが、マニフェスト・ファイル内の対応するセクションのハッシュと一致する場合です。
検証プロセス中になんらかの重大な検証エラーが発生した場合、そのプロセスは停止され、セキュリティ例外がスローされます。jarsignerコマンドでは、例外を捕捉および表示します。
注意: 追加の警告(または、-strictオプションを指定した場合はエラー)はすべて読む必要があります。同様に、証明が信頼できるかを決定するために、(-verboseおよび-certsオプションを指定して)証明書の内容も読む必要があります。
次のように、jarsignerコマンドをファイルで複数回実行し、実行のたびに異なるユーザーの別名を指定することによって、1つのJARファイルに複数のユーザーの署名を付けることができます。
jarsigner myBundle.jar susan jarsigner myBundle.jar kevin
JARファイルが複数回署名されている場合、そのJARファイルには、複数の.SFファイルと.DSAファイルが含まれており、1回の署名に対して1つのペアとなります。前述の例では、出力JARファイルには、次の名前のファイルが含まれています。
SUSAN.SF SUSAN.DSA KEVIN.SF KEVIN.DSA
次の各項では、様々なjarsignerオプションについて説明します。次の標準に注意してください。
-keystore url
キーストアは署名時には必要です。デフォルトのキーストアが存在しない場合、またはデフォルト以外のキーストアを使用する場合は、キーストアを明示的に指定する必要があります。
検証するときはキーストアは必要ありません。ただし、キーストアが指定されているか、あるいはデフォルトのキーストアが存在していて、さらに-verboseオプションも指定されていた場合、JARファイルの検証に使用される証明書がそのキーストアに1つでも含まれているかどうかに関する追加情報が出力されます。
-keystore引数には、URLではなくファイル名とパスを指定でき、この場合、ファイル: URLと同じように処理されます。たとえば、次にように指定すると同等になります。
-keystore filePathAndName -keystore file:filePathAndName
-keystore NONE -storetype PKCS11
keytool -keystore NONE -storetype PKCS11 -list
-storetype storetype
-storepassオプションを使用して、PCKS #11トークンのPINを指定することもできます。何も指定しない場合、keytoolおよびjarsignerコマンドによって、トークンPINの指定を求められます。トークンに保護された認証パス(専用のPINパッドや生体読取り機など)がある場合、-protectedオプションを指定する必要がありますが、パスワード・オプションは指定できません。
-storepass[:env | :file] argument
修飾子envまたはfileが指定されていない場合、パスワードの値はargumentになります。それ以外の場合、パスワードは次のようにして取得されます。
注意: テストを目的とする場合またはセキュアなシステムを使用している場合以外は、コマンド行やスクリプトでパスワードを指定しないでください。
-keypass [:env | :file] argument
修飾子envまたはfileが指定されていない場合、パスワードの値はargumentになります。それ以外の場合、パスワードは次のようにして取得されます。
注意: テストを目的とする場合またはセキュアなシステムを使用している場合以外は、コマンド行やスクリプトでパスワードを指定しないでください。
-sigfile file
ファイル内の文字は、セットa-zA-Z0-9_-から指定される必要があります。アルファベット、数字、アンダースコアおよびハイフン文字のみを使用できます。.SFおよび.DSAのファイル名では、小文字はすべて大文字に変換されます。
コマンド行で-sigfileオプションを指定しなかった場合、.SFファイルと.DSAファイルのベース・ファイル名は、コマンド行で指定された別名の先頭の8文字をすべて大文字に変換したものになります。別名が8文字未満の場合は、別名がそのまま使用されます。別名に、署名ファイル名で無効な文字が含まれている場合、ファイル名を作成するために、該当する文字がアンダースコア(_)文字に変換されます。
-sigalg algorithm
標準的な署名アルゴリズム名のリストは、http://docs.oracle.com/javase/8/docs/technotes/guides/security/crypto/CryptoSpec.html#AppAにある Java Cryptography Architecture (JCA)リファレンス・ガイドの「付録A: 標準名」を参照してください。
このアルゴリズムには、JARファイルの署名に使用する秘密鍵との互換性が必要です。このオプションを指定しない場合、秘密鍵のタイプに応じて、SHA1withDSA、SHA256withRSAまたはSHA256withECDSAが使用されます。指定されたアルゴリズムの実装を提供するプロバイダが静的にインストールされているか、-providerClassオプションを使用してそのようなプロバイダをユーザーが指定する必要があります。そうでない場合、コマンドは失敗します。
-digestalg algorithm
標準的なメッセージ・ダイジェスト・アルゴリズム名のリストは、http://docs.oracle.com/javase/8/docs/technotes/guides/security/crypto/CryptoSpec.html#AppAにある Java Cryptography Architecture (JCA)リファレンス・ガイドの「付録A: 標準名」を参照してください。
このオプションを指定しない場合、SHA256が使用されます。指定されたアルゴリズムの実装を提供するプロバイダが静的にインストールされているか、-providerClassオプションを使用してそのようなプロバイダをユーザーが指定する必要があります。そうでない場合、コマンドは失敗します。
-certs
キーストアの確認も行われます。コマンド行でキーストアの値が指定されていない場合、デフォルトのキーストア・ファイル(ある場合)がチェックされます。署名者の公開鍵の証明書がキーストア内のエントリと一致する場合、その署名者のキーストアのエントリの別名が丸カッコ内に表示されます。
-certchain file
-verbose
-internalsf
-sectionsonly
デフォルトでは、最適化のために、このヘッダーが追加されます。ヘッダーが存在する場合、JARファイルを検証するたびに、検証では、まずヘッダー内のハッシュがマニフェスト・ファイル全体のハッシュと一致するかどうかを確認するためにチェックできます。一致する場合、検証は次の手順に進みます。一致しない場合、.SFファイル内の各ソース・ファイル情報セクションのハッシュが、マニフェスト・ファイル内の対応するセクションのハッシュと一致するという、あまり最適化されていない検証を実行する必要があります。JARファイルの検証を参照してください。
-sectionsonlyオプションは、主にテスト用に使用されます。これを使用するとオーバーヘッドが大きくなるため、テスト用以外では使用しないでください。
-protected
-providerClass provider-class-name
-providerArg ConfigFilePathオプションとともに使用し、keytoolおよびjarsignerツールは、プロバイダを動的にインストールし、トークン構成ファイルへのパスにConfigFilePathを使用します。次の例は、Oracle PKCS #11プロバイダがセキュリティ・プロパティ・ファイルに構成されていなかった場合にPKCS #11キーストアを一覧表示するコマンドを示しています。
jarsigner -keystore NONE -storetype PKCS11 \ -providerClass sun.security.pkcs11.SunPKCS11 \ -providerArg /mydir1/mydir2/token.config \ -list
-providerName providerName
Oracle PKCS #11プロバイダの場合、providerNameはSunPKCS11-TokenNameという形式になります。ここで、構成属性の表で詳細に説明されているように、TokenNameは、プロバイダ・インスタンスが構成された名前の接尾辞です。たとえば、次のコマンドは、名前接尾辞SmartCardのPKCS #11キーストア・プロバイダ・インスタンスの内容を一覧表示します。
jarsigner -keystore NONE -storetype PKCS11 \ -providerName SunPKCS11-SmartCard \ -list
-Jjavaoption
-tsa url
タイムスタンプを生成するために、jarsignerは、RFC 3161で定義されているタイムスタンプ・プロトコル(TSP)を使用してTSAと通信します。成功すると、TSAによって返されたタイムスタンプ・トークンは、署名ブロック・ファイルの署名とともに保存されます。
-tsacert alias
-tsacertオプションを使用する場合は、TSAの公開鍵証明書がキーストアに配置されている必要があります。
-tsapolicyid policyid
オブジェクト識別子は、ITU Telecommunication Standardization Sector (ITU-T)標準であるX.696によって定義されます。これらの識別子は、通常、1.2.3.4などの、負ではない数字のピリオド区切りのセットです。
-altsigner class
たとえば、com.sun.sun.jarsigner.AuthSignerという名前のクラスが提供する署名メカニズムを使用するには、jarsignerのオプション-altsigner com.sun.jarsigner.AuthSignerを使用します。
-altsignerpath classpathlist
絶対パスまたは現在のディレクトリへの相対パスを指定できます。classpathlistに複数のパスやJARファイルが含まれる場合、それらを、Oracle Solarisの場合はコロン(:)で、Windowsの場合はセミコロン(;)で、それぞれ区切ります。目的のクラスがすでに検索パス内にある場合は、このオプションは不要です。
次の例では、クラス・ファイルを含むJARファイルへのパスを指定する方法を示します。JARファイル名を含めます。
-altsignerpath /home/user/lib/authsigner.jar
-altsignerpath /home/user/classes/com/sun/tools/jarsigner/
-strict
-verbose suboptions
署名または検証プロセス中に、jarsignerコマンドで、様々なエラーまたは警告が発行される可能性があります。
障害がある場合、jarsignerコマンドはコード1で終了します。障害はないが、1つ以上の重大な警告がある場合、-strictオプションが指定されていない場合は、jarsignerコマンドはコード0で終了し、-strictが指定されている場合は警告コードのOR値で終了します。情報警告のみがある、または警告がまったくない場合、コマンドは常にコード0で終了します。
たとえば、エントリの署名に使用される証明書が期限切れで、ファイルの署名を許可しないKeyUsage拡張機能を使用している場合、-strictオプションが指定されていると、jarsignerコマンドはコード12 (=4+8)で終了します。
注意: Solaris、LinuxおよびOS Xでは0から255までの値のみが有効のため、終了コードは再利用されます。
次のセクションでは、jarsignerコマンドにより発行できるエラーおよび警告の名前、コード、説明を記述します。
コマンド行解析エラー、JARファイルに署名する鍵ペアを検索できない、または署名付きJARファイルの検証失敗など(限定されません)、jarsignerコマンドの失敗理由。
failure
注意: -strictオプションを指定した場合、重大な警告はエラーとして報告されます。
JARファイルの署名に使用する証明書にエラーがある、または署名付きJARファイルに他の問題があるなど、jarsignerコマンドが重大な警告を発行する理由。
hasExpiredCert
notYetValidCert
chainNotValidated
badKeyUsage
badExtendedKeyUsage
badNetscapeCertType
hasUnsignedEntry
notSignedByAlias
aliasNotInStore
情報警告には、エラーではないが不適切とみなされるものが含まれます。コードはありません。
hasExpiringCert
noTimestamp
次のコマンドを使用して、キーストア別名がworkingディレクトリのmystoreという名前のキーストアにあるjaneであるユーザーの秘密鍵でbundle.jarに署名し、署名付きJARファイルにsbundle.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ファイル(bundle.jar)を署名付きJARファイルで上書きする場合、次のように-signedjarオプションを指定する必要はありません。
jarsigner bundle.jar jane
署名付きJARファイルを検証して、署名が有効でJARファイルが改ざんされなかったことを確認するには、次のようなコマンドを使用します。
jarsigner -verify sbundle.jar
検証が成功すると、jar verifiedが表示されます。有効でない場合は、エラー・メッセージが表示されます。-verboseオプションを使用すると、詳細情報を取得できます。jarsignerを-verboseオプションとともに使用するサンプルを、次に示します。
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.
-certsオプションを-verifyおよび-verboseオプションとともに指定した場合、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=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.
署名者の証明書がX.509証明書ではない場合、識別名情報は表示されません。その場合には、証明書のタイプと別名のみが表示されます。たとえば、証明書がPGP証明書で、別名がbobである場合、PGP, (bob)を取得します。