重要: 本書で説明する 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 ツールに追加され、署名タイムスタンプをサポートします。
-tsa url
JAR ファイルの署名時にコマンド行に「-tsa http://example.tsa.url」が表示される場合、署名のタイムスタンプが生成されます。URLhttp://example.tsa.urlは、TSA (Time Stamping Authority) の場所を特定します。これは、-tsacertオプションで検出された URL をオーバーライドします。-tsaオプションでは、TSA の公開鍵証明書をキーストアに配置する必要はありません。タイムスタンプを生成するため、
jarsignerは RFC 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.jarJAR ファイル名が含まれていることに注意してください。
クラスファイルを含む JAR ファイルへのパスを指定する例を示します。
-altsignerpath /home/user/classes/com/sun/tools/jarsigner/JAR ファイル名は含まれていないことに留意してください。
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 クラスに新しいメソッドが追加され、新しいオプション情報にアクセスできるようになりました。