J2SE 5.0 より前では、jarsigner が生成した署名には、署名がいつ生成されたかについての情報が含まれていませんでした。その他の情報が入手できないため、システムやデプロイヤ (Java Plug-in のユーザーも含む) は署名された JAR ファイルの妥当性を、署名対象の証明書の妥当性を基準として評価していました。署名証明書の有効期限が切れると、署名および JAR ファイルの有効期限も切れたと認識されます。署名証明書は一般には 1 年単位で期限が切れるので、顧客は配備された JAR ファイルに毎年再署名しなければならないという重大な問題が発生します。
J2SE 5.0 以降では、jarsigner はタイムスタンプを含む署名を生成するので、システムやデプロイヤ (Java Plug-in を含む) は JAR ファイルが署名証明書の有効期間中に署名されたかどうかをチェックできます。さらに、J2SE 5.0 で追加された API を使用して、アプリケーションはタイムスタンプ情報を取得できます。
JavaSE プラットフォームのバージョン 5.0 でサポートされる署名時間の拡張機能および追加機能を次に示します。
jarsigner ツールは、JAR ファイルの署名時に署名タイムスタンプを生成して保存できるようになりました。さらに、jarsigner は代替署名メカニズムをサポートします。これは任意の動作で、次に説明するオプションを使用して、署名時にユーザーが制御します。
jarsigner ツールに追加され、署名タイムスタンプをサポートします。
-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 class は、代替署名メカニズムを使用することを指定します。完全修飾クラス名は、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 ではセミコロン (;) を使用して区切ります。目的のクラスがすでに検索パス内にある場合は、このオプションは不要です。
クラスファイルを含む JAR ファイルへのパスを指定する例を示します。
-altsignerpath /home/user/lib/authsigner.jar
JAR ファイル名が含まれていることに注意してください。
クラスファイルを含む JAR ファイルへのパスを指定する例を示します。
-altsignerpath /home/user/classes/com/sun/tools/jarsigner/
JAR ファイル名は含まれていないことに注意してください。
Plug-in が署名タイムスタンプを含む JAR ファイルを検証しているときに、Plug-in のキーストアまたは証明書ストアから TSA の証明書を取得できる必要があります。
署名にタイムスタンプが含まれていない場合は、Plug-in の動作は 1.4.x と同じになります。
新しい 2 つのクラスが java.security パッケージに追加されました。これらのクラスは、署名者に関連付けられた情報を保持する CodeSigner と、署名タイムスタンプに関連付けられた情報を表す Timestamp です。
java.security.CodeSource クラスおよび java.util.jar.JarEntry クラスに新しいメソッドが追加され、新しいオプション情報にアクセスできるようになりました。