This document describes the enhancements that have been added in
J2SE 5.0 to support signature timestamps. Please send feedback,
especially those related to these new features, to java-security@sun.com.
Prior to J2SE 5.0, the signature generated by
jarsigner contained no information about w hen the
signature was generated. With no other information available,
systems/deployers (including users of the Java Plug-in) often based
their validity assessment of a signed JAR file on the validity of
the signing certificate. When the signing certificate expires,
systems/deployers conclude that the signature, and hence, the JAR
file, has expired. Because signing certificates typically expire
annually, this caused customers significant problems by forcing
them to re-sign deployed JAR files annually.
Starting in J2SE 5.0, jarsigner can generate
signatures that include a timestamp, thus enabling systems/deployer
(including Java Plug-in) to check whether the JAR file was signed
while the signing certificate was still valid. In addition, APIs
were added in J2SE 5.0 to allow applications to obtain the
timestamp information.
The following time-of-signing enhancements and additions are
supported in version 5.0 of the JavaSE platform:
The jarsigner tool can now generate and store a
signature timestamp when signing a JAR file. In addition,
jarsigner supports alternative signing mechanisms.
This behavior is optional and is controlled by the user at the time
of signing through the options described below.
Jarsigner Timestamp Options
The following options were added to the jarsigner tool
to support signature timestamps:
-tsa url
If "-tsa http://example.tsa.url" appears
on the command line when signing a JAR file then a timestamp is
generated for the signature. The URL,
http://example.tsa.url, identifies the location of the
Time Stamping Authority (TSA). It overrides any URL found via the
-tsacert option. The -tsa option does not
require the TSA's public key certificate to be present in the
keystore.
To generate the timestamp, jarsigner communicates
with the TSA using the Time-Stamp Protocol (TSP) defined in
RFC 3161. If
successful, the timestamp token returned by the TSA is stored along
with the signature in the signature block file.
-tsacert alias
If "-tsacert alias" appears on the command
line when signing a JAR file then a timestamp is generated for the
signature. The alias identifies the TSA's public key
certificate in the keystore that is currently in effect. The
entry's certificate is examined for a Subject Information Access
extension that contains a URL identifying the location of the TSA.
The TSA's public key certificate must be present in the keystore
when using -tsacert.
Alternative Signing Options
Specifying an Alternative Signing Mechanism
-altsigner class
Specifies that an alternative signing mechanism be
used. The fully-qualified class name identifies a class file that
extends the com.sun.jarsigner.ContentSigner abstract
class. The path to this class file is defined by the
-altsignerpath option. If the -altsigner
option is used, jarsigner uses the signing mechanism
provided by the specified class. Otherwise, jarsigner
uses its default signing mechanism.
For example, to use the signing mechanism provided by a class
named com.sun.sun.jarsigner.AuthSigner, use the
jarsigner option "-altsigner
com.sun.jarsigner.AuthSigner"
Specifying Path to Alternative Signing Mechanism
-altsignerpath classpathlist
Specifies the path to the class file (the class file
name is specified with the -altsigner option described
above) and any JAR files it depends on. If the class file is in a
JAR file, then this specifies the path to that JAR file, as shown
in the example below.
An absolute path or a path relative to the current directory may
be specified. If classpathlist contains multiple paths
or JAR files, they should be separated with a colon
(:) on Solaris and a semi-colon (;) on
Windows. This option is not necessary if the class is already in
the search path.
Example of specifying the path to a jar file that contains the
class file:
-altsignerpath /home/user/lib/authsigner.jar
Note that the JAR file name is included.
Example of specifying the path to the jar file that contains the
class file:
In J2SE 5.0, the Java Plug-in was enhanced to check signature
timestamps (if available) when validating JAR files. The Java
Plug-in will no longer present a dialog when it encounters an
expired or revoked certificate when validating a signed jar,
provided that the signature timestamp confirms that the signature
was generated prior to the expiration or revocation date.
The TSA's certificate must be available from the Plug-in's
keystore or certificate stores when the Plug-in is validating a JAR
file containing a signature timestamp.
The Plugin reverts to 1.4.x behavior if the signature does not
contain a timestamp.
The security and JAR APIs were enhanced to enable applications to
access timestamp information.
Two new classes were added to the java.security
package. These classes are CodeSigner, which
maintains information associated with a signer, and Timestamp, which
represents information associated with a signature timestamp.