.'" t
."
." Copyright 2000-2006 Sun Microsystems, Inc.  All Rights Reserved.
." DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
."
." This code is free software; you can redistribute it and/or modify it
." under the terms of the GNU General Public License version 2 only, as
." published by the Free Software Foundation.
."
." This code is distributed in the hope that it will be useful, but WITHOUT
." ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
." FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
." version 2 for more details (a copy is included in the LICENSE file that
." accompanied this code).
."
." You should have received a copy of the GNU General Public License version
." 2 along with this work; if not, write to the Free Software Foundation,
." Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
."
." Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
." CA 95054 USA or visit www.sun.com if you need additional information or
." have any questions.
."
." `
.TH jarsigner 1 "07 Aug 2006"
." Generated by html2man

.LP
.SH NAME
jarsigner \- JAR Signing and Verification Tool
.LP
.RS 3

.LP
.LP
Generates signatures for Java ARchive (JAR) files, and verifies the signatures of signed JAR files.
.LP
.RE
.SH "SYNOPSIS"
.LP

.LP
.nf
\f3
.fl
\fP\f3jarsigner\fP [ options ] jar\-file alias
.fl
\f3jarsigner\fP \-verify [ options ] jar\-file 
.fl
.fi

.LP
.SH "DESCRIPTION"
.LP

.LP
.LP
The \f3jarsigner\fP tool is used for two purposes:
.LP
.RS 3
.TP 3
1.
to sign Java ARchive (JAR) files, and 
.TP 3
2.
to verify the signatures and integrity of signed JAR files. 
.RE

.LP
.LP
The JAR feature enables the packaging of class files, images, sounds, and other digital data in a single file for faster and easier distribution. A tool named \f3jar\fP enables developers to produce JAR files. (Technically, any zip file can also be considered a JAR file, although when created by \f3jar\fP or processed by \f3jarsigner\fP, JAR files also contain a META\-INF/MANIFEST.MF file.)
.LP
.LP
A \f2digital signature\fP is a string of bits that is computed from some data (the data being "signed") and the private key of an entity (a person, company, etc.). Like a handwritten signature, a digital signature has many useful characteristics:
.LP
.RS 3
.TP 2
o
Its authenticity can be verified, via a computation that uses the public key corresponding to the private key used to generate the signature. 
.TP 2
o
It cannot be forged, assuming the private key is kept secret. 
.TP 2
o
It is a function of the data signed and thus can't be claimed to be the signature for other data as well. 
.TP 2
o
The signed data cannot be changed; if it is, the signature will no longer verify as being authentic. 
.RE

.LP
.LP
In order for an entity's signature to be generated for a file, the entity must first have a public/private key pair associated with it, and also one or more certificates authenticating its public key. A \f2certificate\fP is a digitally signed statement from one entity, saying that the public key of some other entity has a particular value.
.LP
.LP
\f3jarsigner\fP uses key and certificate information from a \f2keystore\fP to generate digital signatures for JAR files. A keystore is a database of private keys and their associated X.509 certificate chains authenticating the corresponding public keys. The \f3keytool\fP utility is used to create and administer keystores.
.LP
.LP
\f3jarsigner\fP uses an entity's private key to generate a signature. The signed JAR file contains, among other things, a copy of the certificate from the keystore for the public key corresponding to the private key used to sign the file. \f3jarsigner\fP can verify the digital signature of the signed JAR file using the certificate inside it (in its signature block file).
.LP
.LP
Starting in J2SE 5.0, \f3jarsigner\fP 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.
.LP
.LP
At this time, \f3jarsigner\fP can only sign JAR files created by the SDK \f3jar\fP tool or zip files. (JAR files are the same as zip files, except they also have a META\-INF/MANIFEST.MF file. Such a file will automatically be created when \f3jarsigner\fP signs a zip file.)
.LP
.LP
The default \f3jarsigner\fP behavior is to \f2sign\fP a JAR (or zip) file. Use the \f2\-verify\fP option to instead have it \f2verify\fP a signed JAR file.
.LP
.SS 
Compatibility with JDK 1.1
.LP
.RS 3

.LP
.LP
The \f3keytool\fP and \f3jarsigner\fP tools completely replace the \f3javakey\fP tool provided in JDK 1.1. These new tools provide more features than \f3javakey\fP, including the ability to protect the keystore and private keys with passwords, and the ability to verify signatures in addition to generating them.
.LP
.LP
The new keystore architecture replaces the identity database that \f3javakey\fP created and managed. There is no backwards compatibility between the keystore format and the database format used by \f3javakey\fP in 1.1. However,
.LP
.RS 3
.TP 2
o
It is possible to import the information from an identity database into a keystore, via the \f3keytool\fP \f2\-identitydb\fP command. 
.TP 2
o
\f3jarsigner\fP can sign JAR files also previously signed using \f3javakey\fP. 
.TP 2
o
\f3jarsigner\fP can verify JAR files signed using \f3javakey\fP. Thus, it recognizes and can work with signer aliases that are from a JDK 1.1 identity database rather than a Java 2 SDK keystore. 
.RE

.LP
.LP
The following table explains how JAR files that were signed in JDK 1.1.x are treated in the Java 2 platform.
.LP
.LP
.TS
.if \n+(b.=1 .nr d. \n(.c-\n(c.-1
.de 35
.ps \n(.s
.vs \n(.vu
.in \n(.iu
.if \n(.u .fi
.if \n(.j .ad
.if \n(.j=0 .na
..
.nf
.nr #~ 0
.if n .nr #~ 0.6n
.ds #d .d
.if \(ts\n(.z\(ts\(ts .ds #d nl
.fc
.nr 33 \n(.s
.rm 80 81 82 83 84
.nr 34 \n(.lu
.eo
.am 82
.br
.di a+
.35
.ft \n(.f
.ll \n(34u*1u/6u
.if \n(.l<\n(82 .ll \n(82u
.in 0
\f3Trusted Identity imported into Java 2 Platform keystore from 1.1 database (4)\fP
.br
.di
.nr a| \n(dn
.nr a- \n(dl
..
.ec \
.eo
.am 83
.br
.di b+
.35
.ft \n(.f
.ll \n(34u*1u/6u
.if \n(.l<\n(83 .ll \n(83u
.in 0
\f3Policy File grants privileges to Identity/Alias\fP
.br
.di
.nr b| \n(dn
.nr b- \n(dl
..
.ec \
.eo
.am 84
.br
.di c+
.35
.ft \n(.f
.ll \n(34u*1u/6u
.if \n(.l<\n(84 .ll \n(84u
.in 0
Default privileges granted to all code.
.br
.di
.nr c| \n(dn
.nr c- \n(dl
..
.ec \
.eo
.am 84
.br
.di d+
.35
.ft \n(.f
.ll \n(34u*1u/6u
.if \n(.l<\n(84 .ll \n(84u
.in 0
Default privileges granted to all code.
.br
.di
.nr d| \n(dn
.nr d- \n(dl
..
.ec \
.eo
.am 84
.br
.di e+
.35
.ft \n(.f
.ll \n(34u*1u/6u
.if \n(.l<\n(84 .ll \n(84u
.in 0
Default privileges granted to all code.
.br
.di
.nr e| \n(dn
.nr e- \n(dl
..
.ec \
.eo
.am 84
.br
.di f+
.35
.ft \n(.f
.ll \n(34u*1u/6u
.if \n(.l<\n(84 .ll \n(84u
.in 0
Default privileges granted to all code. (3)
.br
.di
.nr f| \n(dn
.nr f- \n(dl
..
.ec \
.eo
.am 84
.br
.di g+
.35
.ft \n(.f
.ll \n(34u*1u/6u
.if \n(.l<\n(84 .ll \n(84u
.in 0
Default privileges granted to all code. (1,3)
.br
.di
.nr g| \n(dn
.nr g- \n(dl
..
.ec \
.eo
.am 84
.br
.di h+
.35
.ft \n(.f
.ll \n(34u*1u/6u
.if \n(.l<\n(84 .ll \n(84u
.in 0
Default privileges granted to all code plus privileges granted in policy file.
.br
.di
.nr h| \n(dn
.nr h- \n(dl
..
.ec \
.eo
.am 84
.br
.di i+
.35
.ft \n(.f
.ll \n(34u*1u/6u
.if \n(.l<\n(84 .ll \n(84u
.in 0
Default privileges granted to all code plus privileges granted in policy file. (2)
.br
.di
.nr i| \n(dn
.nr i- \n(dl
..
.ec \
.35
.nf
.ll \n(34u
.nr 80 0
.nr 38 \w\f3JAR File Type\fP
.if \n(80<\n(38 .nr 80 \n(38
.nr 38 \wSigned JAR
.if \n(80<\n(38 .nr 80 \n(38
.nr 38 \wUnsigned JAR
.if \n(80<\n(38 .nr 80 \n(38
.nr 38 \wSigned JAR
.if \n(80<\n(38 .nr 80 \n(38
.nr 38 \wSigned JAR
.if \n(80<\n(38 .nr 80 \n(38
.nr 38 \wSigned JAR
.if \n(80<\n(38 .nr 80 \n(38
.nr 38 \wSigned JAR
.if \n(80<\n(38 .nr 80 \n(38
.nr 38 \wSigned JAR
.if \n(80<\n(38 .nr 80 \n(38
.nr 38 \wSigned JAR
.if \n(80<\n(38 .nr 80 \n(38
.nr 38 \wSigned JAR
.if \n(80<\n(38 .nr 80 \n(38
.nr 38 \wSigned JAR
.if \n(80<\n(38 .nr 80 \n(38
.80
.rm 80
.nr 81 0
.nr 38 \w\f3Identity in 1.1 database\fP
.if \n(81<\n(38 .nr 81 \n(38
.nr 38 \wNO
.if \n(81<\n(38 .nr 81 \n(38
.nr 38 \wNO
.if \n(81<\n(38 .nr 81 \n(38
.nr 38 \wNO
.if \n(81<\n(38 .nr 81 \n(38
.nr 38 \wYES/Untrusted
.if \n(81<\n(38 .nr 81 \n(38
.nr 38 \wYES/Untrusted
.if \n(81<\n(38 .nr 81 \n(38
.nr 38 \wNO
.if \n(81<\n(38 .nr 81 \n(38
.nr 38 \wYES/Trusted
.if \n(81<\n(38 .nr 81 \n(38
.nr 38 \wYES/Trusted
.if \n(81<\n(38 .nr 81 \n(38
.nr 38 \wYES/Trusted
.if \n(81<\n(38 .nr 81 \n(38
.nr 38 \wYES/Trusted
.if \n(81<\n(38 .nr 81 \n(38
.81
.rm 81
.nr 82 0
.nr 38 \wNO
.if \n(82<\n(38 .nr 82 \n(38
.nr 38 \wNO
.if \n(82<\n(38 .nr 82 \n(38
.nr 38 \wYES
.if \n(82<\n(38 .nr 82 \n(38
.nr 38 \wNO
.if \n(82<\n(38 .nr 82 \n(38
.nr 38 \wNO
.if \n(82<\n(38 .nr 82 \n(38
.nr 38 \wYES
.if \n(82<\n(38 .nr 82 \n(38
.nr 38 \wYES
.if \n(82<\n(38 .nr 82 \n(38
.nr 38 \wNO
.if \n(82<\n(38 .nr 82 \n(38
.nr 38 \wYES
.if \n(82<\n(38 .nr 82 \n(38
.nr 38 \wNO
.if \n(82<\n(38 .nr 82 \n(38
.82
.rm 82
.nr 38 \n(a-
.if \n(82<\n(38 .nr 82 \n(38
.nr 83 0
.nr 38 \wNO
.if \n(83<\n(38 .nr 83 \n(38
.nr 38 \wNO
.if \n(83<\n(38 .nr 83 \n(38
.nr 38 \wNO
.if \n(83<\n(38 .nr 83 \n(38
.nr 38 \wNO
.if \n(83<\n(38 .nr 83 \n(38
.nr 38 \wYES
.if \n(83<\n(38 .nr 83 \n(38
.nr 38 \wYES
.if \n(83<\n(38 .nr 83 \n(38
.nr 38 \wYES
.if \n(83<\n(38 .nr 83 \n(38
.nr 38 \wNO
.if \n(83<\n(38 .nr 83 \n(38
.nr 38 \wNO
.if \n(83<\n(38 .nr 83 \n(38
.nr 38 \wYES
.if \n(83<\n(38 .nr 83 \n(38
.83
.rm 83
.nr 38 \n(b-
.if \n(83<\n(38 .nr 83 \n(38
.nr 84 0
.nr 38 \w\f3Privileges Granted\fP
.if \n(84<\n(38 .nr 84 \n(38
.nr 38 \wAll privileges
.if \n(84<\n(38 .nr 84 \n(38
.nr 38 \wAll privileges (1)
.if \n(84<\n(38 .nr 84 \n(38
.nr 38 \wAll privileges (1)
.if \n(84<\n(38 .nr 84 \n(38
.84
.rm 84
.nr 38 \n(c-
.if \n(84<\n(38 .nr 84 \n(38
.nr 38 \n(d-
.if \n(84<\n(38 .nr 84 \n(38
.nr 38 \n(e-
.if \n(84<\n(38 .nr 84 \n(38
.nr 38 \n(f-
.if \n(84<\n(38 .nr 84 \n(38
.nr 38 \n(g-
.if \n(84<\n(38 .nr 84 \n(38
.nr 38 \n(h-
.if \n(84<\n(38 .nr 84 \n(38
.nr 38 \n(i-
.if \n(84<\n(38 .nr 84 \n(38
.35
.nf
.ll \n(34u
.nr 38 1n
.nr 79 0
.nr 40 \n(79+(0*\n(38)
.nr 80 +\n(40
.nr 41 \n(80+(3*\n(38)
.nr 81 +\n(41
.nr 42 \n(81+(3*\n(38)
.nr 82 +\n(42
.nr 43 \n(82+(3*\n(38)
.nr 83 +\n(43
.nr 44 \n(83+(3*\n(38)
.nr 84 +\n(44
.nr TW \n(84
.if t .if \n(TW>\n(.li .tm Table at line 161 file Input is too wide - \n(TW units
.fc  
.nr #T 0-1
.nr #a 0-1
.eo
.de T#
.ds #d .d
.if \(ts\n(.z\(ts\(ts .ds #d nl
.mk ##
.nr ## -1v
.ls 1
.ls
..
.ec
.ne \n(a|u+\n(.Vu
.ne \n(b|u+\n(.Vu
.if (\n(a|+\n(#^-1v)>\n(#- .nr #- +(\n(a|+\n(#^-\n(#--1v)
.if (\n(b|+\n(#^-1v)>\n(#- .nr #- +(\n(b|+\n(#^-\n(#--1v)
.ta \n(80u \n(81u \n(82u \n(83u \n(84u 
.nr 31 \n(.f
.nr 35 1m
\&\h'|\n(40u'\f3JAR File Type\fP\h'|\n(41u'\f3Identity in 1.1 database\fP\h'|\n(42u'\h'|\n(43u'\h'|\n(44u'\f3Privileges Granted\fP
.mk ##
.nr 31 \n(##
.sp |\n(##u-1v
.nr 37 \n(42u
.in +\n(37u
.a+
.in -\n(37u
.mk 32
.if \n(32>\n(31 .nr 31 \n(32
.sp |\n(##u-1v
.nr 37 \n(43u
.in +\n(37u
.b+
.in -\n(37u
.mk 32
.if \n(32>\n(31 .nr 31 \n(32
.sp |\n(31u
.ne \n(c|u+\n(.Vu
.if (\n(c|+\n(#^-1v)>\n(#- .nr #- +(\n(c|+\n(#^-\n(#--1v)
.ta \n(80u \n(81u \n(82u \n(83u \n(84u 
.nr 31 \n(.f
.nr 35 1m
\&\h'|\n(40u'Signed JAR\h'|\n(41u'NO\h'|\n(42u'NO\h'|\n(43u'NO\h'|\n(44u'
.mk ##
.nr 31 \n(##
.sp |\n(##u-1v
.nr 37 \n(44u
.in +\n(37u
.c+
.in -\n(37u
.mk 32
.if \n(32>\n(31 .nr 31 \n(32
.sp |\n(31u
.ne \n(d|u+\n(.Vu
.if (\n(d|+\n(#^-1v)>\n(#- .nr #- +(\n(d|+\n(#^-\n(#--1v)
.ta \n(80u \n(81u \n(82u \n(83u \n(84u 
.nr 31 \n(.f
.nr 35 1m
\&\h'|\n(40u'Unsigned JAR\h'|\n(41u'NO\h'|\n(42u'NO\h'|\n(43u'NO\h'|\n(44u'
.mk ##
.nr 31 \n(##
.sp |\n(##u-1v
.nr 37 \n(44u
.in +\n(37u
.d+
.in -\n(37u
.mk 32
.if \n(32>\n(31 .nr 31 \n(32
.sp |\n(31u
.ne \n(e|u+\n(.Vu
.if (\n(e|+\n(#^-1v)>\n(#- .nr #- +(\n(e|+\n(#^-\n(#--1v)
.ta \n(80u \n(81u \n(82u \n(83u \n(84u 
.nr 31 \n(.f
.nr 35 1m
\&\h'|\n(40u'Signed JAR\h'|\n(41u'NO\h'|\n(42u'YES\h'|\n(43u'NO\h'|\n(44u'
.mk ##
.nr 31 \n(##
.sp |\n(##u-1v
.nr 37 \n(44u
.in +\n(37u
.e+
.in -\n(37u
.mk 32
.if \n(32>\n(31 .nr 31 \n(32
.sp |\n(31u
.ne \n(f|u+\n(.Vu
.if (\n(f|+\n(#^-1v)>\n(#- .nr #- +(\n(f|+\n(#^-\n(#--1v)
.ta \n(80u \n(81u \n(82u \n(83u \n(84u 
.nr 31 \n(.f
.nr 35 1m
\&\h'|\n(40u'Signed JAR\h'|\n(41u'YES/Untrusted\h'|\n(42u'NO\h'|\n(43u'NO\h'|\n(44u'
.mk ##
.nr 31 \n(##
.sp |\n(##u-1v
.nr 37 \n(44u
.in +\n(37u
.f+
.in -\n(37u
.mk 32
.if \n(32>\n(31 .nr 31 \n(32
.sp |\n(31u
.ne \n(g|u+\n(.Vu
.if (\n(g|+\n(#^-1v)>\n(#- .nr #- +(\n(g|+\n(#^-\n(#--1v)
.ta \n(80u \n(81u \n(82u \n(83u \n(84u 
.nr 31 \n(.f
.nr 35 1m
\&\h'|\n(40u'Signed JAR\h'|\n(41u'YES/Untrusted\h'|\n(42u'NO\h'|\n(43u'YES\h'|\n(44u'
.mk ##
.nr 31 \n(##
.sp |\n(##u-1v
.nr 37 \n(44u
.in +\n(37u
.g+
.in -\n(37u
.mk 32
.if \n(32>\n(31 .nr 31 \n(32
.sp |\n(31u
.ne \n(h|u+\n(.Vu
.if (\n(h|+\n(#^-1v)>\n(#- .nr #- +(\n(h|+\n(#^-\n(#--1v)
.ta \n(80u \n(81u \n(82u \n(83u \n(84u 
.nr 31 \n(.f
.nr 35 1m
\&\h'|\n(40u'Signed JAR\h'|\n(41u'NO\h'|\n(42u'YES\h'|\n(43u'YES\h'|\n(44u'
.mk ##
.nr 31 \n(##
.sp |\n(##u-1v
.nr 37 \n(44u
.in +\n(37u
.h+
.in -\n(37u
.mk 32
.if \n(32>\n(31 .nr 31 \n(32
.sp |\n(31u
.ne \n(i|u+\n(.Vu
.if (\n(i|+\n(#^-1v)>\n(#- .nr #- +(\n(i|+\n(#^-\n(#--1v)
.ta \n(80u \n(81u \n(82u \n(83u \n(84u 
.nr 31 \n(.f
.nr 35 1m
\&\h'|\n(40u'Signed JAR\h'|\n(41u'YES/Trusted\h'|\n(42u'YES\h'|\n(43u'YES\h'|\n(44u'
.mk ##
.nr 31 \n(##
.sp |\n(##u-1v
.nr 37 \n(44u
.in +\n(37u
.i+
.in -\n(37u
.mk 32
.if \n(32>\n(31 .nr 31 \n(32
.sp |\n(31u
.ta \n(80u \n(81u \n(82u \n(83u \n(84u 
.nr 31 \n(.f
.nr 35 1m
\&\h'|\n(40u'Signed JAR\h'|\n(41u'YES/Trusted\h'|\n(42u'NO\h'|\n(43u'NO\h'|\n(44u'All privileges
.ta \n(80u \n(81u \n(82u \n(83u \n(84u 
.nr 31 \n(.f
.nr 35 1m
\&\h'|\n(40u'Signed JAR\h'|\n(41u'YES/Trusted\h'|\n(42u'YES\h'|\n(43u'NO\h'|\n(44u'All privileges (1)
.ta \n(80u \n(81u \n(82u \n(83u \n(84u 
.nr 31 \n(.f
.nr 35 1m
\&\h'|\n(40u'Signed JAR\h'|\n(41u'YES/Trusted\h'|\n(42u'NO\h'|\n(43u'YES\h'|\n(44u'All privileges (1)
.fc
.nr T. 1
.T# 1
.35
.rm a+
.rm b+
.rm c+
.rm d+
.rm e+
.rm f+
.rm g+
.rm h+
.rm i+
.TE
.if \n-(b.=0 .nr c. \n(.c-\n(d.-42

.LP
.LP
Notes:
.LP
.RS 3
.TP 3
1.
If an identity/alias is mentioned in the policy file, it must be imported into the keystore for the policy file to have any effect on privileges granted. 
.TP 3
2.
The policy file/keystore combination has precedence over a trusted identity in the identity database. 
.TP 3
3.
Untrusted identities are ignored in the Java 2 platform. 
.TP 3
4.
Only trusted identities can be imported into Java 2 SDK keystores. 
.RE

.LP
.SS 
Keystore Aliases
.LP
.RS 3

.LP
.LP
All keystore entities are accessed via unique \f2aliases\fP.
.LP
.LP
When using \f3jarsigner\fP to sign a JAR file, you must specify the alias for the keystore entry containing the private key needed to generate the signature. For example, the following will sign the JAR file named "MyJARFile.jar", using the private key associated with the alias "duke" in the keystore named "mystore" in the "working" directory. Since no output file is specified, it overwrites MyJARFile.jar with the signed JAR file.
.LP
.nf
\f3
.fl
    jarsigner \-keystore /working/mystore \-storepass myspass
.fl
      \-keypass dukekeypasswd MyJARFile.jar duke 
.fl
\fP
.fi

.LP
.LP
Keystores are protected with a password, so the store password (in this case "myspass") must be specified. You will be prompted for it if you don't specify it on the command line. Similarly, private keys are protected in a keystore with a password, so the private key's password (in this case "dukekeypasswd") must be specified, and you will be prompted for it if you don't specify it on the command line and it isn't the same as the store password.
.LP
.RE
.SS 
Keystore Location
.LP
.RS 3

.LP
.LP
\f3jarsigner\fP has a \f2\-keystore\fP option for specifying the URL of the keystore to be used. The keystore is by default stored in a file named \f2.keystore\fP in the user's home directory, as determined by the \f2user.home\fP system property. On Solaris systems \f2user.home\fP defaults to the user's home directory.
.LP
.LP
Note that the input stream from the \f2\-keystore\fP option is passed to the \f2KeyStore.load\fP method. If \f2NONE\fP is specified as the URL, then a null stream is passed to the \f2KeyStore.load\fP method. \f2NONE\fP should be specified if the \f2KeyStore\fP is not file\-based, for example, if it resides on a hardware token device.
.LP
.RE
.SS 
Keystore Implementation
.LP
.RS 3

.LP
.LP
The \f2KeyStore\fP class provided in the \f2java.security\fP package supplies well\-defined interfaces to access and modify the information in a keystore. It is possible for there to be multiple different concrete implementations, where each implementation is that for a particular \f2type\fP of keystore.
.LP
.LP
Currently, there are two command\-line tools that make use of keystore implementations (\f3keytool\fP and \f3jarsigner\fP), and also a GUI\-based tool named \f3Policy Tool\fP. Since \f2KeyStore\fP is publicly available, Java 2 SDK users can write additional security applications that use it.
.LP
.LP
There is a built\-in default implementation, provided by Sun Microsystems. It implements the keystore as a file, utilizing a proprietary keystore type (format) named "JKS". It protects each private key with its individual password, and also protects the integrity of the entire keystore with a (possibly different) password.
.LP
.LP
Keystore implementations are provider\-based. More specifically, the application interfaces supplied by \f2KeyStore\fP are implemented in terms of a "Service Provider Interface" (SPI). That is, there is a corresponding abstract \f2KeystoreSpi\fP class, also in the \f2java.security\fP package, which defines the Service Provider Interface methods that "providers" must implement. (The term "provider" refers to a package or a set of packages that supply a concrete implementation of a subset of services that can be accessed by the Java Security API.) Thus, to provide a keystore implementation, clients must implement a provider and supply a KeystoreSpi subclass implementation, as described in 
.na
\f2How to Implement a Provider for the Java Cryptography Architecture\fP @
.fi
http://java.sun.com/javase/6/docs/technotes/guides/security/HowToImplAProvider.html.
.LP
.LP
Applications can choose different \f2types\fP of keystore implementations from different providers, using the "getInstance" factory method supplied in the \f2KeyStore\fP class. A keystore type defines the storage and data format of the keystore information, and the algorithms used to protect private keys in the keystore and the integrity of the keystore itself. Keystore implementations of different types are not compatible.
.LP
.LP
\f3keytool\fP works on any file\-based keystore implementation. (It treats the keytore location that is passed to it at the command line as a filename and converts it to a FileInputStream, from which it loads the keystore information.) The \f3jarsigner\fP and \f3policytool\fP tools, on the other hand, can read a keystore from any location that can be specified using a URL.
.LP
.LP
For \f3jarsigner\fP and \f3keytool\fP, you can specify a keystore type at the command line, via the \f2\-storetype\fP option. For \f3Policy Tool\fP, you can specify a keystore type via the "Change Keystore" command in the Edit menu.
.LP
.LP
If you don't explicitly specify a keystore type, the tools choose a keystore implementation based simply on the value of the \f2keystore.type\fP property specified in the security properties file. The security properties file is called \f2java.security\fP, and it resides in the SDK security properties directory, \f2java.home\fP/lib/security, where \f2java.home\fP is the runtime environment's directory (the \f2jre\fP directory in the SDK or the top\-level directory of the Java 2 Runtime Environment).
.LP
.LP
Each tool gets the \f2keystore.type\fP value and then examines all the currently\-installed providers until it finds one that implements keystores of that type. It then uses the keystore implementation from that provider.
.LP
.LP
The \f2KeyStore\fP class defines a static method named \f2getDefaultType\fP that lets applications and applets retrieve the value of the \f2keystore.type\fP property. The following line of code creates an instance of the default keystore type (as specified in the \f2keystore.type\fP property):
.LP
.nf
\f3
.fl
    KeyStore keyStore = KeyStore.getInstance(KeyStore.getDefaultType());
.fl
\fP
.fi

.LP
.LP
The default keystore type is "jks" (the proprietary type of the keystore implementation provided by Sun). This is specified by the following line in the security properties file:
.LP
.nf
\f3
.fl
    keystore.type=jks
.fl
\fP
.fi

.LP
.LP
Note: Case doesn't matter in keystore type designations. For example, "JKS" would be considered the same as "jks".
.LP
.LP
To have the tools utilize a keystore implementation other than the default, change that line to specify a different keystore type. For example, if you have a provider package that supplies a keystore implementation for a keystore type called "pkcs12", change the line to
.LP
.nf
\f3
.fl
    keystore.type=pkcs12
.fl
\fP
.fi

.LP
.LP
Note that if you us the PKCS#11 provider package, you should refer to the 
.na
\f2KeyTool and JarSigner\fP @
.fi
http://java.sun.com/javase/6/docs/technotes/guides/security/p11guide.html#keytooljarsigner section of the Java PKCS#11 Reference Guide for details.
.LP
.RE
.RE
.SS 
Supported Algorithms
.LP
.RS 3

.LP
.LP
By default, \f3jarsigner\fP signs a JAR file using either
.LP
.RS 3
.TP 2
o
DSA (Digital Signature Algorithm) with the SHA\-1 digest algorithm, or 
.TP 2
o
the RSA algorithm with the MD5 digest algorithm. 
.RE

.LP
.LP
That is, if the signer's public and private keys are DSA keys, \f3jarsigner\fP will sign the JAR file using the "SHA1withDSA" algorithm. If the signer's keys are RSA keys, \f3jarsigner\fP will attempt to sign the JAR file using the "MD5withRSA" algorithm.
.LP
.LP
These default signature algorithms can be overridden using the \f2\-sigalg\fP option.
.LP
.RE
.SS 
The Signed JAR File
.LP
.RS 3

.LP
.LP
When \f3jarsigner\fP is used to sign a JAR file, the output signed JAR file is exactly the same as the input JAR file, except that it has two additional files placed in the META\-INF directory:
.LP
.RS 3
.TP 2
o
a signature file, with a .SF extension, and 
.TP 2
o
a signature block file, with a .DSA extension. 
.RE

.LP
.LP
The base file names for these two files come from the value of the \f2\-sigFile\fP option. For example, if the option appears as
.LP
.nf
\f3
.fl
  \-sigFile MKSIGN
.fl
\fP
.fi

.LP
.LP
the files are named "MKSIGN.SF" and "MKSIGN.DSA".
.LP
.LP
If no \f2\-sigfile\fP option appears on the command line, the base file name for the .SF and .DSA files will be the first 8 characters of the alias name specified on the command line, all converted to upper case. If the alias name has fewer than 8 characters, the full alias name is used. If the alias name contains any characters that are not allowed in a signature file name, each such character is converted to an underscore ("_") character in forming the file name. Legal characters include letters, digits, underscores, and hyphens.
.LP
\f3The Signature (.SF) File\fP
.LP
.RS 3

.LP
.LP
A signature file (the .SF file) looks similar to the manifest file that is always included in a JAR file when \f3jarsigner\fP is used to sign the file. That is, for each source file included in the JAR file, the .SF file has three lines, just as in the manifest file, listing the following:
.LP
.RS 3
.TP 2
o
the file name, 
.TP 2
o
the name of the digest algorithm used (SHA), and 
.TP 2
o
a SHA digest value. 
.RE

.LP
.LP
In the manifest file, the SHA digest value for each source file is the digest (hash) of the binary data in the source file. In the .SF file, on the other hand, the digest value for a given source file is the hash of the three lines in the manifest file for the source file.
.LP
.LP
The signature file also, by default, includes a header containing a hash of the whole manifest file. The presence of the header enables verification optimization, as described in JAR File Verification.
.LP
.RE
\f3The Signature Block (.DSA) File\fP
.LP
.RS 3

.LP
.LP
The .SF file is signed and the signature is placed in the .DSA file. The .DSA file also contains, encoded inside it, the certificate or certificate chain from the keystore which authenticates the public key corresponding to the private key used for signing.
.LP
.RE
.RE
.SS 
Signature Timestamp
.LP
.RS 3

.LP
.LP
As of the J2SE 5.0 release, the \f2jarsigner\fP tool can now generate and store a signature timestamp when signing a JAR file. In addition, \f2jarsigner\fP supports alternative signing mechanisms. This behavior is optional and is controlled by the user at the time of signing through these options:
.LP
.RS 3
.TP 2
o
\f2\-tsa url\fP 
.TP 2
o
\f2\-tsacert alias\fP 
.TP 2
o
\f2\-altsigner class\fP 
.TP 2
o
\f2\-altsignerpath classpathlist\fP 
.RE

.LP
.LP
Each of these options is detailed in the Options section below.
.LP
.RE
.SS 
JAR File Verification
.LP
.RS 3

.LP
.LP
A successful JAR file verification occurs if the signature(s) are valid, and none of the files that were in the JAR file when the signatures were generated have been changed since then. JAR file verification involves the following steps:
.LP
.RS 3
.TP 3
1.
Verify the signature of the .SF file itself. 
.LP
That is, the verification ensures that the signature stored in each signature block (.DSA) file was in fact generated using the private key corresponding to the public key whose certificate (or certificate chain) also appears in the .DSA file. It also ensures that the signature is a valid signature of the corresponding signature (.SF) file, and thus the .SF file has not been tampered with.  
.TP 3
2.
Verify the digest listed in each entry in the .SF file with each corresponding section in the manifest. 
.LP
The .SF file by default includes a header containing a hash of the entire manifest file. When the header is present, then the verification can check to see whether or not the hash in the header indeed matches the hash of the manifest file. If that is the case, verification proceeds to the next step. 
.LP
If that is not the case, a less optimized verification is required to ensure that the hash in each source file information section in the .SF file equals the hash of its corresponding section in the manifest file (see The Signature (.SF) File). 
.LP
One reason the hash of the manifest file that is stored in the .SF file header may not equal the hash of the current manifest file would be because one or more files were added to the JAR file (using the \f2jar\fP tool) after the signature (and thus the .SF file) was generated. When the \f2jar\fP tool is used to add files, the manifest file is changed (sections are added to it for the new files), but the .SF file is not. A verification is still considered successful if none of the files that were in the JAR file when the signature was generated have been changed since then, which is the case if the hashes in the non\-header sections of the .SF file equal the hashes of the corresponding sections in the manifest file.  
.TP 3
3.
Read each file in the JAR file that has an entry in the .SF file. While reading, compute the file's digest, and then compare the result with the digest for this file in the manifest section. The digests should be the same, or verification fails. 
.RE

.LP
.LP
If any serious verification failures occur during the verification process, the process is stopped and a security exception is thrown. It is caught and displayed by \f3jarsigner\fP.
.LP
.RE
.SS 
Multiple Signatures for a JAR File
.LP
.RS 3

.LP
.LP
A JAR file can be signed by multiple people simply by running the \f3jarsigner\fP tool on the file multiple times, specifying the alias for a different person each time, as in:
.LP
.nf
\f3
.fl
  jarsigner myBundle.jar susan
.fl
  jarsigner myBundle.jar kevin
.fl
\fP
.fi

.LP
.LP
When a JAR file is signed multiple times, there are multiple .SF and .DSA files in the resulting JAR file, one pair for each signature. Thus, in the example above, the output JAR file includes files with the following names:
.LP
.nf
\f3
.fl
  SUSAN.SF
.fl
  SUSAN.DSA
.fl
  KEVIN.SF
.fl
  KEVIN.DSA
.fl
\fP
.fi

.LP
.LP
Note: It is also possible for a JAR file to have mixed signatures, some generated by the JDK 1.1 \f3javakey\fP tool and others by \f3jarsigner\fP. That is, \f3jarsigner\fP can be used to sign JAR files already previously signed using \f3javakey\fP.
.LP
.RE
.SH "OPTIONS"
.LP

.LP
.LP
The various \f3jarsigner\fP options are listed and described below. Note:
.LP
.RS 3
.TP 2
o
All option names are preceded by a minus sign (\-). 
.TP 2
o
The options may be provided in any order. 
.TP 2
o
Items in italics (option values) represent the actual values that must be supplied. 
.TP 2
o
The \f2\-keystore\fP, \f2\-storepass\fP, \f2\-keypass\fP, \f2\-sigfile\fP, \f2\-sigalg\fP, \f2\-digestalg\fP, and \f2\-signedjar\fP options are only relevant when signing a JAR file, not when verifying a signed JAR file. Similarly, an alias is only specified on the command line when signing a JAR file. 
.RE

.LP
.RS 3
.TP 3
\-keystore url 
Specifies the URL that tells the keystore location. This defaults to the file \f2.keystore\fP in the user's home directory, as determined by the "user.home" system property. 
.LP
A keystore is required when signing, so you must explicitly specify one if the default keystore does not exist (or you want to use one other than the default). 
.LP
A keystore is \f2not\fP required when verifying, but if one is specified, or the default exists, and the \f2\-verbose\fP option was also specified, additional information is output regarding whether or not any of the certificates used to verify the JAR file are contained in that keystore. 
.LP
Note: the \f2\-keystore\fP argument can actually be a file name (and path) specification rather than a URL, in which case it will be treated the same as a "file:" URL. That is, 
.nf
\f3
.fl
  \-keystore \fP\f4filePathAndName\fP\f3
.fl
\fP
.fi
is treated as equivalent to 
.nf
\f3
.fl
  \-keystore file:\fP\f4filePathAndName\fP\f3
.fl
\fP
.fi
If the Sun PKCS#11 provider has been configured in the \f2java.security\fP security properties file (located in the JRE's \f2$JAVA_HOME/lib/security\fP directory), then keytool and jarsigner can operate on the PKCS#11 token by specifying these options: 
.RS 3
.TP 2
o
\f2\-keystore NONE\fP 
.TP 2
o
\f2\-storetype PKCS11\fP 
.RE
For example, this command lists the contents of the configured PKCS#11 token: 
.RS 3

.LP
.nf
\f3
.fl
   jarsigner \-keystore NONE \-storetype PKCS11 \-list
.fl
  
.fl
\fP
.fi
.RE
.TP 3
\-storetype storetype 
Specifies the type of keystore to be instantiated. The default keystore type is the one that is specified as the value of the "keystore.type" property in the security properties file, which is returned by the static \f2getDefaultType\fP method in \f2java.security.KeyStore\fP. 
.LP
The PIN for a PCKS#11 token can also be specified using the \f2\-storepass\fP option. If none has been specified, keytool and jarsigner will prompt for the token PIN. If the token has a protected authentication path (such as a dedicated PIN\-pad or a biometric reader), then the \f2\-protected\fP option must be specified and no password options can be specified.  
.TP 3
\-storepass password 
Specifies the password which is required to access the keystore. This is only needed when signing (not verifying) a JAR file. In that case, if a \f2\-storepass\fP option is not provided at the command line, the user is prompted for the password. 
.LP
Note: The password shouldn't be specified on the command line or in a script unless it is for testing purposes, or you are on a secure system. Also, when typing in a password at the password prompt, the password is echoed (displayed exactly as typed), so be careful not to type it in front of anyone.  
.TP 3
\-keypass password 
Specifies the password used to protect the private key of the keystore entry addressed by the alias specified on the command line. The password is required when using \f3jarsigner\fP to sign a JAR file. If no password is provided on the command line, and the required password is different from the store password, the user is prompted for it. 
.LP
Note: The password shouldn't be specified on the command line or in a script unless it is for testing purposes, or you are on a secure system. Also, when typing in a password at the password prompt, the password is echoed (displayed exactly as typed), so be careful not to type it in front of anyone.  
.TP 3
\-sigfile file 
Specifies the base file name to be used for the generated .SF and .DSA files. For example, if \f2file\fP is "DUKESIGN", the generated .SF and .DSA files will be named "DUKESIGN.SF" and "DUKESIGN.DSA", and will be placed in the "META\-INF" directory of the signed JAR file. 
.LP
The characters in \f2file\fP must come from the set "a\-zA\-Z0\-9_\-". That is, only letters, numbers, underscore, and hyphen characters are allowed. Note: All lowercase characters will be converted to uppercase for the .SF and .DSA file names. 
.LP
If no \f2\-sigfile\fP option appears on the command line, the base file name for the .SF and .DSA files will be the first 8 characters of the alias name specified on the command line, all converted to upper case. If the alias name has fewer than 8 characters, the full alias name is used. If the alias name contains any characters that are not legal in a signature file name, each such character is converted to an underscore ("_") character in forming the file name.  
.TP 3
\-sigalg algorithm 
.RS 3

.LP
Specifies the name of the signature algorithm to use to sign the JAR file. 
.LP
See 
.na
\f2Appendix A\fP @
.fi
http://java.sun.com/javase/6/docs/technotes/guides/security/crypto/CryptoSpec.html#appa of the Java Cryptography Architecture for a list of standard signature algorithm names. This algorithm must be compatible with the private key used to sign the JAR file. If this option is not specified, SHA1withDSA or MD5withRSA will be used depending on the type of private key. There must either be a statically installed provider supplying an implementation of the specified algorithm or the user must specify one with the \f2\-providerClass\fP option, otherwise the command will not succeed.
.LP
.RE
.TP 3
\-digestalg algorithm 
.RS 3
Specifies the name of the message digest algorithm to use when digesting the entries of a jar file. 
.LP
See 
.na
\f2Appendix A\fP @
.fi
http://java.sun.com/javase/6/docs/technotes/guides/security/crypto/CryptoSpec.html#appa of the Java Cryptography Architecture for a list of standard message digest algorithm names. If this option is not specified, SHA\-1 will be used. There must either be a statically installed provider supplying an implementation of the specified algorithm or the user must specify one with the \f2\-providerClass\fP option, otherwise the command will not succeed.
.LP
.RE
.TP 3
\-signedjar file 
Specifies the name to be used for the signed JAR file. 
.LP
If no name is specified on the command line, the name used is the same as the input JAR file name (the name of the JAR file to be signed); in other words, that file is overwritten with the signed JAR file.  
.TP 3
\-verify 
If this appears on the command line, the specified JAR file will be verified, not signed. If the verification is successful, "jar verified" will be displayed. If you try to verify an unsigned JAR file, or a JAR file signed with an unsupported algorithm (e.g., RSA when you don't have an RSA provider installed), the following is displayed: "jar is unsigned. (signatures missing or not parsable)" 
.LP
It is possible to verify JAR files signed using either \f3jarsigner\fP or the JDK 1.1 \f3javakey\fP tool, or both. 
.LP
For further information on verification, see JAR File Verification.  
.TP 3
\-certs 
If this appears on the command line, along with the \f2\-verify\fP and \f2\-verbose\fP options, the output includes certificate information for each signer of the JAR file. This information includes 
.RS 3
.TP 2
o
the name of the type of certificate (stored in the .DSA file) that certifies the signer's public key 
.TP 2
o
if the certificate is an X.509 certificate (more specifically, an instance of \f2java.security.cert.X509Certificate\fP): the distinguished name of the signer 
.RE
.LP
The keystore is also examined. If no keystore value is specified on the command line, the default keystore file (if any) will be checked. If the public key certificate for a signer matches an entry in the keystore, then the following information will also be displayed: 
.RS 3
.TP 2
o
in parentheses, the alias name for the keystore entry for that signer. If the signer actually comes from a JDK 1.1 identity database instead of from a keystore, the alias name will appear in brackets instead of parentheses. 
.RE
.TP 3
\-verbose 
If this appears on the command line, it indicates "verbose" mode, which causes \f3jarsigner\fP to output extra information as to the progress of the JAR signing or verification. 
.TP 3
\-internalsf 
In the past, the .DSA (signature block) file generated when a JAR file was signed used to include a complete encoded copy of the .SF file (signature file) also generated. This behavior has been changed. To reduce the overall size of the output JAR file, the .DSA file by default doesn't contain a copy of the .SF file anymore. But if \f2\-internalsf\fP appears on the command line, the old behavior is utilized. \f3This option is mainly useful for testing; in practice, it should not be used, since doing so eliminates a useful optimization.\fP 
.TP 3
\-sectionsonly 
If this appears on the command line, the .SF file (signature file) generated when a JAR file is signed does \f2not\fP include a header containing a hash of the whole manifest file. It just contains information and hashes related to each individual source file included in the JAR file, as described in The Signature (.SF) File . 
.LP
By default, this header is added, as an optimization. When the header is present, then whenever the JAR file is verified, the verification can first check to see whether or not the hash in the header indeed matches the hash of the whole manifest file. If so, verification proceeds to the next step. If not, it is necessary to do a less optimized verification that the hash in each source file information section in the .SF file equals the hash of its corresponding section in the manifest file. 
.LP
For further information, see JAR File Verification. 
.LP
\f3This option is mainly useful for testing; in practice, it should not be used, since doing so eliminates a useful optimization.\fP   
.TP 3
\-protected 
Either \f2true\fP or \f2false\fP. This value should be specified as \f2true\fP if a password must be given via a protected authentication path such as a dedicated PIN reader. 
.RE
.RS 3
.TP 3
\-provider provider\-class\-name 
Used to specify the name of cryptographic service provider's master class file when the service provider is not listed in the security properties file, \f2java.security\fP. 
.LP
Used in conjunction with the \f2\-providerArg\fP \f2ConfigFilePath\fP option, keytool and jarsigner will install the provider dynamically (where \f2ConfigFilePath\fP is the path to the token configuration file). Here's an example of a command to list a PKCS#11 keystore when the Sun PKCS#11 provider has not been configured in the security properties file. 
.RS 3

.LP
.nf
\f3
.fl
jarsigner \-keystore NONE \-storetype PKCS11 \\
.fl
          \-providerClass sun.security.pkcs11.SunPKCS11 \\
.fl
          \-providerArg /foo/bar/token.config \\
.fl
          \-list
.fl
\fP
.fi
.RE
.TP 3
\-providerName providerName 
If more than one provider has been configured in the \f2java.security\fP security properties file, you can use the \f2\-providerName\fP option to target a specific provider instance. The argument to this option is the name of the provider. 
.LP
For the Sun PKCS#11 provider, \f2providerName\fP is of the form \f2SunPKCS11\-\fP\f2TokenName\fP, where \f2TokenName\fP is the name suffix that the provider instance has been configured with, as detailed in the 
.na
\f2configuration attributes table\fP @
.fi
http://java.sun.com/javase/6/docs/technotes/guides/security/p11guide.html#KeyToolJarSigner#ATTRS. For example, the following command lists the contents of the PKCS#11 keystore provider instance with name suffix \f2SmartCard\fP: 
.RS 3

.LP
.nf
\f3
.fl
jarsigner \-keystore NONE \-storetype PKCS11 \\
.fl
        \-providerName SunPKCS11\-SmartCard \\
.fl
        \-list
.fl
\fP
.fi
.RE
.TP 3
\-Jjavaoption 
Passes through the specified \f2javaoption\fP string directly to the Java interpreter. (\f3jarsigner\fP is actually a "wrapper" around the interpreter.) This option should not contain any spaces. It is useful for adjusting the execution environment or memory usage. For a list of possible interpreter options, type \f2java \-h\fP or \f2java \-X\fP at the command line. 
.LP
.TP 3
\-tsa url 
If \f2"\-tsa http://example.tsa.url"\fP appears on the command line when signing a JAR file then a timestamp is generated for the signature. The URL, \f2http://example.tsa.url\fP, identifies the location of the Time Stamping Authority (TSA). It overrides any URL found via the \f2\-tsacert\fP option. The \f2\-tsa\fP option does not require the TSA's public key certificate to be present in the keystore. 
.LP
To generate the timestamp, \f2jarsigner\fP communicates with the TSA using the Time\-Stamp Protocol (TSP) defined in 
.na
\f2RFC 3161\fP @
.fi
http://www.ietf.org/rfc/rfc3161.txt. If successful, the timestamp token returned by the TSA is stored along with the signature in the signature block file. 
.LP
.TP 3
\-tsacert alias 
If \f2"\-tsacert alias"\fP appears on the command line when signing a JAR file then a timestamp is generated for the signature. The \f2alias\fP 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. 
.LP
The TSA's public key certificate must be present in the keystore when using \f2\-tsacert\fP. 
.LP
.TP 3
\-altsigner class 
Specifies that an alternative signing mechanism be used. The fully\-qualified class name identifies a class file that extends the \f2com.sun.jarsigner.ContentSigner abstract class\fP. The path to this class file is defined by the \f2\-altsignerpath\fP option. If the \f2\-altsigner\fP option is used, \f2jarsigner\fP uses the signing mechanism provided by the specified class. Otherwise, \f2jarsigner\fP uses its default signing mechanism. 
.LP
For example, to use the signing mechanism provided by a class named \f2com.sun.sun.jarsigner.AuthSigner\fP, use the \f2jarsigner\fP option \f2"\-altsigner com.sun.jarsigner.AuthSigner"\fP 
.LP
.TP 3
\-altsignerpath classpathlist 
Specifies the path to the class file (the class file name is specified with the \f2\-altsigner\fP 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. 
.LP
An absolute path or a path relative to the current directory may be specified. If \f2classpathlist\fP contains multiple paths or JAR files, they should be separated with a colon (\f2:\fP) on Solaris and a semi\-colon (\f2;\fP) on Windows. This option is not necessary if the class is already in the search path. 
.LP
Example of specifying the path to a jar file that contains the class file: 
.RS 3

.LP
.LP
\f2\-altsignerpath /home/user/lib/authsigner.jar\fP
.LP
.RE
.LP
Note that the JAR file name is included. 
.LP
Example of specifying the path to the jar file that contains the class file: 
.RS 3
.LP
\f2\-altsignerpath /home/user/classes/com/sun/tools/jarsigner/\fP
.LP
.RE
.LP
Note that the JAR file name is omitted.  
.RE
.SH "EXAMPLES"
.LP

.LP
.SS 
Signing a JAR File
.LP
.RS 3

.LP
.LP
Suppose you have a JAR file named "bundle.jar" and you'd like to sign it using the private key of the user whose keystore alias is "jane" in the keystore named "mystore" in the "working" directory. Suppose the keystore password is "myspass" and the password for \f2jane\fP's private key is "j638klm". You can use the following to sign the JAR file and name the signed JAR file "sbundle.jar":
.LP
.nf
\f3
.fl
    jarsigner \-keystore /working/mystore \-storepass myspass
.fl
      \-keypass j638klm \-signedjar sbundle.jar bundle.jar jane 
.fl
\fP
.fi

.LP
.LP
Note that there is no \f2\-sigfile\fP specified in the command above, so the generated .SF and .DSA files to be placed in the signed JAR file will have default names based on the alias name. That is, they will be named \f2JANE.SF\fP and \f2JANE.DSA\fP.
.LP
.LP
If you want to be prompted for the store password and the private key password, you could shorten the above command to
.LP
.nf
\f3
.fl
    jarsigner \-keystore /working/mystore
.fl
      \-signedjar sbundle.jar bundle.jar jane 
.fl
\fP
.fi

.LP
.LP
If the keystore to be used is the default keystore (the one named ".keystore" in your home directory), you don't need to specify a keystore, as in:
.LP
.nf
\f3
.fl
    jarsigner \-signedjar sbundle.jar bundle.jar jane 
.fl
\fP
.fi

.LP
.LP
Finally, if you want the signed JAR file to simply overwrite the input JAR file (\f2bundle.jar\fP), you don't need to specify a \f2\-signedjar\fP option:
.LP
.nf
\f3
.fl
    jarsigner bundle.jar jane 
.fl
\fP
.fi
.RE

.LP
.SS 
Verifying a Signed JAR File
.LP
.RS 3

.LP
.LP
To verify a signed JAR file, that is, to verify that the signature is valid and the JAR file has not been tampered with, use a command such as the following:
.LP
.nf
\f3
.fl
    jarsigner \-verify sbundle.jar 
.fl
\fP
.fi

.LP
.LP
If the verification is successful,
.LP
.nf
\f3
.fl
    jar verified.
.fl
\fP
.fi

.LP
.LP
is displayed. Otherwise, an error message appears.
.LP
.LP
You can get more information if you use the \f2\-verbose\fP option. A sample use of \f3jarsigner\fP with the \f2\-verbose\fP option is shown below, along with sample output:
.LP
.nf
\f3
.fl
    jarsigner \-verify \-verbose sbundle.jar
.fl

.fl
           198 Fri Sep 26 16:14:06 PDT 1997 META\-INF/MANIFEST.MF
.fl
           199 Fri Sep 26 16:22:10 PDT 1997 META\-INF/JANE.SF
.fl
          1013 Fri Sep 26 16:22:10 PDT 1997 META\-INF/JANE.DSA
.fl
    smk   2752 Fri Sep 26 16:12:30 PDT 1997 AclEx.class
.fl
    smk    849 Fri Sep 26 16:12:46 PDT 1997 test.class
.fl

.fl
      s = signature was verified
.fl
      m = entry is listed in manifest
.fl
      k = at least one certificate was found in keystore
.fl

.fl
    jar verified.
.fl
\fP
.fi

.LP
.SS 
Verification with Certificate Information
.LP
.LP
If you specify the \f2\-certs\fP option when verifying, along with the \f2\-verify\fP and \f2\-verbose\fP options, the output includes certificate information for each signer of the JAR file, including the certificate type, the signer distinguished name information (iff it's an X.509 certificate), and, in parentheses, the keystore alias for the signer if the public key certificate in the JAR file matches that in a keystore entry. For example,
.LP
.nf
\f3
.fl
    jarsigner \-keystore /working/mystore \-verify \-verbose \-certs myTest.jar
.fl

.fl
           198 Fri Sep 26 16:14:06 PDT 1997 META\-INF/MANIFEST.MF
.fl
           199 Fri Sep 26 16:22:10 PDT 1997 META\-INF/JANE.SF
.fl
          1013 Fri Sep 26 16:22:10 PDT 1997 META\-INF/JANE.DSA
.fl
           208 Fri Sep 26 16:23:30 PDT 1997 META\-INF/JAVATEST.SF
.fl
          1087 Fri Sep 26 16:23:30 PDT 1997 META\-INF/JAVATEST.DSA
.fl
    smk   2752 Fri Sep 26 16:12:30 PDT 1997 Tst.class
.fl

.fl
      X.509, CN=Test Group, OU=Java Software, O=Sun Microsystems, L=CUP, S=CA, C=US (javatest)
.fl
      X.509, CN=Jane Smith, OU=Java Software, O=Sun, L=cup, S=ca, C=us (jane)
.fl

.fl
      s = signature was verified
.fl
      m = entry is listed in manifest
.fl
      k = at least one certificate was found in keystore
.fl

.fl
    jar verified.
.fl
\fP
.fi

.LP
.LP
If the certificate for a signer is not an X.509 certificate, there is no distinguished name information. In that case, just the certificate type and the alias are shown. For example, if the certificate is a PGP certificate, and the alias is "bob", you'd get
.LP
.nf
\f3
.fl
      PGP, (bob)
.fl
\fP
.fi

.LP
.SS 
Verification of a JAR File that Includes Identity Database Signers
.LP
.LP
If a JAR file has been signed using the JDK 1.1 \f3javakey\fP tool, and thus the signer is an alias in an identity database, the verification output includes an "i" symbol. If the JAR file has been signed by both an alias in an identity database and an alias in a keystore, both "k" and "i" appear.
.LP
.LP
When the \f2\-certs\fP option is used, any identity database aliases are shown in square brackets rather than the parentheses used for keystore aliases. For example:
.LP
.nf
\f3
.fl
    jarsigner \-keystore /working/mystore \-verify \-verbose \-certs writeFile.jar
.fl

.fl
           198 Fri Sep 26 16:14:06 PDT 1997 META\-INF/MANIFEST.MF
.fl
           199 Fri Sep 26 16:22:10 PDT 1997 META\-INF/JANE.SF
.fl
          1013 Fri Sep 26 16:22:10 PDT 1997 META\-INF/JANE.DSA
.fl
           199 Fri Sep 27 12:22:30 PDT 1997 META\-INF/DUKE.SF
.fl
          1013 Fri Sep 27 12:22:30 PDT 1997 META\-INF/DUKE.DSA
.fl
   smki   2752 Fri Sep 26 16:12:30 PDT 1997 writeFile.html
.fl

.fl
      X.509, CN=Jane Smith, OU=Java Software, O=Sun, L=cup, S=ca, C=us (jane)
.fl
      X.509, CN=Duke, OU=Java Software, O=Sun, L=cup, S=ca, C=us [duke]
.fl

.fl
      s = signature was verified
.fl
      m = entry is listed in manifest
.fl
      k = at least one certificate was found in keystore
.fl
      i = at least one certificate was found in identity scope
.fl

.fl
    jar verified.
.fl
\fP
.fi

.LP
.LP
Note that the alias "duke" is in brackets to denote that it is an identity database alias, not a keystore alias.
.LP
.RE
.SH "SEE ALSO"
.LP

.LP
.RS 3
.TP 2
o
jar tool documentation 
.TP 2
o
keytool tool documentation 
.TP 2
o
the 
.na
\f4Security\fP @
.fi
http://java.sun.com/docs/books/tutorial/security1.2/index.html trail of the 
.na
\f4Java Tutorial\fP @
.fi
http://java.sun.com/docs/books/tutorial/trailmap.html for examples of the use of the \f3jarsigner\fP tool 
.RE

.LP

.LP
 
