1 .\"t
   2 .\" Copyright (c) 1994, 2019, Oracle and/or its affiliates. All rights reserved.
   3 .\" DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
   4 .\"
   5 .\" This code is free software; you can redistribute it and/or modify it
   6 .\" under the terms of the GNU General Public License version 2 only, as
   7 .\" published by the Free Software Foundation.
   8 .\"
   9 .\" This code is distributed in the hope that it will be useful, but WITHOUT
  10 .\" ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
  11 .\" FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
  12 .\" version 2 for more details (a copy is included in the LICENSE file that
  13 .\" accompanied this code).
  14 .\"
  15 .\" You should have received a copy of the GNU General Public License version
  16 .\" 2 along with this work; if not, write to the Free Software Foundation,
  17 .\" Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
  18 .\"
  19 .\" Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
  20 .\" or visit www.oracle.com if you need additional information or have any
  21 .\" questions.
  22 .\"
  23 .\" Automatically generated by Pandoc 2.3.1
  24 .\"
  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
  66 .TP
  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.)
  88 .PP
  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.
 134 .PP
 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
 172 .PP
 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.
 178 .PP
 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.
 181 .PP
 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
 190 .PP
 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.
 196 .PP
 197 Currently, there are two command\-line tools that use keystore
 198 implementations (\f[CB]keytool\f[R] and \f[CB]jarsigner\f[R]).
 199 .PP
 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.
 211 .PP
 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].
 226 .PP
 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].
 251 .PP
 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.
 256 .PP
 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
 263 .PP
 264 \f[CB]KeyStore\ keyStore\ =\ KeyStore.getInstance(KeyStore.getDefaultType());\f[R]
 265 .RE
 266 .PP
 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
 272 .PP
 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].
 278 .PP
 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
 284 .PP
 285 \f[CB]keystore.type=jks\f[R]
 286 .RE
 287 .SH SUPPORTED ALGORITHMS
 288 .PP
 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:
 292 .PP
 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
 350 .PP
 351 These default signature algorithms can be overridden by using the
 352 \f[CB]\-sigalg\f[R] option.
 353 .PP
 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
 375 .PP
 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
 384 .PP
 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]
 389 .PP
 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
 401 .PP
 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
 408 File name
 409 .IP \[bu] 2
 410 Name of the digest algorithm (SHA)
 411 .IP \[bu] 2
 412 SHA digest value
 413 .PP
 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
 461 .PP
 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
 509 .PP
 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
 620 .PP
 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
 724 .TP
 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
 842 .TP
 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
 867 .TP
 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
 916 .TP
 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
 956 .TP
 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
 981 .TP
 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
 990 .TP
 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.
1004 .TP
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
1021 .TP
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.
1085 .TP
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
1113 .TP
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
1144 .TP
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
1208 .TP
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
1277 
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
1290 
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
1308 .PP
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].