author | darcy |
Tue, 12 Nov 2019 10:45:23 -0800 | |
changeset 59037 | 3d2575331a41 |
parent 55140 | d4890c3721be |
permissions | -rw-r--r-- |
55140 | 1 |
.\"t |
2 |
.\" Copyright (c) 1994, 2019, Oracle and/or its affiliates. All rights reserved. |
|
31876
91b22707521a
8131105: Header Template for nroff man pages *.1 files contains errors
mfang
parents:
21743
diff
changeset
|
3 |
.\" DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. |
91b22707521a
8131105: Header Template for nroff man pages *.1 files contains errors
mfang
parents:
21743
diff
changeset
|
4 |
.\" |
91b22707521a
8131105: Header Template for nroff man pages *.1 files contains errors
mfang
parents:
21743
diff
changeset
|
5 |
.\" This code is free software; you can redistribute it and/or modify it |
91b22707521a
8131105: Header Template for nroff man pages *.1 files contains errors
mfang
parents:
21743
diff
changeset
|
6 |
.\" under the terms of the GNU General Public License version 2 only, as |
91b22707521a
8131105: Header Template for nroff man pages *.1 files contains errors
mfang
parents:
21743
diff
changeset
|
7 |
.\" published by the Free Software Foundation. |
91b22707521a
8131105: Header Template for nroff man pages *.1 files contains errors
mfang
parents:
21743
diff
changeset
|
8 |
.\" |
91b22707521a
8131105: Header Template for nroff man pages *.1 files contains errors
mfang
parents:
21743
diff
changeset
|
9 |
.\" This code is distributed in the hope that it will be useful, but WITHOUT |
91b22707521a
8131105: Header Template for nroff man pages *.1 files contains errors
mfang
parents:
21743
diff
changeset
|
10 |
.\" ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or |
91b22707521a
8131105: Header Template for nroff man pages *.1 files contains errors
mfang
parents:
21743
diff
changeset
|
11 |
.\" FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License |
91b22707521a
8131105: Header Template for nroff man pages *.1 files contains errors
mfang
parents:
21743
diff
changeset
|
12 |
.\" version 2 for more details (a copy is included in the LICENSE file that |
91b22707521a
8131105: Header Template for nroff man pages *.1 files contains errors
mfang
parents:
21743
diff
changeset
|
13 |
.\" accompanied this code). |
91b22707521a
8131105: Header Template for nroff man pages *.1 files contains errors
mfang
parents:
21743
diff
changeset
|
14 |
.\" |
91b22707521a
8131105: Header Template for nroff man pages *.1 files contains errors
mfang
parents:
21743
diff
changeset
|
15 |
.\" You should have received a copy of the GNU General Public License version |
91b22707521a
8131105: Header Template for nroff man pages *.1 files contains errors
mfang
parents:
21743
diff
changeset
|
16 |
.\" 2 along with this work; if not, write to the Free Software Foundation, |
91b22707521a
8131105: Header Template for nroff man pages *.1 files contains errors
mfang
parents:
21743
diff
changeset
|
17 |
.\" Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. |
91b22707521a
8131105: Header Template for nroff man pages *.1 files contains errors
mfang
parents:
21743
diff
changeset
|
18 |
.\" |
91b22707521a
8131105: Header Template for nroff man pages *.1 files contains errors
mfang
parents:
21743
diff
changeset
|
19 |
.\" Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA |
91b22707521a
8131105: Header Template for nroff man pages *.1 files contains errors
mfang
parents:
21743
diff
changeset
|
20 |
.\" or visit www.oracle.com if you need additional information or have any |
91b22707521a
8131105: Header Template for nroff man pages *.1 files contains errors
mfang
parents:
21743
diff
changeset
|
21 |
.\" questions. |
91b22707521a
8131105: Header Template for nroff man pages *.1 files contains errors
mfang
parents:
21743
diff
changeset
|
22 |
.\" |
55140 | 23 |
.\" Automatically generated by Pandoc 2.3.1 |
21743 | 24 |
.\" |
55140 | 25 |
.TH "JARSIGNER" "1" "2019" "JDK 13" "JDK Commands" |
26 |
.hy |
|
27 |
.SH NAME |
|
28 |
.PP |
|
29 |
jarsigner \- sign and verify Java Archive (JAR) files |
|
30 |
.SH SYNOPSIS |
|
31 |
.PP |
|
32 |
\f[CB]jarsigner\f[R] [\f[I]options\f[R]] \f[I]jar\-file\f[R] \f[I]alias\f[R] |
|
33 |
.PP |
|
34 |
\f[CB]jarsigner\f[R] \f[CB]\-verify\f[R] [\f[I]options\f[R]] |
|
35 |
\f[I]jar\-file\f[R] [\f[I]alias\f[R] ...] |
|
36 |
.TP |
|
37 |
.B \f[I]options\f[R] |
|
38 |
The command\-line options. |
|
39 |
See \f[B]Options for jarsigner\f[R]. |
|
40 |
.RS |
|
41 |
.RE |
|
42 |
.TP |
|
43 |
.B \f[CB]\-verify\f[R] |
|
44 |
The \f[CB]\-verify\f[R] option can take zero or more keystore alias names |
|
45 |
after the JAR file name. |
|
46 |
When the \f[CB]\-verify\f[R] option is specified, the \f[CB]jarsigner\f[R] |
|
47 |
command checks that the certificate used to verify each signed entry in |
|
48 |
the JAR file matches one of the keystore aliases. |
|
49 |
The aliases are defined in the keystore specified by \f[CB]\-keystore\f[R] |
|
50 |
or the default keystore. |
|
51 |
.RS |
|
52 |
.PP |
|
53 |
If you also specify the \f[CB]\-strict\f[R] option, and the |
|
54 |
\f[CB]jarsigner\f[R] command detects severe warnings, the message, "jar |
|
55 |
verified, with signer errors" is displayed. |
|
56 |
.RE |
|
57 |
.TP |
|
58 |
.B \f[I]jar\-file\f[R] |
|
59 |
The JAR file to be signed. |
|
60 |
.RS |
|
61 |
.PP |
|
62 |
If you also specified the \f[CB]\-strict\f[R] option, and the |
|
63 |
\f[CB]jarsigner\f[R] command detected severe warnings, the message, "jar |
|
64 |
signed, with signer errors" is displayed. |
|
65 |
.RE |
|
21743 | 66 |
.TP |
55140 | 67 |
.B \f[I]alias\f[R] |
68 |
The aliases are defined in the keystore specified by \f[CB]\-keystore\f[R] |
|
69 |
or the default keystore. |
|
70 |
.RS |
|
71 |
.RE |
|
72 |
.SH DESCRIPTION |
|
73 |
.PP |
|
74 |
The \f[CB]jarsigner\f[R] tool has two purposes: |
|
75 |
.IP \[bu] 2 |
|
76 |
To sign Java Archive (JAR) files. |
|
77 |
.IP \[bu] 2 |
|
78 |
To verify the signatures and integrity of signed JAR files. |
|
79 |
.PP |
|
80 |
The JAR feature enables the packaging of class files, images, sounds, |
|
81 |
and other digital data in a single file for faster and easier |
|
82 |
distribution. |
|
83 |
A tool named \f[CB]jar\f[R] enables developers to produce JAR files. |
|
84 |
(Technically, any ZIP file can also be considered a JAR file, although |
|
85 |
when created by the \f[CB]jar\f[R] command or processed by the |
|
86 |
\f[CB]jarsigner\f[R] command, JAR files also contain a |
|
87 |
\f[CB]META\-INF/MANIFEST.MF\f[R] file.) |
|
21743 | 88 |
.PP |
55140 | 89 |
A digital signature is a string of bits that is computed from some data |
90 |
(the data being signed) and the private key of an entity (a person, |
|
91 |
company, and so on). |
|
92 |
Similar to a handwritten signature, a digital signature has many useful |
|
93 |
characteristics: |
|
94 |
.IP \[bu] 2 |
|
95 |
Its authenticity can be verified by a computation that uses the public |
|
96 |
key corresponding to the private key used to generate the signature. |
|
97 |
.IP \[bu] 2 |
|
98 |
It can\[aq]t be forged, assuming the private key is kept secret. |
|
99 |
.IP \[bu] 2 |
|
100 |
It is a function of the data signed and thus can\[aq]t be claimed to be |
|
101 |
the signature for other data as well. |
|
102 |
.IP \[bu] 2 |
|
103 |
The signed data can\[aq]t be changed. |
|
104 |
If the data is changed, then the signature can\[aq]t be verified as |
|
105 |
authentic. |
|
106 |
.PP |
|
107 |
To generate an entity\[aq]s signature for a file, the entity must first |
|
108 |
have a public/private key pair associated with it and one or more |
|
109 |
certificates that authenticate its public key. |
|
110 |
A certificate is a digitally signed statement from one entity that says |
|
111 |
that the public key of another entity has a particular value. |
|
112 |
.PP |
|
113 |
The \f[CB]jarsigner\f[R] command uses key and certificate information from |
|
114 |
a keystore to generate digital signatures for JAR files. |
|
115 |
A keystore is a database of private keys and their associated X.509 |
|
116 |
certificate chains that authenticate the corresponding public keys. |
|
117 |
The \f[CB]keytool\f[R] command is used to create and administer keystores. |
|
118 |
.PP |
|
119 |
The \f[CB]jarsigner\f[R] command uses an entity\[aq]s private key to |
|
120 |
generate a signature. |
|
121 |
The signed JAR file contains, among other things, a copy of the |
|
122 |
certificate from the keystore for the public key corresponding to the |
|
123 |
private key used to sign the file. |
|
124 |
The \f[CB]jarsigner\f[R] command can verify the digital signature of the |
|
125 |
signed JAR file using the certificate inside it (in its signature block |
|
126 |
file). |
|
127 |
.PP |
|
128 |
The \f[CB]jarsigner\f[R] command can generate signatures that include a |
|
129 |
time stamp that enables a systems or deployer to check whether the JAR |
|
130 |
file was signed while the signing certificate was still valid. |
|
131 |
.PP |
|
132 |
In addition, APIs allow applications to obtain the timestamp |
|
133 |
information. |
|
21743 | 134 |
.PP |
55140 | 135 |
At this time, the \f[CB]jarsigner\f[R] command can only sign JAR files |
136 |
created by the \f[CB]jar\f[R] command or zip files. |
|
137 |
JAR files are the same as zip files, except they also have a |
|
138 |
\f[CB]META\-INF/MANIFEST.MF\f[R] file. |
|
139 |
A \f[CB]META\-INF/MANIFEST.MF\f[R] file is created when the |
|
140 |
\f[CB]jarsigner\f[R] command signs a zip file. |
|
141 |
.PP |
|
142 |
The default \f[CB]jarsigner\f[R] command behavior is to sign a JAR or zip |
|
143 |
file. |
|
144 |
Use the \f[CB]\-verify\f[R] option to verify a signed JAR file. |
|
145 |
.PP |
|
146 |
The \f[CB]jarsigner\f[R] command also attempts to validate the |
|
147 |
signer\[aq]s certificate after signing or verifying. |
|
148 |
If there is a validation error or any other problem, the command |
|
149 |
generates warning messages. |
|
150 |
If you specify the \f[CB]\-strict\f[R] option, then the command treats |
|
151 |
severe warnings as errors. |
|
152 |
See \f[B]Errors and Warnings\f[R]. |
|
153 |
.SH KEYSTORE ALIASES |
|
154 |
.PP |
|
155 |
All keystore entities are accessed with unique aliases. |
|
156 |
.PP |
|
157 |
When you use the \f[CB]jarsigner\f[R] command to sign a JAR file, you must |
|
158 |
specify the alias for the keystore entry that contains the private key |
|
159 |
needed to generate the signature. |
|
160 |
If no output file is specified, it overwrites the original JAR file with |
|
161 |
the signed JAR file. |
|
162 |
.PP |
|
163 |
Keystores are protected with a password, so the store password must be |
|
164 |
specified. |
|
165 |
You are prompted for it when you don\[aq]t specify it on the command |
|
166 |
line. |
|
167 |
Similarly, private keys are protected in a keystore with a password, so |
|
168 |
the private key\[aq]s password must be specified, and you are prompted |
|
169 |
for the password when you don\[aq]t specify it on the command line and |
|
170 |
it isn\[aq]t the same as the store password. |
|
171 |
.SH KEYSTORE LOCATION |
|
21743 | 172 |
.PP |
55140 | 173 |
The \f[CB]jarsigner\f[R] command has a \f[CB]\-keystore\f[R] option for |
174 |
specifying the URL of the keystore to be used. |
|
175 |
The keystore is by default stored in a file named \f[CB]\&.keystore\f[R] |
|
176 |
in the user\[aq]s home directory, as determined by the |
|
177 |
\f[CB]user.home\f[R] system property. |
|
21743 | 178 |
.PP |
55140 | 179 |
\f[B]Oracle Solaris, Linux, and OS X:\f[R] \f[CB]user.home\f[R] defaults to |
180 |
the user\[aq]s home directory. |
|
21743 | 181 |
.PP |
55140 | 182 |
The input stream from the \f[CB]\-keystore\f[R] option is passed to the |
183 |
\f[CB]KeyStore.load\f[R] method. |
|
184 |
If \f[CB]NONE\f[R] is specified as the URL, then a null stream is passed |
|
185 |
to the \f[CB]KeyStore.load\f[R] method. |
|
186 |
\f[CB]NONE\f[R] should be specified when the \f[CB]KeyStore\f[R] class |
|
187 |
isn\[aq]t file based, for example, when it resides on a hardware token |
|
188 |
device. |
|
189 |
.SH KEYSTORE IMPLEMENTATION |
|
21743 | 190 |
.PP |
55140 | 191 |
The \f[CB]KeyStore\f[R] class provided in the \f[CB]java.security\f[R] |
192 |
package supplies a number of well\-defined interfaces to access and |
|
193 |
modify the information in a keystore. |
|
194 |
You can have multiple different concrete implementations, where each |
|
195 |
implementation is for a particular type of keystore. |
|
21743 | 196 |
.PP |
55140 | 197 |
Currently, there are two command\-line tools that use keystore |
198 |
implementations (\f[CB]keytool\f[R] and \f[CB]jarsigner\f[R]). |
|
21743 | 199 |
.PP |
55140 | 200 |
The default keystore implementation is \f[CB]PKCS12\f[R]. |
201 |
This is a cross platform keystore based on the RSA PKCS12 Personal |
|
202 |
Information Exchange Syntax Standard. |
|
203 |
This standard is primarily meant for storing or transporting a |
|
204 |
user\[aq]s private keys, certificates, and miscellaneous secrets. |
|
205 |
There is another built\-in implementation, provided by Oracle. |
|
206 |
It implements the keystore as a file with a proprietary keystore type |
|
207 |
(format) named \f[CB]JKS\f[R]. |
|
208 |
It protects each private key with its individual password, and also |
|
209 |
protects the integrity of the entire keystore with a (possibly |
|
210 |
different) password. |
|
21743 | 211 |
.PP |
55140 | 212 |
Keystore implementations are provider\-based, which means the |
213 |
application interfaces supplied by the \f[CB]KeyStore\f[R] class are |
|
214 |
implemented in terms of a Service Provider Interface (SPI). |
|
215 |
There is a corresponding abstract \f[CB]KeystoreSpi\f[R] class, also in |
|
216 |
the \f[CB]java.security\ package\f[R], that defines the Service Provider |
|
217 |
Interface methods that providers must implement. |
|
218 |
The term provider refers to a package or a set of packages that supply a |
|
219 |
concrete implementation of a subset of services that can be accessed by |
|
220 |
the Java Security API. |
|
221 |
To provide a keystore implementation, clients must implement a provider |
|
222 |
and supply a \f[CB]KeystoreSpi\f[R] subclass implementation, as described |
|
223 |
in \f[B]How to Implement a Provider in the Java Cryptography |
|
224 |
Architecture\f[R] |
|
225 |
[https://www.oracle.com/pls/topic/lookup?ctx=en/java/javase/11/tools&id=JSSEC\-GUID\-2BCFDD85\-D533\-4E6C\-8CE9\-29990DEB0190]. |
|
21743 | 226 |
.PP |
55140 | 227 |
Applications can choose different types of keystore implementations from |
228 |
different providers, with the \f[CB]getInstance\f[R] factory method in the |
|
229 |
\f[CB]KeyStore\f[R] class. |
|
230 |
A keystore type defines the storage and data format of the keystore |
|
231 |
information and the algorithms used to protect private keys in the |
|
232 |
keystore and the integrity of the keystore itself. |
|
233 |
Keystore implementations of different types aren\[aq]t compatible. |
|
234 |
.PP |
|
235 |
The \f[CB]jarsigner\f[R] commands can read file\-based keystores from any |
|
236 |
location that can be specified using a URL. |
|
237 |
In addition, these commands can read non\-file\-based keystores such as |
|
238 |
those provided by MSCAPI on Windows and PKCS11 on all platforms. |
|
239 |
.PP |
|
240 |
For the \f[CB]jarsigner\f[R] and \f[CB]keytool\f[R] commands, you can |
|
241 |
specify a keystore type at the command line with the |
|
242 |
\f[CB]\-storetype\f[R] option. |
|
243 |
.PP |
|
244 |
If you don\[aq]t explicitly specify a keystore type, then the tools |
|
245 |
choose a keystore implementation based on the value of the |
|
246 |
\f[CB]keystore.type\f[R] property specified in the security properties |
|
247 |
file. |
|
248 |
The security properties file is called \f[CB]java.security\f[R], and it |
|
249 |
resides in the JDK security properties directory, |
|
250 |
\f[CB]java.home/conf/security\f[R]. |
|
21743 | 251 |
.PP |
55140 | 252 |
Each tool gets the \f[CB]keystore.type\f[R] value and then examines all |
253 |
the installed providers until it finds one that implements keystores of |
|
254 |
that type. |
|
255 |
It then uses the keystore implementation from that provider. |
|
21743 | 256 |
.PP |
55140 | 257 |
The \f[CB]KeyStore\f[R] class defines a static method named |
258 |
\f[CB]getDefaultType\f[R] that lets applications retrieve the value of the |
|
259 |
\f[CB]keystore.type\f[R] property. |
|
260 |
The following line of code creates an instance of the default keystore |
|
261 |
type as specified in the \f[CB]keystore.type\f[R] property: |
|
262 |
.RS |
|
21743 | 263 |
.PP |
55140 | 264 |
\f[CB]KeyStore\ keyStore\ =\ KeyStore.getInstance(KeyStore.getDefaultType());\f[R] |
265 |
.RE |
|
21743 | 266 |
.PP |
55140 | 267 |
The default keystore type is \f[CB]pkcs12\f[R], which is a cross platform |
268 |
keystore based on the RSA PKCS12 Personal Information Exchange Syntax |
|
269 |
Standard. |
|
270 |
This is specified by the following line in the security properties file: |
|
271 |
.RS |
|
21743 | 272 |
.PP |
55140 | 273 |
\f[CB]keystore.type=pkcs12\f[R] |
274 |
.RE |
|
275 |
.PP |
|
276 |
Case doesn\[aq]t matter in keystore type designations. |
|
277 |
For example, \f[CB]JKS\f[R] is the same as \f[CB]jks\f[R]. |
|
21743 | 278 |
.PP |
55140 | 279 |
To have the tools utilize a keystore implementation other than the |
280 |
default, you can change that line to specify a different keystore type. |
|
281 |
For example, if you want to use the Oracle\[aq]s \f[CB]jks\f[R] keystore |
|
282 |
implementation, then change the line to the following: |
|
283 |
.RS |
|
21743 | 284 |
.PP |
55140 | 285 |
\f[CB]keystore.type=jks\f[R] |
286 |
.RE |
|
287 |
.SH SUPPORTED ALGORITHMS |
|
21743 | 288 |
.PP |
55140 | 289 |
By default, the \f[CB]jarsigner\f[R] command signs a JAR file using one of |
290 |
the following algorithms files depending on the type and size of the |
|
291 |
private key: |
|
21743 | 292 |
.PP |
55140 | 293 |
.TS |
294 |
tab(@); |
|
295 |
l l l. |
|
296 |
T{ |
|
297 |
keyalg |
|
298 |
T}@T{ |
|
299 |
keysize |
|
300 |
T}@T{ |
|
301 |
default sigalg |
|
302 |
T} |
|
303 |
_ |
|
304 |
T{ |
|
305 |
DSA |
|
306 |
T}@T{ |
|
307 |
any size |
|
308 |
T}@T{ |
|
309 |
SHA256withDSA |
|
310 |
T} |
|
311 |
T{ |
|
312 |
RSA \ \ \ |
|
313 |
T}@T{ |
|
314 |
<= 3072 |
|
315 |
T}@T{ |
|
316 |
SHA256withRSA |
|
317 |
T} |
|
318 |
T{ |
|
319 |
T}@T{ |
|
320 |
<= 7680 |
|
321 |
T}@T{ |
|
322 |
SHA384withRSA |
|
323 |
T} |
|
324 |
T{ |
|
325 |
T}@T{ |
|
326 |
> 7680 |
|
327 |
T}@T{ |
|
328 |
SHA512withRSA |
|
329 |
T} |
|
330 |
T{ |
|
331 |
EC |
|
332 |
T}@T{ |
|
333 |
< 384 |
|
334 |
T}@T{ |
|
335 |
SHA256withECDSA |
|
336 |
T} |
|
337 |
T{ |
|
338 |
T}@T{ |
|
339 |
< 512 |
|
340 |
T}@T{ |
|
341 |
SHA384withECDSA |
|
342 |
T} |
|
343 |
T{ |
|
344 |
T}@T{ |
|
345 |
= 512 |
|
346 |
T}@T{ |
|
347 |
SHA512withECDSA |
|
348 |
T} |
|
349 |
.TE |
|
21743 | 350 |
.PP |
55140 | 351 |
These default signature algorithms can be overridden by using the |
352 |
\f[CB]\-sigalg\f[R] option. |
|
21743 | 353 |
.PP |
55140 | 354 |
Signed JAR file algorithms are checked against the |
355 |
\f[CB]jdk.jar.disabledAlgorithms\f[R] security property during |
|
356 |
verification (\f[CB]\-verify\f[R]). |
|
357 |
If the JAR file was signed with any algorithms that are disabled, it |
|
358 |
will be treated as an unsigned JAR file. |
|
359 |
For detailed verification output, include |
|
360 |
\f[CB]\-J\-Djava.security.debug=jar\f[R]. |
|
361 |
The default value for the \f[CB]jdk.jar.disabledAlgorithms\f[R] security |
|
362 |
property is defined in the \f[CB]java.security\f[R] file (located in the |
|
363 |
JRE\[aq]s \f[CB]$JAVA_HOME/conf/security\f[R] directory). |
|
364 |
.PP |
|
365 |
\f[B]Note:\f[R] |
|
366 |
.PP |
|
367 |
In order to improve out of the box security, default key size and |
|
368 |
signature algorithm names are periodically updated to stronger values |
|
369 |
with each release of the JDK. |
|
370 |
If interoperability with older releases of the JDK is important, please |
|
371 |
make sure the defaults are supported by those releases, or alternatively |
|
372 |
use the \f[CB]\-sigalg\f[R] option to override the default values at your |
|
373 |
own risk. |
|
374 |
.SH THE SIGNED JAR FILE |
|
21743 | 375 |
.PP |
55140 | 376 |
When the \f[CB]jarsigner\f[R] command is used to sign a JAR file, the |
377 |
output signed JAR file is exactly the same as the input JAR file, except |
|
378 |
that it has two additional files placed in the META\-INF directory: |
|
379 |
.IP \[bu] 2 |
|
380 |
A signature file with an \f[CB]\&.SF\f[R] extension |
|
381 |
.IP \[bu] 2 |
|
382 |
A signature block file with a \f[CB]\&.DSA\f[R], \f[CB]\&.RSA\f[R], or |
|
383 |
\f[CB]\&.EC\f[R] extension |
|
21743 | 384 |
.PP |
55140 | 385 |
The base file names for these two files come from the value of the |
386 |
\f[CB]\-sigfile\f[R] option. |
|
387 |
For example, when the option is \f[CB]\-sigfile\ MKSIGN\f[R], the files |
|
388 |
are named \f[CB]MKSIGN.SF\f[R] and \f[CB]MKSIGN.DSA\f[R] |
|
21743 | 389 |
.PP |
55140 | 390 |
If no \f[CB]\-sigfile\f[R] option appears on the command line, then the |
391 |
base file name for the \f[CB]\&.SF\f[R] and \f[CB]\&.DSA\f[R] files is the |
|
392 |
first 8 characters of the alias name specified on the command line, all |
|
393 |
converted to uppercase. |
|
394 |
If the alias name has fewer than 8 characters, then the full alias name |
|
395 |
is used. |
|
396 |
If the alias name contains any characters that aren\[aq]t allowed in a |
|
397 |
signature file name, then each such character is converted to an |
|
398 |
underscore (_) character in forming the file name. |
|
399 |
Valid characters include letters, digits, underscores, and hyphens. |
|
400 |
.SH SIGNATURE FILE |
|
21743 | 401 |
.PP |
55140 | 402 |
A signature file (\f[CB]\&.SF\f[R] file) looks similar to the manifest |
403 |
file that is always included in a JAR file when the \f[CB]jarsigner\f[R] |
|
404 |
command is used to sign the file. |
|
405 |
For each source file included in the JAR file, the \f[CB]\&.SF\f[R] file |
|
406 |
has two lines, such as in the manifest file, that list the following: |
|
407 |
.IP \[bu] 2 |
|
21743 | 408 |
File name |
55140 | 409 |
.IP \[bu] 2 |
21743 | 410 |
Name of the digest algorithm (SHA) |
55140 | 411 |
.IP \[bu] 2 |
21743 | 412 |
SHA digest value |
413 |
.PP |
|
55140 | 414 |
\f[B]Note:\f[R] |
415 |
.PP |
|
416 |
The name of the digest algorithm (SHA) and the SHA digest value are on |
|
417 |
the same line. |
|
418 |
.PP |
|
419 |
In the manifest file, the SHA digest value for each source file is the |
|
420 |
digest (hash) of the binary data in the source file. |
|
421 |
In the \f[CB]\&.SF\f[R] file, the digest value for a specified source file |
|
422 |
is the hash of the two lines in the manifest file for the source file. |
|
423 |
.PP |
|
424 |
The signature file, by default, includes a header with a hash of the |
|
425 |
whole manifest file. |
|
426 |
The header also contains a hash of the manifest header. |
|
427 |
The presence of the header enables verification optimization. |
|
428 |
See \f[B]JAR File Verification\f[R]. |
|
429 |
.SH SIGNATURE BLOCK FILE |
|
430 |
.PP |
|
431 |
The \f[CB]\&.SF\f[R] file is signed and the signature is placed in the |
|
432 |
signature block file. |
|
433 |
This file also contains, encoded inside it, the certificate or |
|
434 |
certificate chain from the keystore that authenticates the public key |
|
435 |
corresponding to the private key used for signing. |
|
436 |
The file has the extension \f[CB]\&.DSA\f[R], \f[CB]\&.RSA\f[R], or |
|
437 |
\f[CB]\&.EC\f[R], depending on the digest algorithm used. |
|
438 |
.SH SIGNATURE TIME STAMP |
|
439 |
.PP |
|
440 |
The \f[CB]jarsigner\f[R] command used with the following options generates |
|
441 |
and stores a signature time stamp when signing a JAR file: |
|
442 |
.IP \[bu] 2 |
|
443 |
\f[CB]\-tsa\f[R] \f[I]url\f[R] |
|
444 |
.IP \[bu] 2 |
|
445 |
\f[CB]\-tsacert\f[R] \f[I]alias\f[R] |
|
446 |
.IP \[bu] 2 |
|
447 |
\f[CB]\-tsapolicyid\f[R] \f[I]policyid\f[R] |
|
448 |
.IP \[bu] 2 |
|
449 |
\f[CB]\-tsadigestalg\f[R] \f[I]algorithm\f[R] |
|
450 |
.PP |
|
451 |
See \f[B]Options for jarsigner\f[R]. |
|
452 |
.SH JAR FILE VERIFICATION |
|
453 |
.PP |
|
454 |
A successful JAR file verification occurs when the signatures are valid, |
|
455 |
and none of the files that were in the JAR file when the signatures were |
|
456 |
generated have changed since then. |
|
457 |
JAR file verification involves the following steps: |
|
458 |
.IP "1." 3 |
|
459 |
Verify the signature of the \f[CB]\&.SF\f[R] file. |
|
460 |
.RS 4 |
|
21743 | 461 |
.PP |
55140 | 462 |
The verification ensures that the signature stored in each signature |
463 |
block (\f[CB]\&.DSA\f[R]) file was generated using the private key |
|
464 |
corresponding to the public key whose certificate (or certificate chain) |
|
465 |
also appears in the \f[CB]\&.DSA\f[R] file. |
|
466 |
It also ensures that the signature is a valid signature of the |
|
467 |
corresponding signature (\f[CB]\&.SF\f[R]) file, and thus the |
|
468 |
\f[CB]\&.SF\f[R] file wasn\[aq]t tampered with. |
|
469 |
.RE |
|
470 |
.IP "2." 3 |
|
471 |
Verify the digest listed in each entry in the \f[CB]\&.SF\f[R] file with |
|
472 |
each corresponding section in the manifest. |
|
473 |
.RS 4 |
|
474 |
.PP |
|
475 |
The \f[CB]\&.SF\f[R] file by default includes a header that contains a |
|
476 |
hash of the entire manifest file. |
|
477 |
When the header is present, the verification can check to see whether or |
|
478 |
not the hash in the header matches the hash of the manifest file. |
|
479 |
If there is a match, then verification proceeds to the next step. |
|
480 |
.PP |
|
481 |
If there is no match, then a less optimized verification is required to |
|
482 |
ensure that the hash in each source file information section in the |
|
483 |
\f[CB]\&.SF\f[R] file equals the hash of its corresponding section in the |
|
484 |
manifest file. |
|
485 |
See Signature File. |
|
486 |
.PP |
|
487 |
One reason the hash of the manifest file that is stored in the |
|
488 |
\f[CB]\&.SF\f[R] file header might not equal the hash of the current |
|
489 |
manifest file is that one or more files were added to the JAR file (with |
|
490 |
the \f[CB]jar\f[R] tool) after the signature and \f[CB]\&.SF\f[R] file were |
|
491 |
generated. |
|
492 |
When the \f[CB]jar\f[R] tool is used to add files, the manifest file is |
|
493 |
changed by adding sections to it for the new files, but the |
|
494 |
\f[CB]\&.SF\f[R] file isn\[aq]t changed. |
|
495 |
A verification is still considered successful when none of the files |
|
496 |
that were in the JAR file when the signature was generated have been |
|
497 |
changed since then. |
|
498 |
This happens when the hashes in the non\-header sections of the |
|
499 |
\f[CB]\&.SF\f[R] file equal the hashes of the corresponding sections in |
|
500 |
the manifest file. |
|
501 |
.RE |
|
502 |
.IP "3." 3 |
|
503 |
Read each file in the JAR file that has an entry in the \f[CB]\&.SF\f[R] |
|
504 |
file. |
|
505 |
While reading, compute the file\[aq]s digest and compare the result with |
|
506 |
the digest for this file in the manifest section. |
|
507 |
The digests should be the same or verification fails. |
|
508 |
.RS 4 |
|
21743 | 509 |
.PP |
55140 | 510 |
If any serious verification failures occur during the verification |
511 |
process, then the process is stopped and a security exception is thrown. |
|
512 |
The \f[CB]jarsigner\f[R] command catches and displays the exception. |
|
513 |
.RE |
|
514 |
.IP "4." 3 |
|
515 |
Check for disabled algorithm usage. |
|
516 |
See \f[B]Supported Algorithms\f[R]. |
|
517 |
.PP |
|
518 |
\f[B]Note:\f[R] |
|
519 |
.PP |
|
520 |
You should read any addition warnings (or errors if you specified the |
|
521 |
\f[CB]\-strict\f[R] option), as well as the content of the certificate (by |
|
522 |
specifying the \f[CB]\-verbose\f[R] and \f[CB]\-certs\f[R] options) to |
|
523 |
determine if the signature can be trusted. |
|
524 |
.SH MULTIPLE SIGNATURES FOR A JAR FILE |
|
525 |
.PP |
|
526 |
A JAR file can be signed by multiple people by running the |
|
527 |
\f[CB]jarsigner\f[R] command on the file multiple times and specifying the |
|
528 |
alias for a different person each time, as follows: |
|
529 |
.IP |
|
530 |
.nf |
|
531 |
\f[CB] |
|
532 |
jarsigner\ myBundle.jar\ susan |
|
533 |
jarsigner\ myBundle.jar\ kevin |
|
534 |
\f[R] |
|
535 |
.fi |
|
536 |
.PP |
|
537 |
When a JAR file is signed multiple times, there are multiple |
|
538 |
\f[CB]\&.SF\f[R] and \f[CB]\&.DSA\f[R] files in the resulting JAR file, one |
|
539 |
pair for each signature. |
|
540 |
In the previous example, the output JAR file includes files with the |
|
541 |
following names: |
|
542 |
.IP |
|
543 |
.nf |
|
544 |
\f[CB] |
|
545 |
SUSAN.SF |
|
546 |
SUSAN.DSA |
|
547 |
KEVIN.SF |
|
548 |
KEVIN.DSA |
|
549 |
\f[R] |
|
550 |
.fi |
|
551 |
.SH OPTIONS FOR JARSIGNER |
|
552 |
.PP |
|
553 |
The following sections describe the options for the \f[CB]jarsigner\f[R]. |
|
554 |
Be aware of the following standards: |
|
555 |
.IP \[bu] 2 |
|
556 |
All option names are preceded by a hyphen sign (\-). |
|
557 |
.IP \[bu] 2 |
|
558 |
The options can be provided in any order. |
|
559 |
.IP \[bu] 2 |
|
560 |
Items that are in italics or underlined (option values) represent the |
|
561 |
actual values that must be supplied. |
|
562 |
.IP \[bu] 2 |
|
563 |
The \f[CB]\-storepass\f[R], \f[CB]\-keypass\f[R], \f[CB]\-sigfile\f[R], |
|
564 |
\f[CB]\-sigalg\f[R], \f[CB]\-digestalg\f[R], \f[CB]\-signedjar\f[R], and |
|
565 |
TSA\-related options are only relevant when signing a JAR file; they |
|
566 |
aren\[aq]t relevant when verifying a signed JAR file. |
|
567 |
The \f[CB]\-keystore\f[R] option is relevant for signing and verifying a |
|
568 |
JAR file. |
|
569 |
In addition, aliases are specified when signing and verifying a JAR |
|
570 |
file. |
|
571 |
.TP |
|
572 |
.B \f[CB]\-keystore\f[R] \f[I]url\f[R] |
|
573 |
Specifies the URL that tells the keystore location. |
|
574 |
This defaults to the file \f[CB]\&.keystore\f[R] in the user\[aq]s home |
|
575 |
directory, as determined by the \f[CB]user.home\f[R] system property. |
|
576 |
.RS |
|
577 |
.PP |
|
578 |
A keystore is required when signing. |
|
579 |
You must explicitly specify a keystore when the default keystore |
|
580 |
doesn\[aq]t exist or if you want to use one other than the default. |
|
581 |
.PP |
|
582 |
A keystore isn\[aq]t required when verifying, but if one is specified or |
|
583 |
the default exists and the \f[CB]\-verbose\f[R] option was also specified, |
|
584 |
then additional information is output regarding whether or not any of |
|
585 |
the certificates used to verify the JAR file are contained in that |
|
586 |
keystore. |
|
587 |
.PP |
|
588 |
The \f[CB]\-keystore\f[R] argument can be a file name and path |
|
589 |
specification rather than a URL, in which case it is treated the same as |
|
590 |
a file: URL, for example, the following are equivalent: |
|
591 |
.IP \[bu] 2 |
|
592 |
\f[CB]\-keystore\f[R] \f[I]filePathAndName\f[R] |
|
593 |
.IP \[bu] 2 |
|
594 |
\f[CB]\-keystore\ file:\f[R]\f[I]filePathAndName\f[R] |
|
595 |
.PP |
|
596 |
If the Sun PKCS #11 provider was configured in the |
|
597 |
\f[CB]java.security\f[R] security properties file (located in the |
|
598 |
JRE\[aq]s \f[CB]$JAVA_HOME/conf/security\f[R] directory), then the |
|
599 |
\f[CB]keytool\f[R] and \f[CB]jarsigner\f[R] tools can operate on the PKCS |
|
600 |
#11 token by specifying these options: |
|
601 |
.RS |
|
602 |
.PP |
|
603 |
\f[CB]\-keystore\ NONE\ \-storetype\ PKCS11\f[R] |
|
604 |
.RE |
|
605 |
.PP |
|
606 |
For example, the following command lists the contents of the configured |
|
607 |
PKCS#11 token: |
|
608 |
.RS |
|
609 |
.PP |
|
610 |
\f[CB]keytool\ \-keystore\ NONE\ \-storetype\ PKCS11\ \-list\f[R] |
|
611 |
.RE |
|
612 |
.RE |
|
613 |
.TP |
|
614 |
.B \f[CB]\-storepass\f[R] [\f[CB]:env\f[R] | \f[CB]:file\f[R]] \f[I]argument\f[R] |
|
615 |
Specifies the password that is required to access the keystore. |
|
616 |
This is only needed when signing (not verifying) a JAR file. |
|
617 |
In that case, if a \f[CB]\-storepass\f[R] option isn\[aq]t provided at the |
|
618 |
command line, then the user is prompted for the password. |
|
619 |
.RS |
|
21743 | 620 |
.PP |
55140 | 621 |
If the modifier \f[CB]env\f[R] or \f[CB]file\f[R] isn\[aq]t specified, then |
622 |
the password has the value \f[CB]argument\f[R]. |
|
623 |
Otherwise, the password is retrieved as follows: |
|
624 |
.IP \[bu] 2 |
|
625 |
\f[CB]env\f[R]: Retrieve the password from the environment variable named |
|
626 |
\f[I]argument\f[R]. |
|
627 |
.IP \[bu] 2 |
|
628 |
\f[CB]file\f[R]: Retrieve the password from the file named |
|
629 |
\f[I]argument\f[R]. |
|
630 |
.PP |
|
631 |
\f[B]Note:\f[R] |
|
632 |
.PP |
|
633 |
The password shouldn\[aq]t be specified on the command line or in a |
|
634 |
script unless it is for testing purposes, or you are on a secure system. |
|
635 |
.RE |
|
636 |
.TP |
|
637 |
.B \f[CB]\-storetype\f[R] \f[I]storetype\f[R] |
|
638 |
Specifies the type of keystore to be instantiated. |
|
639 |
The default keystore type is the one that is specified as the value of |
|
640 |
the \f[CB]keystore.type\f[R] property in the security properties file, |
|
641 |
which is returned by the static \f[CB]getDefaultType\f[R] method in |
|
642 |
\f[CB]java.security.KeyStore\f[R]. |
|
643 |
.RS |
|
644 |
.PP |
|
645 |
The PIN for a PKCS #11 token can also be specified with the |
|
646 |
\f[CB]\-storepass\f[R] option. |
|
647 |
If none is specified, then the \f[CB]keytool\f[R] and \f[CB]jarsigner\f[R] |
|
648 |
commands prompt for the token PIN. |
|
649 |
If the token has a protected authentication path (such as a dedicated |
|
650 |
PIN\-pad or a biometric reader), then the \f[CB]\-protected\f[R] option |
|
651 |
must be specified and no password options can be specified. |
|
652 |
.RE |
|
653 |
.TP |
|
654 |
.B \f[CB]\-keypass\f[R] [\f[CB]:env\f[R] | \f[CB]:file\f[R]] \f[I]argument\f[R] \f[CB]\-certchain\f[R] \f[I]file\f[R] |
|
655 |
Specifies the password used to protect the private key of the keystore |
|
656 |
entry addressed by the alias specified on the command line. |
|
657 |
The password is required when using \f[CB]jarsigner\f[R] to sign a JAR |
|
658 |
file. |
|
659 |
If no password is provided on the command line, and the required |
|
660 |
password is different from the store password, then the user is prompted |
|
661 |
for it. |
|
662 |
.RS |
|
663 |
.PP |
|
664 |
If the modifier \f[CB]env\f[R] or \f[CB]file\f[R] isn\[aq]t specified, then |
|
665 |
the password has the value \f[CB]argument\f[R]. |
|
666 |
Otherwise, the password is retrieved as follows: |
|
667 |
.IP \[bu] 2 |
|
668 |
\f[CB]env\f[R]: Retrieve the password from the environment variable named |
|
669 |
\f[I]argument\f[R]. |
|
670 |
.IP \[bu] 2 |
|
671 |
\f[CB]file\f[R]: Retrieve the password from the file named |
|
672 |
\f[I]argument\f[R]. |
|
673 |
.PP |
|
674 |
\f[B]Note:\f[R] |
|
675 |
.PP |
|
676 |
The password shouldn\[aq]t be specified on the command line or in a |
|
677 |
script unless it is for testing purposes, or you are on a secure system. |
|
678 |
.RE |
|
679 |
.TP |
|
680 |
.B \f[CB]\-certchain\f[R] \f[I]file\f[R] |
|
681 |
Specifies the certificate chain to be used when the certificate chain |
|
682 |
associated with the private key of the keystore entry that is addressed |
|
683 |
by the alias specified on the command line isn\[aq]t complete. |
|
684 |
This can happen when the keystore is located on a hardware token where |
|
685 |
there isn\[aq]t enough capacity to hold a complete certificate chain. |
|
686 |
The file can be a sequence of concatenated X.509 certificates, or a |
|
687 |
single PKCS#7 formatted data block, either in binary encoding format or |
|
688 |
in printable encoding format (also known as Base64 encoding) as defined |
|
689 |
by \f[B]Internet RFC 1421 Certificate Encoding Standard\f[R] |
|
690 |
[http://tools.ietf.org/html/rfc1421]. |
|
691 |
.RS |
|
692 |
.RE |
|
693 |
.TP |
|
694 |
.B \f[CB]\-sigfile\f[R] \f[I]file\f[R] |
|
695 |
Specifies the base file name to be used for the generated \f[CB]\&.SF\f[R] |
|
696 |
and \f[CB]\&.DSA\f[R] files. |
|
697 |
For example, if file is \f[CB]DUKESIGN\f[R], then the generated |
|
698 |
\f[CB]\&.SF\f[R] and \f[CB]\&.DSA\f[R] files are named \f[CB]DUKESIGN.SF\f[R] |
|
699 |
and \f[CB]DUKESIGN.DSA\f[R], and placed in the \f[CB]META\-INF\f[R] |
|
700 |
directory of the signed JAR file. |
|
701 |
.RS |
|
702 |
.PP |
|
703 |
The characters in the file must come from the set |
|
704 |
\f[CB]a\-zA\-Z0\-9_\-\f[R]. |
|
705 |
Only letters, numbers, underscore, and hyphen characters are allowed. |
|
706 |
All lowercase characters are converted to uppercase for the |
|
707 |
\f[CB]\&.SF\f[R] and \f[CB]\&.DSA\f[R] file names. |
|
708 |
.PP |
|
709 |
If no \f[CB]\-sigfile\f[R] option appears on the command line, then the |
|
710 |
base file name for the \f[CB]\&.SF\f[R] and \f[CB]\&.DSA\f[R] files is the |
|
711 |
first 8 characters of the alias name specified on the command line, all |
|
712 |
converted to upper case. |
|
713 |
If the alias name has fewer than 8 characters, then the full alias name |
|
714 |
is used. |
|
715 |
If the alias name contains any characters that aren\[aq]t valid in a |
|
716 |
signature file name, then each such character is converted to an |
|
717 |
underscore (_) character to form the file name. |
|
718 |
.RE |
|
719 |
.TP |
|
720 |
.B \f[CB]\-signedjar\f[R] \f[I]file\f[R] |
|
721 |
Specifies the name of signed JAR file. |
|
722 |
.RS |
|
723 |
.RE |
|
21743 | 724 |
.TP |
55140 | 725 |
.B \f[CB]\-digestalg\f[R] \f[I]algorithm\f[R] |
726 |
Specifies the name of the message digest algorithm to use when digesting |
|
727 |
the entries of a JAR file. |
|
728 |
.RS |
|
729 |
.PP |
|
730 |
For a list of standard message digest algorithm names, see Java Security |
|
731 |
Standard Algorithm Names. |
|
732 |
.PP |
|
733 |
If this option isn\[aq]t specified, then \f[CB]SHA256\f[R] is used. |
|
734 |
There must either be a statically installed provider supplying an |
|
735 |
implementation of the specified algorithm or the user must specify one |
|
736 |
with the \f[CB]\-addprovider\f[R] or \f[CB]\-providerClass\f[R] options; |
|
737 |
otherwise, the command will not succeed. |
|
738 |
.RE |
|
739 |
.TP |
|
740 |
.B \f[CB]\-sigalg\f[R] \f[I]algorithm\f[R] |
|
741 |
Specifies the name of the signature algorithm to use to sign the JAR |
|
742 |
file. |
|
743 |
.RS |
|
744 |
.PP |
|
745 |
This algorithm must be compatible with the private key used to sign the |
|
746 |
JAR file. |
|
747 |
If this option isn\[aq]t specified, then use a default algorithm |
|
748 |
matching the private key as described in the \f[B]Supported |
|
749 |
Algorithms\f[R] section. |
|
750 |
There must either be a statically installed provider supplying an |
|
751 |
implementation of the specified algorithm or you must specify one with |
|
752 |
the \f[CB]\-addprovider\f[R] or \f[CB]\-providerClass\f[R] option; |
|
753 |
otherwise, the command doesn\[aq]t succeed. |
|
754 |
.PP |
|
755 |
For a list of standard message digest algorithm names, see Java Security |
|
756 |
Standard Algorithm Names. |
|
757 |
.RE |
|
758 |
.TP |
|
759 |
.B \f[CB]\-verify\f[R] |
|
760 |
Verifies a signed JAR file. |
|
761 |
.RS |
|
762 |
.RE |
|
763 |
.TP |
|
764 |
.B \f[CB]\-verbose\f[R][\f[CB]:\f[R]\f[I]suboptions\f[R]] |
|
765 |
When the \f[CB]\-verbose\f[R] option appears on the command line, it |
|
766 |
indicates that the \f[CB]jarsigner\f[R] use the verbose mode when signing |
|
767 |
or verifying with the suboptions determining how much information is |
|
768 |
shown. |
|
769 |
This causes the , which causes \f[CB]jarsigner\f[R] to output extra |
|
770 |
information about the progress of the JAR signing or verification. |
|
771 |
The \f[I]suboptions\f[R] can be \f[CB]all\f[R], \f[CB]grouped\f[R], or |
|
772 |
\f[CB]summary\f[R]. |
|
773 |
.RS |
|
774 |
.PP |
|
775 |
If the \f[CB]\-certs\f[R] option is also specified, then the default mode |
|
776 |
(or suboption \f[CB]all\f[R]) displays each entry as it is being |
|
777 |
processed, and after that, the certificate information for each signer |
|
778 |
of the JAR file. |
|
779 |
.PP |
|
780 |
If the \f[CB]\-certs\f[R] and the \f[CB]\-verbose:grouped\f[R] suboptions |
|
781 |
are specified, then entries with the same signer info are grouped and |
|
782 |
displayed together with their certificate information. |
|
783 |
.PP |
|
784 |
If \f[CB]\-certs\f[R] and the \f[CB]\-verbose:summary\f[R] suboptions are |
|
785 |
specified, then entries with the same signer information are grouped and |
|
786 |
displayed together with their certificate information. |
|
787 |
.PP |
|
788 |
Details about each entry are summarized and displayed as \f[I]one entry |
|
789 |
(and more)\f[R]. |
|
790 |
See \f[B]Example of Verifying a Signed JAR File\f[R] and \f[B]Example of |
|
791 |
Verification with Certificate Information\f[R]. |
|
792 |
.RE |
|
793 |
.TP |
|
794 |
.B \f[CB]\-certs\f[R] |
|
795 |
If the \f[CB]\-certs\f[R] option appears on the command line with the |
|
796 |
\f[CB]\-verify\f[R] and \f[CB]\-verbose\f[R] options, then the output |
|
797 |
includes certificate information for each signer of the JAR file. |
|
798 |
This information includes the name of the type of certificate (stored in |
|
799 |
the \f[CB]\&.DSA\f[R] file) that certifies the signer\[aq]s public key, |
|
800 |
and if the certificate is an X.509 certificate (an instance of the |
|
801 |
\f[CB]java.security.cert.X509Certificate\f[R]), then the distinguished |
|
802 |
name of the signer. |
|
803 |
.RS |
|
804 |
.PP |
|
805 |
The keystore is also examined. |
|
806 |
If no keystore value is specified on the command line, then the default |
|
807 |
keystore file (if any) is checked. |
|
808 |
If the public key certificate for a signer matches an entry in the |
|
809 |
keystore, then the alias name for the keystore entry for that signer is |
|
810 |
displayed in parentheses. |
|
811 |
.RE |
|
812 |
.TP |
|
813 |
.B \f[CB]\-tsa\f[R] \f[I]url\f[R] |
|
814 |
If \f[CB]\-tsa\ http://example.tsa.url\f[R] appears on the command line |
|
815 |
when signing a JAR file then a time stamp is generated for the |
|
816 |
signature. |
|
817 |
The URL, \f[CB]http://example.tsa.url\f[R], identifies the location of the |
|
818 |
Time Stamping Authority (TSA) and overrides any URL found with the |
|
819 |
\f[CB]\-tsacert\f[R] option. |
|
820 |
The \f[CB]\-tsa\f[R] option doesn\[aq]t require the TSA public key |
|
821 |
certificate to be present in the keystore. |
|
822 |
.RS |
|
823 |
.PP |
|
824 |
To generate the time stamp, \f[CB]jarsigner\f[R] communicates with the TSA |
|
825 |
with the Time\-Stamp Protocol (TSP) defined in RFC 3161. |
|
826 |
When successful, the time stamp token returned by the TSA is stored with |
|
827 |
the signature in the signature block file. |
|
828 |
.RE |
|
829 |
.TP |
|
830 |
.B \f[CB]\-tsacert\f[R] \f[I]alias\f[R] |
|
831 |
When \f[CB]\-tsacert\f[R] \f[I]alias\f[R] appears on the command line when |
|
832 |
signing a JAR file, a time stamp is generated for the signature. |
|
833 |
The alias identifies the TSA public key certificate in the keystore that |
|
834 |
is in effect. |
|
835 |
The entry\[aq]s certificate is examined for a Subject Information Access |
|
836 |
extension that contains a URL identifying the location of the TSA. |
|
837 |
.RS |
|
838 |
.PP |
|
839 |
The TSA public key certificate must be present in the keystore when |
|
840 |
using the \f[CB]\-tsacert\f[R] option. |
|
841 |
.RE |
|
21743 | 842 |
.TP |
55140 | 843 |
.B \f[CB]\-tsapolicyid\f[R] \f[I]policyid\f[R] |
844 |
Specifies the object identifier (OID) that identifies the policy ID to |
|
845 |
be sent to the TSA server. |
|
846 |
If this option isn\[aq]t specified, no policy ID is sent and the TSA |
|
847 |
server will choose a default policy ID. |
|
848 |
.RS |
|
849 |
.PP |
|
850 |
Object identifiers are defined by X.696, which is an ITU |
|
851 |
Telecommunication Standardization Sector (ITU\-T) standard. |
|
852 |
These identifiers are typically period\-separated sets of non\-negative |
|
853 |
digits like \f[CB]1.2.3.4\f[R], for example. |
|
854 |
.RE |
|
855 |
.TP |
|
856 |
.B \f[CB]\-tsadigestalg\f[R] \f[I]algorithm\f[R] |
|
857 |
Specifies the message digest algorithm that is used to generate the |
|
858 |
message imprint to be sent to the TSA server. |
|
859 |
If this option isn\[aq]t specified, SHA\-256 will be used. |
|
860 |
.RS |
|
861 |
.PP |
|
862 |
See \f[B]Supported Algorithms\f[R]. |
|
863 |
.PP |
|
864 |
For a list of standard message digest algorithm names, see Java Security |
|
865 |
Standard Algorithm Names. |
|
866 |
.RE |
|
21743 | 867 |
.TP |
55140 | 868 |
.B \f[CB]\-internalsf\f[R] |
869 |
In the past, the \f[CB]\&.DSA\f[R] (signature block) file generated when a |
|
870 |
JAR file was signed included a complete encoded copy of the |
|
871 |
\f[CB]\&.SF\f[R] file (signature file) also generated. |
|
872 |
This behavior has been changed. |
|
873 |
To reduce the overall size of the output JAR file, the \f[CB]\&.DSA\f[R] |
|
874 |
file by default doesn\[aq]t contain a copy of the \f[CB]\&.SF\f[R] file |
|
875 |
anymore. |
|
876 |
If \f[CB]\-internalsf\f[R] appears on the command line, then the old |
|
877 |
behavior is utilized. |
|
878 |
This option is useful for testing. |
|
879 |
In practice, don\[aq]t use the \f[CB]\-internalsf\f[R] option because it |
|
880 |
incurs higher overhead. |
|
881 |
.RS |
|
882 |
.RE |
|
883 |
.TP |
|
884 |
.B \f[CB]\-sectionsonly\f[R] |
|
885 |
If the \f[CB]\-sectionsonly\f[R] option appears on the command line, then |
|
886 |
the \f[CB]\&.SF\f[R] file (signature file) generated when a JAR file is |
|
887 |
signed doesn\[aq]t include a header that contains a hash of the whole |
|
888 |
manifest file. |
|
889 |
It contains only the information and hashes related to each individual |
|
890 |
source file included in the JAR file. |
|
891 |
See Signature File. |
|
892 |
.RS |
|
893 |
.PP |
|
894 |
By default, this header is added, as an optimization. |
|
895 |
When the header is present, whenever the JAR file is verified, the |
|
896 |
verification can first check to see whether the hash in the header |
|
897 |
matches the hash of the whole manifest file. |
|
898 |
When there is a match, verification proceeds to the next step. |
|
899 |
When there is no match, it is necessary to do a less optimized |
|
900 |
verification that the hash in each source file information section in |
|
901 |
the \f[CB]\&.SF\f[R] file equals the hash of its corresponding section in |
|
902 |
the manifest file. |
|
903 |
See \f[B]JAR File Verification\f[R]. |
|
904 |
.PP |
|
905 |
The \f[CB]\-sectionsonly\f[R] option is primarily used for testing. |
|
906 |
It shouldn\[aq]t be used other than for testing because using it incurs |
|
907 |
higher overhead. |
|
908 |
.RE |
|
909 |
.TP |
|
910 |
.B \f[CB]\-protected\f[R] |
|
911 |
Values can be either \f[CB]true\f[R] or \f[CB]false\f[R]. |
|
912 |
Specify \f[CB]true\f[R] when a password must be specified through a |
|
913 |
protected authentication path such as a dedicated PIN reader. |
|
914 |
.RS |
|
915 |
.RE |
|
21743 | 916 |
.TP |
55140 | 917 |
.B \f[CB]\-providerName\f[R] \f[I]providerName\f[R] |
918 |
If more than one provider was configured in the \f[CB]java.security\f[R] |
|
919 |
security properties file, then you can use the \f[CB]\-providerName\f[R] |
|
920 |
option to target a specific provider instance. |
|
921 |
The argument to this option is the name of the provider. |
|
922 |
.RS |
|
923 |
.PP |
|
924 |
For the Oracle PKCS #11 provider, \f[I]providerName\f[R] is of the form |
|
925 |
\f[CB]SunPKCS11\-\f[R]\f[I]TokenName\f[R], where \f[I]TokenName\f[R] is the |
|
926 |
name suffix that the provider instance has been configured with, as |
|
927 |
detailed in the configuration attributes table. |
|
928 |
For example, the following command lists the contents of the |
|
929 |
\f[CB]PKCS\ #11\f[R] keystore provider instance with name suffix |
|
930 |
\f[CB]SmartCard\f[R]: |
|
931 |
.RS |
|
932 |
.PP |
|
933 |
\f[CB]jarsigner\ \-keystore\ NONE\ \-storetype\ PKCS11\ \-providerName\ SunPKCS11\-SmartCard\ \-list\f[R] |
|
934 |
.RE |
|
935 |
.RE |
|
936 |
.TP |
|
937 |
.B \f[CB]\-addprovider\f[R] \f[I]name\f[R] [\f[CB]\-providerArg\f[R] \f[I]arg\f[R]] |
|
938 |
Adds a security provider by name (such as SunPKCS11) and an optional |
|
939 |
configure argument. |
|
940 |
The value of the security provider is the name of a security provider |
|
941 |
that is defined in a module. |
|
942 |
.RS |
|
943 |
.PP |
|
944 |
Used with the \f[CB]\-providerArg\ ConfigFilePath\f[R] option, the |
|
945 |
\f[CB]keytool\f[R] and \f[CB]jarsigner\f[R] tools install the provider |
|
946 |
dynamically and use \f[CB]ConfigFilePath\f[R] for the path to the token |
|
947 |
configuration file. |
|
948 |
The following example shows a command to list a \f[CB]PKCS\ #11\f[R] |
|
949 |
keystore when the Oracle PKCS #11 provider wasn\[aq]t configured in the |
|
950 |
security properties file. |
|
951 |
.RS |
|
952 |
.PP |
|
953 |
\f[CB]jarsigner\ \-keystore\ NONE\ \-storetype\ PKCS11\ \-addprovider\ SunPKCS11\ \-providerArg\ /mydir1/mydir2/token.config\f[R] |
|
954 |
.RE |
|
955 |
.RE |
|
21743 | 956 |
.TP |
55140 | 957 |
.B \f[CB]\-providerClass\f[R] \f[I]provider\-class\-name\f[R] [\f[CB]\-providerArg\f[R] \f[I]arg\f[R]] |
958 |
Used to specify the name of cryptographic service provider\[aq]s master |
|
959 |
class file when the service provider isn\[aq]t listed in the |
|
960 |
\f[CB]java.security\f[R] security properties file. |
|
961 |
Adds a security provider by fully\-qualified class name and an optional |
|
962 |
configure argument. |
|
963 |
.RS |
|
964 |
.PP |
|
965 |
\f[B]Note:\f[R] |
|
966 |
.PP |
|
967 |
The preferred way to load PKCS11 is by using modules. |
|
968 |
See \f[CB]\-addprovider\f[R]. |
|
969 |
.RE |
|
970 |
.TP |
|
971 |
.B \f[CB]\-J\f[R]\f[I]javaoption\f[R] |
|
972 |
Passes through the specified \f[I]javaoption\f[R] string directly to the |
|
973 |
Java interpreter. |
|
974 |
The \f[CB]jarsigner\f[R] command is a wrapper around the interpreter. |
|
975 |
This option shouldn\[aq]t contain any spaces. |
|
976 |
It is useful for adjusting the execution environment or memory usage. |
|
977 |
For a list of possible interpreter options, type \f[CB]java\ \-h\f[R] or |
|
978 |
\f[CB]java\ \-X\f[R] at the command line. |
|
979 |
.RS |
|
980 |
.RE |
|
21743 | 981 |
.TP |
55140 | 982 |
.B \f[CB]\-strict\f[R] |
983 |
During the signing or verifying process, the command may issue warning |
|
984 |
messages. |
|
985 |
If you specify this option, the exit code of the tool reflects the |
|
986 |
severe warning messages that this command found. |
|
987 |
See \f[B]Errors and Warnings\f[R]. |
|
988 |
.RS |
|
989 |
.RE |
|
21743 | 990 |
.TP |
55140 | 991 |
.B \f[CB]\-conf\f[R] \f[I]url\f[R] |
992 |
Specifies a pre\-configured options file. |
|
993 |
Read the \f[B]keytool documentation\f[R] for details. |
|
994 |
The property keys supported are "jarsigner.all" for all actions, |
|
995 |
"jarsigner.sign" for signing, and "jarsigner.verify" for verification. |
|
996 |
\f[CB]jarsigner\f[R] arguments including the JAR file name and alias |
|
997 |
name(s) cannot be set in this file. |
|
998 |
.RS |
|
999 |
.RE |
|
1000 |
.SH DEPRECATED OPTIONS |
|
1001 |
.PP |
|
1002 |
The following \f[CB]jarsigner\f[R] options are deprecated as of JDK 9 and |
|
1003 |
might be removed in a future JDK release. |
|
21743 | 1004 |
.TP |
55140 | 1005 |
.B \f[CB]\-altsigner\f[R] \f[I]class\f[R] |
1006 |
This option specifies an alternative signing mechanism. |
|
1007 |
The fully qualified class name identifies a class file that extends the |
|
1008 |
\f[CB]com.sun.jarsigner.ContentSigner\f[R] abstract class. |
|
1009 |
The path to this class file is defined by the \f[CB]\-altsignerpath\f[R] |
|
1010 |
option. |
|
1011 |
If the \f[CB]\-altsigner\f[R] option is used, then the \f[CB]jarsigner\f[R] |
|
1012 |
command uses the signing mechanism provided by the specified class. |
|
1013 |
Otherwise, the \f[CB]jarsigner\f[R] command uses its default signing |
|
1014 |
mechanism. |
|
1015 |
.RS |
|
1016 |
.PP |
|
1017 |
For example, to use the signing mechanism provided by a class named |
|
1018 |
\f[CB]com.sun.sun.jarsigner.AuthSigner\f[R], use the \f[CB]jarsigner\f[R] |
|
1019 |
option \f[CB]\-altsigner\ com.sun.jarsigner.AuthSigner\f[R]. |
|
1020 |
.RE |
|
21743 | 1021 |
.TP |
55140 | 1022 |
.B \f[CB]\-altsignerpath\f[R] \f[I]classpathlist\f[R] |
1023 |
Specifies the path to the class file and any JAR file it depends on. |
|
1024 |
The class file name is specified with the \f[CB]\-altsigner\f[R] option. |
|
1025 |
If the class file is in a JAR file, then this option specifies the path |
|
1026 |
to that JAR file. |
|
1027 |
.RS |
|
1028 |
.PP |
|
1029 |
An absolute path or a path relative to the current directory can be |
|
1030 |
specified. |
|
1031 |
If \f[I]classpathlist\f[R] contains multiple paths or JAR files, then |
|
1032 |
they should be separated with a: |
|
1033 |
.IP \[bu] 2 |
|
1034 |
Colon (\f[CB]:\f[R]) on Oracle Solaris, Linux, and macOS |
|
1035 |
.IP \[bu] 2 |
|
1036 |
Semicolon (\f[CB];\f[R]) on Windows |
|
1037 |
.PP |
|
1038 |
This option isn\[aq]t necessary when the class is already in the search |
|
1039 |
path. |
|
1040 |
.PP |
|
1041 |
The following example shows how to specify the path to a JAR file that |
|
1042 |
contains the class file. |
|
1043 |
The JAR file name is included. |
|
1044 |
.RS |
|
1045 |
.PP |
|
1046 |
\f[CB]\-altsignerpath\ /home/user/lib/authsigner.jar\f[R] |
|
1047 |
.RE |
|
1048 |
.PP |
|
1049 |
The following example shows how to specify the path to the JAR file that |
|
1050 |
contains the class file. |
|
1051 |
The JAR file name is omitted. |
|
1052 |
.RS |
|
1053 |
.PP |
|
1054 |
\f[CB]\-altsignerpath\ /home/user/classes/com/sun/tools/jarsigner/\f[R] |
|
1055 |
.RE |
|
1056 |
.RE |
|
1057 |
.SH ERRORS AND WARNINGS |
|
1058 |
.PP |
|
1059 |
During the signing or verifying process, the \f[CB]jarsigner\f[R] command |
|
1060 |
may issue various errors or warnings. |
|
1061 |
.PP |
|
1062 |
If there is a failure, the \f[CB]jarsigner\f[R] command exits with code 1. |
|
1063 |
If there is no failure, but there are one or more severe warnings, the |
|
1064 |
\f[CB]jarsigner\f[R] command exits with code 0 when the \f[CB]\-strict\f[R] |
|
1065 |
option is \f[B]not\f[R] specified, or exits with the OR\-value of the |
|
1066 |
warning codes when the \f[CB]\-strict\f[R] is specified. |
|
1067 |
If there is only informational warnings or no warning at all, the |
|
1068 |
command always exits with code 0. |
|
1069 |
.PP |
|
1070 |
For example, if a certificate used to sign an entry is expired and has a |
|
1071 |
KeyUsage extension that doesn\[aq]t allow it to sign a file, the |
|
1072 |
\f[CB]jarsigner\f[R] command exits with code 12 (=4+8) when the |
|
1073 |
\f[CB]\-strict\f[R] option is specified. |
|
1074 |
.PP |
|
1075 |
\f[B]Note:\f[R] Exit codes are reused because only the values from 0 to |
|
1076 |
255 are legal on Oracle Solaris, Linux, and OS X. |
|
1077 |
.PP |
|
1078 |
The following sections describes the names, codes, and descriptions of |
|
1079 |
the errors and warnings that the \f[CB]jarsigner\f[R] command can issue. |
|
1080 |
.SH FAILURE |
|
1081 |
.PP |
|
1082 |
Reasons why the \f[CB]jarsigner\f[R] command fails include (but aren\[aq]t |
|
1083 |
limited to) a command line parsing error, the inability to find a |
|
1084 |
keypair to sign the JAR file, or the verification of a signed JAR fails. |
|
21743 | 1085 |
.TP |
55140 | 1086 |
.B failure |
1087 |
Code 1. |
|
1088 |
The signing or verifying fails. |
|
1089 |
.RS |
|
1090 |
.RE |
|
1091 |
.SH SEVERE WARNINGS |
|
1092 |
.PP |
|
1093 |
\f[B]Note:\f[R] |
|
1094 |
.PP |
|
1095 |
Severe warnings are reported as errors if you specify the |
|
1096 |
\f[CB]\-strict\f[R] option. |
|
1097 |
.PP |
|
1098 |
Reasons why the \f[CB]jarsigner\f[R] command issues a severe warning |
|
1099 |
include the certificate used to sign the JAR file has an error or the |
|
1100 |
signed JAR file has other problems. |
|
1101 |
.TP |
|
1102 |
.B hasExpiredCert |
|
1103 |
Code 4. |
|
1104 |
This JAR contains entries whose signer certificate has expired. |
|
1105 |
.RS |
|
1106 |
.RE |
|
1107 |
.TP |
|
1108 |
.B hasExpiredTsaCert |
|
1109 |
Code 4. |
|
1110 |
The timestamp has expired. |
|
1111 |
.RS |
|
1112 |
.RE |
|
21743 | 1113 |
.TP |
55140 | 1114 |
.B notYetValidCert |
1115 |
Code 4. |
|
1116 |
This JAR contains entries whose signer certificate isn\[aq]t yet valid. |
|
1117 |
.RS |
|
1118 |
.RE |
|
1119 |
.TP |
|
1120 |
.B chainNotValidated |
|
1121 |
Code 4. |
|
1122 |
This JAR contains entries whose certificate chain isn\[aq]t validated. |
|
1123 |
.RS |
|
1124 |
.RE |
|
1125 |
.TP |
|
1126 |
.B tsaChainNotValidated |
|
1127 |
Code 64. |
|
1128 |
The timestamp is invalid. |
|
1129 |
.RS |
|
1130 |
.RE |
|
1131 |
.TP |
|
1132 |
.B signerSelfSigned |
|
1133 |
Code 4. |
|
1134 |
This JAR contains entries whose signer certificate is self signed. |
|
1135 |
.RS |
|
1136 |
.RE |
|
1137 |
.TP |
|
1138 |
.B weakAlg |
|
1139 |
Code 4. |
|
1140 |
An algorithm specified on the command line is considered a security |
|
1141 |
risk. |
|
1142 |
.RS |
|
1143 |
.RE |
|
21743 | 1144 |
.TP |
55140 | 1145 |
.B badKeyUsage |
1146 |
Code 8. |
|
1147 |
This JAR contains entries whose signer certificate\[aq]s KeyUsage |
|
1148 |
extension doesn\[aq]t allow code signing. |
|
1149 |
.RS |
|
1150 |
.RE |
|
1151 |
.TP |
|
1152 |
.B badExtendedKeyUsage |
|
1153 |
Code 8. |
|
1154 |
This JAR contains entries whose signer certificate\[aq]s |
|
1155 |
ExtendedKeyUsage extension doesn\[aq]t allow code signing. |
|
1156 |
.RS |
|
1157 |
.RE |
|
1158 |
.TP |
|
1159 |
.B badNetscapeCertType |
|
1160 |
Code 8. |
|
1161 |
This JAR contains entries whose signer certificate\[aq]s |
|
1162 |
NetscapeCertType extension doesn\[aq]t allow code signing. |
|
1163 |
.RS |
|
1164 |
.RE |
|
1165 |
.TP |
|
1166 |
.B hasUnsignedEntry |
|
1167 |
Code 16. |
|
1168 |
This JAR contains unsigned entries which haven\[aq]t been |
|
1169 |
integrity\-checked. |
|
1170 |
.RS |
|
1171 |
.RE |
|
1172 |
.TP |
|
1173 |
.B notSignedByAlias |
|
1174 |
Code 32. |
|
1175 |
This JAR contains signed entries which aren\[aq]t signed by the |
|
1176 |
specified alias(es). |
|
1177 |
.RS |
|
1178 |
.RE |
|
1179 |
.TP |
|
1180 |
.B aliasNotInStore |
|
1181 |
Code 32. |
|
1182 |
This JAR contains signed entries that aren\[aq]t signed by alias in this |
|
1183 |
keystore. |
|
1184 |
.RS |
|
1185 |
.RE |
|
1186 |
.TP |
|
1187 |
.B tsaChainNotValidated |
|
1188 |
Code 64. |
|
1189 |
This JAR contains entries whose TSA certificate chain is invalid. |
|
1190 |
.RS |
|
1191 |
.RE |
|
1192 |
.SH INFORMATIONAL WARNINGS |
|
1193 |
.PP |
|
1194 |
Informational warnings include those that aren\[aq]t errors but regarded |
|
1195 |
as bad practice. |
|
1196 |
They don\[aq]t have a code. |
|
1197 |
.TP |
|
1198 |
.B hasExpiringCert |
|
1199 |
This JAR contains entries whose signer certificate expires within six |
|
1200 |
months. |
|
1201 |
.RS |
|
1202 |
.RE |
|
1203 |
.TP |
|
1204 |
.B hasExpiringTsaCert |
|
1205 |
The timestamp will expire within one year on \f[CB]YYYY\-MM\-DD\f[R]. |
|
1206 |
.RS |
|
1207 |
.RE |
|
21743 | 1208 |
.TP |
55140 | 1209 |
.B noTimestamp |
1210 |
This JAR contains signatures that doesn\[aq]t include a timestamp. |
|
1211 |
Without a timestamp, users may not be able to validate this JAR file |
|
1212 |
after the signer certificate\[aq]s expiration date |
|
1213 |
(\f[CB]YYYY\-MM\-DD\f[R]) or after any future revocation date. |
|
1214 |
.RS |
|
1215 |
.RE |
|
1216 |
.SH EXAMPLE OF SIGNING A JAR FILE |
|
1217 |
.PP |
|
1218 |
Use the following command to sign \f[CB]bundle.jar\f[R] with the private |
|
1219 |
key of a user whose keystore alias is \f[CB]jane\f[R] in a keystore named |
|
1220 |
\f[CB]mystore\f[R] in the \f[CB]working\f[R] directory and name the signed |
|
1221 |
JAR file \f[CB]sbundle.jar\f[R]: |
|
1222 |
.RS |
|
1223 |
.PP |
|
1224 |
\f[CB]jarsigner\ \-keystore\ /working/mystore\ \-storepass\f[R] |
|
1225 |
\f[I]keystore_password\f[R] \f[CB]\-keypass\f[R] |
|
1226 |
\f[I]private_key_password\f[R] |
|
1227 |
\f[CB]\-signedjar\ sbundle.jar\ bundle.jar\ jane\f[R] |
|
1228 |
.RE |
|
1229 |
.PP |
|
1230 |
There is no \f[CB]\-sigfile\f[R] specified in the previous command so the |
|
1231 |
generated \f[CB]\&.SF\f[R] and \f[CB]\&.DSA\f[R] files to be placed in the |
|
1232 |
signed JAR file have default names based on the alias name. |
|
1233 |
They are named \f[CB]JANE.SF\f[R] and \f[CB]JANE.DSA\f[R]. |
|
1234 |
.PP |
|
1235 |
If you want to be prompted for the store password and the private key |
|
1236 |
password, then you could shorten the previous command to the following: |
|
1237 |
.RS |
|
1238 |
.PP |
|
1239 |
\f[CB]jarsigner\ \-keystore\ /working/mystore\ \-signedjar\ sbundle.jar\ bundle.jar\ jane\f[R] |
|
1240 |
.RE |
|
1241 |
.PP |
|
1242 |
If the \f[CB]keystore\f[R] is the default \f[CB]keystore\f[R] |
|
1243 |
(\f[CB]\&.keystore\f[R] in your home directory), then you don\[aq]t need |
|
1244 |
to specify a \f[CB]keystore\f[R], as follows: |
|
1245 |
.RS |
|
1246 |
.PP |
|
1247 |
\f[CB]jarsigner\ \-signedjar\ sbundle.jar\ bundle.jar\ jane\f[R] |
|
1248 |
.RE |
|
1249 |
.PP |
|
1250 |
If you want the signed JAR file to overwrite the input JAR file |
|
1251 |
(\f[CB]bundle.jar\f[R]), then you don\[aq]t need to specify a |
|
1252 |
\f[CB]\-signedjar\f[R] option, as follows: |
|
1253 |
.RS |
|
1254 |
.PP |
|
1255 |
\f[CB]jarsigner\ bundle.jar\ jane\f[R] |
|
1256 |
.RE |
|
1257 |
.SH EXAMPLE OF VERIFYING A SIGNED JAR FILE |
|
1258 |
.PP |
|
1259 |
To verify a signed JAR file to ensure that the signature is valid and |
|
1260 |
the JAR file wasn\[aq]t been tampered with, use a command such as the |
|
1261 |
following: |
|
1262 |
.RS |
|
1263 |
.PP |
|
1264 |
\f[CB]jarsigner\ \-verify\ ButtonDemo.jar\f[R] |
|
1265 |
.RE |
|
1266 |
.PP |
|
1267 |
When the verification is successful, \f[CB]jar\ verified\f[R] is |
|
1268 |
displayed. |
|
1269 |
Otherwise, an error message is displayed. |
|
1270 |
You can get more information when you use the \f[CB]\-verbose\f[R] option. |
|
1271 |
A sample use of \f[CB]jarsigner\f[R] with the \f[CB]\-verbose\f[R] option |
|
1272 |
follows: |
|
1273 |
.IP |
|
1274 |
.nf |
|
1275 |
\f[CB] |
|
1276 |
jarsigner\ \-verify\ \-verbose\ ButtonDemo.jar |
|
12047 | 1277 |
|
55140 | 1278 |
s\ \ \ \ \ \ \ 866\ Tue\ Sep\ 12\ 20:08:48\ EDT\ 2017\ META\-INF/MANIFEST.MF |
1279 |
\ \ \ \ \ \ \ \ 825\ Tue\ Sep\ 12\ 20:08:48\ EDT\ 2017\ META\-INF/ORACLE_C.SF |
|
1280 |
\ \ \ \ \ \ \ 7475\ Tue\ Sep\ 12\ 20:08:48\ EDT\ 2017\ META\-INF/ORACLE_C.RSA |
|
1281 |
\ \ \ \ \ \ \ \ \ \ 0\ Tue\ Sep\ 12\ 20:07:54\ EDT\ 2017\ META\-INF/ |
|
1282 |
\ \ \ \ \ \ \ \ \ \ 0\ Tue\ Sep\ 12\ 20:07:16\ EDT\ 2017\ components/ |
|
1283 |
\ \ \ \ \ \ \ \ \ \ 0\ Tue\ Sep\ 12\ 20:07:16\ EDT\ 2017\ components/images/ |
|
1284 |
sm\ \ \ \ \ \ 523\ Tue\ Sep\ 12\ 20:07:16\ EDT\ 2017\ components/ButtonDemo$1.class |
|
1285 |
sm\ \ \ \ \ 3440\ Tue\ Sep\ 12\ 20:07:16\ EDT\ 2017\ components/ButtonDemo.class |
|
1286 |
sm\ \ \ \ \ 2346\ Tue\ Sep\ 12\ 20:07:16\ EDT\ 2017\ components/ButtonDemo.jnlp |
|
1287 |
sm\ \ \ \ \ \ 172\ Tue\ Sep\ 12\ 20:07:16\ EDT\ 2017\ components/images/left.gif |
|
1288 |
sm\ \ \ \ \ \ 235\ Tue\ Sep\ 12\ 20:07:16\ EDT\ 2017\ components/images/middle.gif |
|
1289 |
sm\ \ \ \ \ \ 172\ Tue\ Sep\ 12\ 20:07:16\ EDT\ 2017\ components/images/right.gif |
|
21743 | 1290 |
|
55140 | 1291 |
\ \ s\ =\ signature\ was\ verified |
1292 |
\ \ m\ =\ entry\ is\ listed\ in\ manifest |
|
1293 |
\ \ k\ =\ at\ least\ one\ certificate\ was\ found\ in\ keystore |
|
1294 |
||
1295 |
\-\ Signed\ by\ "CN="Oracle\ America,\ Inc.",\ OU=Software\ Engineering,\ O="Oracle\ America,\ Inc.",\ L=Redwood\ City,\ ST=California,\ C=US" |
|
1296 |
\ \ \ \ Digest\ algorithm:\ SHA\-256 |
|
1297 |
\ \ \ \ Signature\ algorithm:\ SHA256withRSA,\ 2048\-bit\ key |
|
1298 |
\ \ Timestamped\ by\ "CN=Symantec\ Time\ Stamping\ Services\ Signer\ \-\ G4,\ O=Symantec\ Corporation,\ C=US"\ on\ Tue\ Sep\ 12\ 20:08:49\ UTC\ 2017 |
|
1299 |
\ \ \ \ Timestamp\ digest\ algorithm:\ SHA\-1 |
|
1300 |
\ \ \ \ Timestamp\ signature\ algorithm:\ SHA1withRSA,\ 2048\-bit\ key |
|
1301 |
||
1302 |
jar\ verified. |
|
1303 |
||
1304 |
The\ signer\ certificate\ expired\ on\ 2018\-02\-01.\ However,\ the\ JAR\ will\ be\ valid\ until\ the\ timestamp\ expires\ on\ 2020\-12\-29. |
|
1305 |
\f[R] |
|
1306 |
.fi |
|
1307 |
.SH EXAMPLE OF VERIFICATION WITH CERTIFICATE INFORMATION |
|
21743 | 1308 |
.PP |
55140 | 1309 |
If you specify the \f[CB]\-certs\f[R] option with the \f[CB]\-verify\f[R] |
1310 |
and \f[CB]\-verbose\f[R] options, then the output includes certificate |
|
1311 |
information for each signer of the JAR file. |
|
1312 |
The information includes the certificate type, the signer distinguished |
|
1313 |
name information (when it is an X.509 certificate), and in parentheses, |
|
1314 |
the keystore alias for the signer when the public key certificate in the |
|
1315 |
JAR file matches the one in a keystore entry, for example: |
|
1316 |
.IP |
|
1317 |
.nf |
|
1318 |
\f[CB] |
|
1319 |
jarsigner\ \-keystore\ $JAVA_HOME/lib/security/cacerts\ \-verify\ \-verbose\ \-certs\ ButtonDemo.jar |
|
1320 |
||
1321 |
s\ k\ \ \ \ \ 866\ Tue\ Sep\ 12\ 20:08:48\ EDT\ 2017\ META\-INF/MANIFEST.MF |
|
1322 |
||
1323 |
\ \ \ \ \ \ >>>\ Signer |
|
1324 |
\ \ \ \ \ \ X.509,\ CN="Oracle\ America,\ Inc.",\ OU=Software\ Engineering,\ O="Oracle\ America,\ Inc.",\ L=Redwood\ City,\ ST=California,\ C=US |
|
1325 |
\ \ \ \ \ \ [certificate\ is\ valid\ from\ 2017\-01\-30,\ 7:00\ PM\ to\ 2018\-02\-01,\ 6:59\ PM] |
|
1326 |
\ \ \ \ \ \ X.509,\ CN=Symantec\ Class\ 3\ SHA256\ Code\ Signing\ CA,\ OU=Symantec\ Trust\ Network,\ O=Symantec\ Corporation,\ C=US |
|
1327 |
\ \ \ \ \ \ [certificate\ is\ valid\ from\ 2013\-12\-09,\ 7:00\ PM\ to\ 2023\-12\-09,\ 6:59\ PM] |
|
1328 |
\ \ \ \ \ \ X.509,\ CN=VeriSign\ Class\ 3\ Public\ Primary\ Certification\ Authority\ \-\ G5,\ OU="(c)\ 2006\ VeriSign,\ Inc.\ \-\ For\ authorized\ use\ only",\ OU=VeriSign\ Trust\ Network,\ O="VeriSign,\ Inc.",\ C=US\ (verisignclass3g5ca\ [jdk]) |
|
1329 |
\ \ \ \ \ \ [trusted\ certificate] |
|
1330 |
\ \ \ \ \ \ >>>\ TSA |
|
1331 |
\ \ \ \ \ \ X.509,\ CN=Symantec\ Time\ Stamping\ Services\ Signer\ \-\ G4,\ O=Symantec\ Corporation,\ C=US |
|
1332 |
\ \ \ \ \ \ [certificate\ is\ valid\ from\ 2012\-10\-17,\ 8:00\ PM\ to\ 2020\-12\-29,\ 6:59\ PM] |
|
1333 |
\ \ \ \ \ \ X.509,\ CN=Symantec\ Time\ Stamping\ Services\ CA\ \-\ G2,\ O=Symantec\ Corporation,\ C=US |
|
1334 |
\ \ \ \ \ \ [certificate\ is\ valid\ from\ 2012\-12\-20,\ 7:00\ PM\ to\ 2020\-12\-30,\ 6:59\ PM] |
|
1335 |
||
1336 |
\ \ \ \ \ \ \ \ 825\ Tue\ Sep\ 12\ 20:08:48\ EDT\ 2017\ META\-INF/ORACLE_C.SF |
|
1337 |
\ \ \ \ \ \ \ 7475\ Tue\ Sep\ 12\ 20:08:48\ EDT\ 2017\ META\-INF/ORACLE_C.RSA |
|
1338 |
\ \ \ \ \ \ \ \ \ \ 0\ Tue\ Sep\ 12\ 20:07:54\ EDT\ 2017\ META\-INF/ |
|
1339 |
\ \ \ \ \ \ \ \ \ \ 0\ Tue\ Sep\ 12\ 20:07:16\ EDT\ 2017\ components/ |
|
1340 |
\ \ \ \ \ \ \ \ \ \ 0\ Tue\ Sep\ 12\ 20:07:16\ EDT\ 2017\ components/images/ |
|
1341 |
smk\ \ \ \ \ 523\ Tue\ Sep\ 12\ 20:07:16\ EDT\ 2017\ components/ButtonDemo$1.class |
|
1342 |
||
1343 |
\ \ \ \ \ \ [entry\ was\ signed\ on\ 2017\-09\-12,\ 4:08\ PM] |
|
1344 |
\ \ \ \ \ \ >>>\ Signer |
|
1345 |
\ \ \ \ \ \ X.509,\ CN="Oracle\ America,\ Inc.",\ OU=Software\ Engineering,\ O="Oracle\ America,\ Inc.",\ L=Redwood\ City,\ ST=California,\ C=US |
|
1346 |
\ \ \ \ \ \ [certificate\ is\ valid\ from\ 2017\-01\-30,\ 7:00\ PM\ to\ 2018\-02\-01,\ 6:59\ PM] |
|
1347 |
\ \ \ \ \ \ X.509,\ CN=Symantec\ Class\ 3\ SHA256\ Code\ Signing\ CA,\ OU=Symantec\ Trust\ Network,\ O=Symantec\ Corporation,\ C=US |
|
1348 |
\ \ \ \ \ \ [certificate\ is\ valid\ from\ 2013\-12\-09,\ 7:00\ PM\ to\ 2023\-12\-09,\ 6:59\ PM] |
|
1349 |
\ \ \ \ \ \ X.509,\ CN=VeriSign\ Class\ 3\ Public\ Primary\ Certification\ Authority\ \-\ G5,\ OU="(c)\ 2006\ VeriSign,\ Inc.\ \-\ For\ authorized\ use\ only",\ OU=VeriSign\ Trust\ Network,\ O="VeriSign,\ Inc.",\ C=US\ (verisignclass3g5ca\ [jdk]) |
|
1350 |
\ \ \ \ \ \ [trusted\ certificate] |
|
1351 |
\ \ \ \ \ \ >>>\ TSA |
|
1352 |
\ \ \ \ \ \ X.509,\ CN=Symantec\ Time\ Stamping\ Services\ Signer\ \-\ G4,\ O=Symantec\ Corporation,\ C=US |
|
1353 |
\ \ \ \ \ \ [certificate\ is\ valid\ from\ 2012\-10\-17,\ 8:00\ PM\ to\ 2020\-12\-29,\ 6:59\ PM] |
|
1354 |
\ \ \ \ \ \ X.509,\ CN=Symantec\ Time\ Stamping\ Services\ CA\ \-\ G2,\ O=Symantec\ Corporation,\ C=US |
|
1355 |
\ \ \ \ \ \ [certificate\ is\ valid\ from\ 2012\-12\-20,\ 7:00\ PM\ to\ 2020\-12\-30,\ 6:59\ PM] |
|
1356 |
||
1357 |
smk\ \ \ \ 3440\ Tue\ Sep\ 12\ 20:07:16\ EDT\ 2017\ components/ButtonDemo.class |
|
1358 |
\&... |
|
1359 |
smk\ \ \ \ 2346\ Tue\ Sep\ 12\ 20:07:16\ EDT\ 2017\ components/ButtonDemo.jnlp |
|
1360 |
\&... |
|
1361 |
smk\ \ \ \ \ 172\ Tue\ Sep\ 12\ 20:07:16\ EDT\ 2017\ components/images/left.gif |
|
1362 |
\&... |
|
1363 |
smk\ \ \ \ \ 235\ Tue\ Sep\ 12\ 20:07:16\ EDT\ 2017\ components/images/middle.gif |
|
1364 |
\&... |
|
1365 |
smk\ \ \ \ \ 172\ Tue\ Sep\ 12\ 20:07:16\ EDT\ 2017\ components/images/right.gif |
|
1366 |
\&... |
|
1367 |
||
1368 |
\ \ s\ =\ signature\ was\ verified |
|
1369 |
\ \ m\ =\ entry\ is\ listed\ in\ manifest |
|
1370 |
\ \ k\ =\ at\ least\ one\ certificate\ was\ found\ in\ keystore |
|
1371 |
||
1372 |
\-\ Signed\ by\ "CN="Oracle\ America,\ Inc.",\ OU=Software\ Engineering,\ O="Oracle\ America,\ Inc.",\ L=Redwood\ City,\ ST=California,\ C=US" |
|
1373 |
\ \ \ \ Digest\ algorithm:\ SHA\-256 |
|
1374 |
\ \ \ \ Signature\ algorithm:\ SHA256withRSA,\ 2048\-bit\ key |
|
1375 |
\ \ Timestamped\ by\ "CN=Symantec\ Time\ Stamping\ Services\ Signer\ \-\ G4,\ O=Symantec\ Corporation,\ C=US"\ on\ Tue\ Sep\ 12\ 20:08:49\ UTC\ 2017 |
|
1376 |
\ \ \ \ Timestamp\ digest\ algorithm:\ SHA\-1 |
|
1377 |
\ \ \ \ Timestamp\ signature\ algorithm:\ SHA1withRSA,\ 2048\-bit\ key |
|
1378 |
||
1379 |
jar\ verified. |
|
1380 |
||
1381 |
The\ signer\ certificate\ expired\ on\ 2018\-02\-01.\ However,\ the\ JAR\ will\ be\ valid\ until\ the\ timestamp\ expires\ on\ 2020\-12\-29. |
|
1382 |
\f[R] |
|
1383 |
.fi |
|
1384 |
.PP |
|
1385 |
If the certificate for a signer isn\[aq]t an X.509 certificate, then |
|
1386 |
there is no distinguished name information. |
|
1387 |
In that case, just the certificate type and the alias are shown. |
|
1388 |
For example, if the certificate is a PGP certificate, and the alias is |
|
1389 |
\f[CB]bob\f[R], then you would get: \f[CB]PGP,\ (bob)\f[R]. |