署名タイムスタンプのサポート
JDK v5.0, Beta1


重要: 本書で説明する API および機能は、変更される場合があります。

はじめに

このドキュメントでは、署名タイムスタンプをサポートするために J2SE 5.0 に追加された拡張機能について説明します。これらの新機能に関するフィードバックは、java-security@sun.com までお送りください。

5.0 より前では、jarsigner が生成した署名には、署名がいつ生成されたかについての情報が含まれていませんでした。その他の情報が入手できないため、システムやデプロイヤ (Java Plug-in のユーザも含む) は署名された JAR ファイルの妥当性を、署名対象の証明書の妥当性を基準として評価していました。署名証明書の有効期限が切れると、署名および JAR ファイルの有効期限も切れたと認識されます。署名証明書は一般には 1 年単位で期限が切れるので、顧客は配備された JAR ファイルに毎年再署名しなければならないという重大な問題が発生します。

5.0 以降では、jarsigner はタイムスタンプを含む署名を生成するので、システムやデプロイヤ (Java Plug-in を含む) はJAR ファイルが署名証明書の有効期間中に署名されたかどうかをチェックできます。さらに、5.0 で追加された API を使用して、アプリケーションはタイムスタンプ情報を取得できます。

Java 2 プラットフォームのバージョン 5.0 でサポートされる署名時刻の拡張機能および追加機能を以下に示します。

Jarsigner の拡張機能

jarsigner ツールは、JAR ファイルの署名時に署名タイムスタンプを生成して保存できるようになりました。さらに、jarsigner は代替署名機構をサポートします。これは任意の動作で、以下で説明するオプションを使用して、署名時にユーザが制御します。

Jarsigner タイムスタンプオプション

次のオプションが jarsigner ツールに追加され、署名タイムスタンプをサポートします。

-tsa url

JAR ファイルの署名時にコマンド行に「-tsa http://example.tsa.url」が表示される場合、署名のタイムスタンプが生成されます。URL http://example.tsa.url は、TSA (Time Stamping Authority) の場所を特定します。これは、-tsacert オプションで検出された URL をオーバーライドします。-tsa オプションでは、TSA の公開鍵証明書をキーストアに配置する必要はありません。

タイムスタンプを生成するため、jarsignerRFC 3161 で定義されている TSP (Time-Stamp Protocol) を使用して TSA と通信します。成功すると、TSA から返されたタイムスタンプトークンは署名ブロックファイルの署名とともに保存されます。

-tsacert alias

JAR ファイルの署名時にコマンド行に「-tsacert alias」が表示される場合、署名のタイムスタンプが生成されます。alias は、キーストア内の現在有効な TSA の公開鍵証明書を特定します。エントリの証明書で、TSA の場所を特定する URL を含む Subject Information Access 拡張機能が確認されます。

TSA の公開鍵証明書は、-tsacert を使った場合、キーストアに配置されている必要があります。

代替署名オプション

代替署名機構の指定

-altsigner class
代替署名機構を使用することを指定します。完全修飾クラス名は、com.sun.jarsigner.ContentSigner の abstract クラスを拡張するクラスファイルを特定します。このクラスファイルへのパスは、-altsignerpath オプションによって定義されます。-altsigner オプションを使用した場合、jarsigner は指定されたクラスが提供する署名機構を使用します。または、jarsigner はデフォルトの署名機構を使用します。

たとえば、com.sun.sun.jarsigner.AuthSigner というクラスが提供する署名機構を使用するには、jarsigner オプション「-altsigner com.sun.jarsigner.AuthSigner」を使用します。

代替署名機構へのパスの指定

-altsignerpath classpathlist
クラスファイル (クラスファイル名は上記のように -altsigner オプションで指定される) およびそれが依存する JAR ファイルへのパスを指定します。クラスファイルが JAR ファイル内にある場合、以下の例のように JAR ファイルへのパスが指定されます。

絶対パスまたは現在のディレクトリからの相対パスを指定できます。classpathlist には、複数のパスまたは JAR ファイルを含めることができます。その場合、各パスまたは JAR ファイルを、Solaris の場合にはコロン (:)、Windows の場合にはセミコロン (;) で区切ります。目的のクラスがすでに検索パス内にある場合は、このオプションは不要です。

クラスファイルを含む、JAR ファイルへのパスを指定する例を示します。

-altsignerpath /home/user/lib/authsigner.jar

JAR ファイル名が含まれていることに注意してください。

クラスファイルを含む JAR ファイルへのパスを指定する例を示します。

-altsignerpath /home/user/classes/com/sun/tools/jarsigner/

JAR ファイル名は含まれていないことに留意してください。

Java Plug-in の拡張機能

5.0 では、Java Plug-in は JAR ファイルの検証中に署名タイムスタンプ (存在する場合) をチェックするように拡張されました。署名タイムスタンプによって署名が有効期限内または取り消し日付前に生成されたことが確認できる場合は、署名済み jar の検証中に期限切れまたは取り消された証明書が見つかっても、Java Plug-in はダイアログを表示しなくなりました。

Plug-in が署名タイムスタンプを含む JAR ファイルを検証しているときに、Plug-in のキーストアまたは証明書ストアから TSA の証明書を取得できる必要があります。

署名にタイムスタンプが含まれていない場合は、Plug-in の動作は 1.4.x と同じになります。

API の拡張

セキュリティおよび JAR API が拡張され、アプリケーションがタイムスタンプ情報にアクセスできるようになりました。

新しい 2 つのクラスが java.security パッケージに追加されました。これらのクラスは、署名者に関連付けられた情報を保持する CodeSigner と、署名タイムスタンプに関連付けられた情報を表す Timestamp です。

java.security.CodeSource クラスおよび java.util.jar.JarEntry クラスに新しいメソッドが追加され、新しいオプション情報にアクセスできるようになりました。