jarsigner man page on MacOSX

Man page or keyword search:  
man Server   23457 pages
apropos Keyword Search (all sections)
Output format
MacOSX logo
[printable version]

jarsigner(1)							  jarsigner(1)

NAME
       jarsigner - JAR signing and verification tool

SYNOPSIS
       jarsigner [ options ] jar-file alias
       jarsigner -verify [ options ] jar-file alias

DESCRIPTION
       The jarsigner tool is used for two purposes:

       1.   to sign Java ARchive (JAR) files, and

       2.   to verify the signatures and integrity of signed JAR files.

       The  JAR	 feature enables the packaging of class files, images, sounds,
       and other digital data in a single file for faster and easier distribu‐
       tion. A tool named jar enables developers to produce JAR files.

       A digital signature is a string of bits that is computed from some data
       (the data being "signed") and the private key of an entity  (a  person,
       company,	 etc.).	 Like a handwritten signature, a digital signature has
       many useful characteristics:

       · Its authenticity can be verified, via a  computation  that  uses  the
	 public key corresponding to the private key used to generate the sig‐
	 nature.

       · It cannot be forged, assuming the private key is kept secret.

       · It is a function of the data signed and thus can't be claimed	to  be
	 the signature for other data as well.

       · The  signed  data  cannot be changed; if it is, the signature will no
	 longer verify as being authentic.

       In order for an entity's signature to be	 generated  for	 a  file,  the
       entity  must  first  have a public/private key pair associated with it,
       and also one or more certificates authenticating its public key. A cer‐
       tificate	 is  a digitally signed statement from one entity, saying that
       the public key of some other entity has a particular value.

       jarsigner uses key and certificate information from a keystore to  gen‐
       erate  digital  signatures  for	JAR files. A keystore is a database of
       private keys and their associated X.509 certificate chains authenticat‐
       ing  the corresponding public keys. The keytool utility is used to cre‐
       ate and administer keystores.

       jarsigner uses an entity's private key to generate  a  signature.   The
       signed JAR file contains, among other things, a copy of the certificate
       from the keystore for the public key corresponding to the  private  key
       used  to	 sign the file.	 jarsigner can verify the digital signature of
       the signed JAR file using the certificate inside it (in	its  signature
       block file).

       At  this time, jarsigner can only sign JAR files created by the JDK jar
       tool or zip files. (JAR files are the same as zip  files,  except  they
       also  have  a META-INF/MANIFEST.MF file. Such a file will automatically
       be created when jarsigner signs a zip file.)

       The default jarsigner behavior is to sign a JAR file. Use  the  -verify
       option to instead have it verify a signed JAR file.

   Compatibility with JDK 1.1
       The  keytool  and  jarsigner  tools completely replace the javakey tool
       provided in JDK	1.1.  These  new  tools	 provide  more	features  than
       javakey, including the ability to protect the keystore and private keys
       with passwords, and the ability to verify  signatures  in  addition  to
       generating them.

       The  new	 keystore  architecture	 replaces  the	identity database that
       javakey created	and  managed.  There  is  no  backwards	 compatibility
       between	the keystore format and the database format used by javakey in
       1.1. However:

       · It is possible to import the information from	an  identity  database
	 into a keystore, via the keytool -identitydb command

       · jarsigner can sign JAR files also previously signed using javakey

       · jarsigner  can	 verify JAR files signed using javakey Thus, it recog‐
	 nizes and can work with signer aliases that are from a JDK 1.1	 iden‐
	 tity database rather than a JDK 1.2 keystore.

       The  following  table  explains	how  JAR files that were signed in JDK
       1.1.x are treated in the Java 2 Platform.

				Trusted
			       Identity
			       imported	    Policy File
       JAR File	 Identity in   into 1.2	      grants	    Privileges
	 Type	1.1 database   keystore	   privileges to     Granted
			       from 1.1	  Identity/Alias
			       database
				  (4)

       Signed						  Default
       JAR	NO	      NO	 NO		  privaleges
							  granted to
							  all code.

       Unsigned						  Default
       JAR	NO	      NO	 NO		  privileges
							  granted to
							  all code.

       Signed						  Default
       JAR	NO	      YES	 NO		  privileges
							  granted to
							  all code.

       Signed						  Default
       JAR	YES/Untrusted NO	 NO		  privileges
							  granted to
							  all code. (3)

       Signed						  Default
       JAR	YES/Untrusted NO	 YES		  privileges
							  granted to
							  all code.
							  (1,3)

       Signed						  Default
       JAR	NO	      YES	 YES		  privileges
							  granted to
							  all code plus
							  privileges
							  granted in
							  policy file.

       Signed						  Default
       JAR	YES/Trusted   YES	 YES		  privileges
							  granted to
							  all code plus
							  privileges
							  granted in
							  policy file.
							  (2)

       Signed						  All
       JAR	YES/Trusted   NO	 NO		  privileges

       Signed						  All
       JAR	YES/Trusted   YES	 NO		  privileges
							  (1)

       Signed						  All
       JAR	YES/Trusted   NO	 YES		  privileges
							  (1)

       Notes:

       1.   If an identity/alias is mentioned in the policy file, it  must  be
	    imported  into the keystore for the policy file to have any effect
	    on privileges granted.

       1.   If an identity/alias is mentioned in the policy file, it  must  be
	    imported  into the keystore for the policy file to have any effect
	    on privileges granted.

       2.   The policy file/keystore combination has precedence over a trusted
	    identity in the identity database.

       3.   Untrusted identities are ignored in the Java 2 platform.

       4.   Only trusted identities can be imported into Java 2 SDK keystores.

   Keystore Aliases
       All keystore entities are accessed via unique aliases.

       When using jarsigner to sign a JAR file, you must specify the alias for
       the keystore entry containing the private key needed  to	 generate  the
       signature.  For	example,  the  following  will sign the JAR file named
       MyJARFile.jar, using the private key associated with the alias duke  in
       the  keystore named mystore in the "working" directory. Since no output
       file is specified, it overwrites	 MyJARFile.jar	with  the  signed  JAR
       file.

       jarsigner -keystore /working/mystore -storepass
	  myspass -keypass dukekeypasswd MyJARFile.jar duke

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

   Keystore Location
       jarsigner  has  a -keystore option for specifying the name and location
       of the keystore to be used. The keystore is by default stored in a file
       named  .keystore	 in  the  user's  home directory, as determined by the
       user.home system property.

       Note that the input stream from the -keystore option is passed  to  the
       KeyStore.load  method.	If  NONE  is specified as the URL, then a null
       stream is passed to the KeyStore.load method. NONE should be  specified
       if  the	KeyStore  is  not  file-based, for example, if it resides on a
       hardware token device.

   Keystore Implementation
       The KeyStore class provided in the java.security package supplies well-
       defined	interfaces to access and modify the information in a keystore.
       It is possible for there to be multiple different concrete  implementa‐
       tions,  where each implementation is that for a particular type of key‐
       store.

       Currently, there are two command-line tools that make use of  KeyStore:
       keytool	and  jarsigner,	 and  also  a GUI-based tool named policytool.
       Since KeyStore is publicly available, JDK users	can  write  additional
       security applications that use it.

       There  is  a built-in default implementation, provided by Sun Microsys‐
       tems. It implements the keystore as a  file,  utilizing	a  proprietary
       keystore	 type  (format) named "JKS". It protects each private key with
       its individual password, and also protects the integrity of the	entire
       keystore with a (possibly different) password.

       Keystore	 implementations  are  provider-based.	More specifically, the
       application interfaces supplied by KeyStore are implemented in terms of
       a "Service Provider Interface" (SPI). That is, there is a corresponding
       abstract KeystoreSpi class, also in the	java.security  package,	 which
       defines	the  Service  Provider Interface methods that "providers" must
       implement. (The term "provider" refers to a package or a set  of	 pack‐
       ages that supply a concrete implementation of a subset of services that
       can be accessed by the Java Security API.) Thus, to provide a  keystore
       implementation,	clients	 must  implement  a provider and supply a Key‐
       storeSpi subclass implementation, as described in How  to  Implement  a
       Provider for the Java Cryptography Architecture.

       Applications  can  choose  different  types of keystore implementations
       from different providers, using the getInstance factory method supplied
       in  the	KeyStore  class.  A keystore type defines the storage and data
       format of the keystore information, and the algorithms used to  protect
       private	keys in the keystore and the integrity of the keystore itself.
       Keystore implementations of different types are not compatible.

       keytool works on any file-based keystore	 implementation.   (It	treats
       the  keytore  location  that  is	 passed to it at the command line as a
       filename and converts it to a FileInputStream, from which it loads  the
       keystore information.) The jarsigner and policytool tools, on the other
       hand, can read a keystore from any location that can be specified using
       a URL.

       For  jarsigner and keytool, you can specify a keystore type at the com‐
       mand line, via the -storetype option. For policytool, you can specify a
       keystore type via the "Change Keystore" command in the Edit menu.

       If  you	don't  explicitly  specify a keystore type, the tools choose a
       keystore implementation based simply on the value of the	 keystore.type
       property specified in the security properties file.  The security prop‐
       erties file is called java.security, and it  resides  in	 the  security
       properties  directory,  java.home/lib/security,	where java.home is the
       runtime environment's directory (the jre directory in the  SDK  or  the
       top-level directory of the Java 2 Runtime Environment).

       Each  tool  gets the keystore.type value and then examines all the cur‐
       rently-installed providers until it finds one that implements keystores
       of  that	 type.	It  then  uses	the  keystore implementation from that
       provider.

       The KeyStore class defines a static method  named  getDefaultType  that
       lets  applications  and applets retrieve the value of the keystore.type
       property. The following line of code creates an instance of the default
       keystore type (as specified in the keystore.type property):

	    KeyStore   keyStore	  =  KeyStore.getInstance(KeyStore.getDefault‐
	    Type());

       The default keystore type is "jks" (the proprietary type	 of  the  key‐
       store implementation provided by Sun). This is specified by the follow‐
       ing line in the security properties file:

	    keystore.type=jks

       To have the tools utilize a  keystore  implementation  other  than  the
       default, change that line to specify a different keystore type.

       For  example,  if  you have a provider package that supplies a keystore
       implementation for a keystore type called "pkcs12", change the line to

       keystore.type=pkcs12

       Note: case doesn't matter in keystore type designations.	 For  example,
       "JKS" would be considered the same as "jks".

   Supported Algorithms and Key Sizes
       At this time, jarsigner can sign a JAR file using either

       · DSA (Digital Signature Algorithm) with the SHA-1 digest algorithm, or

       · the RSA algorithm with the MD5 digest algorithm.

       That  is,  if  the  signer's public and private keys are DSA keys, jar‐
       signer will attempt to sign the JAR file using the SHA-1/DSA algorithm.
       If  the	signer's  keys	are RSA keys, jarsigner will sign the JAR file
       using the MD5/RSA algorithm. This is only possible if there is a stati‐
       cally  installed	 provider  supplying an implementation for the MD5/RSA
       algorithm. (There is always a SHA-1/DSA algorithm available,  from  the
       default "SUN" provider.)

   The Signed JAR File
       When  jarsigner	is used to sign a JAR file, the output signed JAR file
       is exactly the same as the input JAR file, except that it has two addi‐
       tional files placed in the META-INF directory:

       · a signature file, with a .SF extension, and

       · a signature block file, with a .DSA extension.

       The  base  file	names  for  these two files come from the value of the
       -sigFile option. For example, if the option appears as

       -sigFile MKSIGN

       the files are named MKSIGN.SF and MKSIGN.DSA.

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

       The Signature (.SF) File

       A signature file (the .SF file) looks similar to the manifest file that
       is always included in a JAR file generated by the jar  tool.  That  is,
       for  each  source file included in the JAR file, the .SF file has three
       lines, just as in the manifest file, listing the following:

       · the file name,

       · the name of the digest algorithm used (SHA), and

       · a SHA digest value.

       In the manifest file, the SHA digest value for each source file is  the
       digest  (hash)  of the binary data in the source file. In the .SF file,
       on the other hand, the digest value for a given source file is the hash
       of the three lines in the manifest file for the source file.

       The  signature  file  also,  by default, includes a header containing a
       hash of the whole manifest file. The presence  of  the  header  enables
       verification optimization, as described in JAR File Verification.

       The Signature Block (.DSA) File

       The  .SF	 file  is signed and the signature is placed in the .DSA file.
       The .DSA file also contains, encoded inside it, a certificate authenti‐
       cating  the  public key corresponding to the private key used for sign‐
       ing.

   JAR File Verification
       A successful JAR file  verification  occurs  if	the  signature(s)  are
       valid,  and none of the files that were in the JAR file when the signa‐
       tures were generated have been changed since then. JAR  file  verifica‐
       tion involves the following steps:

       1.   Verify the signature of the .SF file itself.

	    That  is,  the  verification  ensures that the signature stored in
	    each signature block (.DSA) file was in fact generated  using  the
	    private key corresponding to the public key whose certificate also
	    appears in the .DSA file. It also ensures that the signature is  a
	    valid  signature  of  the  corresponding signature (.SF) file, and
	    thus the .SF file has not been tampered with.

       2.   Verify the digest listed in each entry in the .SF file  with  each
	    corresponding section in the manifest.

	    The .SF file by default includes a header containing a hash of the
	    entire manifest file. When the header is present, then the verifi‐
	    cation  can	 check	to  see	 whether or not the hash in the header
	    indeed matches the hash of the manifest file. If that is the case,
	    verification proceeds to the next step.

	    If that is not the case, a less optimized verification is required
	    to ensure that the hash in each source file information section in
	    the	 .SF  file equals the hash of its corresponding section in the
	    manifest file (see The Signature (.SF) File).

	    One reason the hash of the manifest file that is stored in the .SF
	    file  header  may  not equal the hash of the current manifest file
	    would be because one or more files were  added  to	the  JAR  file
	    (using  the	 jar tool) after the signature (and thus the .SF file)
	    was generated. When the jar tool is used to add files,  the	 mani‐
	    fest file is changed (sections are added to it for the new files),
	    but the .SF file is not. A verification is still  considered  suc‐
	    cessful  if	 none  of the files that were in the JAR file when the
	    signature was generated have been changed since then, which is the
	    case  if  the  hashes  in  the non-header sections of the .SF file
	    equal the hashes of the corresponding  sections  in	 the  manifest
	    file.

       3.   Read  each file in the JAR file that has an entry in the .SF file.
	    While reading, compute the file's digest,  and  then  compare  the
	    result  with the digest for this file in the manifest section. The
	    digests should be the same, or verification fails.

       If any serious verification  failures  occur  during  the  verification
       process,	 the process is stopped and a security exception is thrown. It
       is caught and displayed by jarsigner.

   Multiple Signatures for a JAR File
       A JAR file can be signed by multiple people simply by running the  jar‐
       signer tool on the file multiple times, specifying the alias for a dif‐
       ferent person each time, as in:

       jarsigner myBundle.jar susan
       jarsigner myBundle.jar kevin

       When a JAR file is signed multiple times, there are  multiple  .SF  and
       .DSA  files  in	the  resulting	JAR file, one pair for each signature.
       Thus, in the example above, the output JAR file includes files with the
       following names:

       SUSAN.SF
       SUSAN.DSA
       KEVIN.SF
       KEVIN.DSA

       Note: It is also possible for a JAR file to have mixed signatures, some
       generated by the JDK 1.1 javakey tool and others by jarsigner. That is,
       jarsigner can be used to sign JAR files already previously signed using
       javakey.

OPTIONS
       The various jarsigner options are listed and described below.  Note:

       · All option names are preceded by a minus sign (-).

       · The options may be provided in any order.

       · Items in italics (option values) represent  the  actual  values  that
	 must be supplied.

       · The -keystore, -storepass, -keypass, -sigfile, and -signedjar options
	 are only relevant when signing a  JAR	file,  not  when  verifying  a
	 signed JAR file. Similarly, an alias is only specified on the command
	 line when signing a JAR file.

       -keystore url  Specifies the URL that tells the keystore location. This
		      defaults to the file .keystore in the user's home direc‐
		      tory, as determined by the user.home system property.

		      A keystore is required when signing, so you must explic‐
		      itly  specify one if the default keystore does not exist
		      (or you want to use one other than the default).

		      A keystore is not required when verifying, but if one is
		      specified,  or  the  default  exists,  and  the -verbose
		      option was also  specified,  additional  information  is
		      output  regarding whether or not any of the certificates
		      used to verify the JAR file are contained in  that  key‐
		      store.

		      Note: the -keystore argument can actually be a file name
		      (and path) specification rather than  a  URL,  in	 which
		      case  it will be treated the same as a "file:" URL. That
		      is,

		      -keystore filePathAndName

		      is treated as equivalent to

		      -keystore file:filePathAndName

       -storetype storetype
		      Specifies the type of keystore to be  instantiated.  The
		      default  keystore	 type  is the one that is specified as
		      the value of the "keystore.type" property in  the	 secu‐
		      rity  properties	file,  which is returned by the static
		      getDefaultType method in java.security.KeyStore.

       -storepass password
		      Specifies the password which is required to  access  the
		      keystore.	 This is only needed when signing (not verify‐
		      ing) a JAR file. In that case, if a -storepass option is
		      not  provided  at the command line, the user is prompted
		      for the password.

		      Note: The password shouldn't be specified on the command
		      line  or	in a script unless it is for testing purposes,
		      or you are on a secure system. Also, when	 typing	 in  a
		      password	at the password prompt, the password is echoed
		      (displayed exactly as typed), so be careful not to  type
		      it in front of anyone.

       -keypass password
		      Specifies	 the  password used to protect the private key
		      of the keystore entry addressed by the  alias  specified
		      on the command line. The password is required when using
		      jarsigner to sign a JAR file. If no password is provided
		      on  the  command line, and the required password is dif‐
		      ferent from the store password, the user is prompted for
		      it.

		      Note: The password shouldn't be specified on the command
		      line or in a script unless it is for  testing  purposes,
		      or  you  are  on a secure system. Also, when typing in a
		      password at the password prompt, the password is	echoed
		      (displayed  exactly as typed), so be careful not to type
		      it in front of anyone.

       -sigfile file  Specifies the base file name to be used for  the	gener‐
		      ated  .SF	 and .DSA files. For example, if file is DUKE‐
		      SIGN, the generated .SF and .DSA	files  will  be	 named
		      DUKESIGN.SF  and DUKESIGN.DSA, and will be placed in the
		      META-INF directory of the signed JAR file.

		      The characters in file must come	from  the  set	"a-zA-
		      Z0-9_-".	 That  is,  only letters, numbers, underscore,
		      and hyphen characters are allowed.  Note: All  lowercase
		      characters  will	be  converted to uppercase for the .SF
		      and .DSA file names.

		      If no -sigfile option appears on the command  line,  the
		      base  file  name	for the .SF and .DSA files will be the
		      first 8 characters of the alias name  specified  on  the
		      command  line, all converted to upper case. If the alias
		      name has fewer than 8 characters, the full alias name is
		      used.   If  the  alias name contains any characters that
		      are not legal in a signature file name, each such	 char‐
		      acter  is	 converted to an underscore ("_") character in
		      forming the file name.

       -signedjar file
		      Specifies the name to be used for the signed JAR file.

		      If no name is specified on the command  line,  the  name
		      used is the same as the input JAR file name (the name of
		      the JAR file to be signed); in other words, that file is
		      overwritten with the signed JAR file.

       -verify	      If  this	appears on the command line, the specified JAR
		      file will be verified, not signed. If  the  verification
		      is  successful, "jar verified" will be displayed. If you
		      try to verify an unsigned JAR file, or a JAR file signed
		      with an unsupported algorithm (for example, RSA when you
		      don't have an RSA provider installed), the following  is
		      displayed:  "jar is unsigned. (signatures missing or not
		      parsable)"

		      It is possible to verify JAR files signed	 using	either
		      jarsigner or the JDK 1.1 javakey tool, or both.

		      For  further  information	 on verification, see JAR File
		      Verification.

       -certs	      If this appears on the  command  line,  along  with  the
		      -verify  and  -verbose options, the output includes cer‐
		      tificate information for each signer of  the  JAR	 file.
		      This information includes:

		      · the  name  of  the  type of certificate (stored in the
			.DSA file) that certifies the signer's public key

		      · if the	certificate  is	 an  X.509  certificate	 (more
			specifically,	  an	 instance     of    java.secu‐
			rity.cert.X509Certificate): the distinguished name  of
			the signer

		      The  keystore  is also examined. If no keystore value is
		      specified on the command line, the default keystore file
		      (if  any) will be checked. If the public key certificate
		      for a signer matches an entry in the keystore, then  the
		      following information will also be displayed:

		      · in  parentheses, the alias name for the keystore entry
			for that signer. If the signer actually comes  from  a
			JDK  1.1 identity database instead of from a keystore,
			the alias name will  appear  in	 brackets  instead  of
			parentheses.

       -verbose	      If  this appears on the command line, it indicates "ver‐
		      bose" mode,  which  causes  jarsigner  to	 output	 extra
		      information  as  to  the	progress of the JAR signing or
		      verification.

       -internalsf    In the past, the .DSA (signature block)  file  generated
		      when  a  JAR  file was signed used to include a complete
		      encoded copy of the .SF file (signature file) also  gen‐
		      erated.  This  behavior  has been changed. To reduce the
		      overall size of the output JAR file, the	.DSA  file  by
		      default  doesn't contain a copy of the .SF file anymore.
		      But if -internalsf appears on the command line, the  old
		      behavior	is  utilized. This option is mainly useful for
		      testing; in practice, it should not be used, since doing
		      so eliminates a useful optimization.

       -sectionsonly  If  this appears on the command line, the .SF file (sig‐
		      nature file) generated when a JAR file  is  signed  does
		      not include a header containing a hash of the whole man‐
		      ifest file. It  just  contains  information  and	hashes
		      related  to  each individual source file included in the
		      JAR file, as described in The Signature (.SF) File .

		      By default, this header is added,	 as  an	 optimization.
		      When  the	 header is present, then whenever the JAR file
		      is verified, the verification can	 first	check  to  see
		      whether or not the hash in the header indeed matches the
		      hash of the whole manifest  file.	 If  so,  verification
		      proceeds to the next step. If not, it is necessary to do
		      a less optimized verification  that  the	hash  in  each
		      source  file  information section in the .SF file equals
		      the hash of its corresponding section  in	 the  manifest
		      file.

		      For further information, see JAR File Verification.

		      This  option  is mainly useful for testing; in practice,
		      it should not be used, since doing so eliminates a  use‐
		      ful optimization.

       -provider provider_class_name
		      Used  to	specify	 the name of the cryptographic service
		      provider's master class file when the  service  provider
		      is not listed in the security properties file.

       -Jjavaoption   Passes  the  specified javaoption string directly to the
		      runtime system.	(jarsigner  is	actually  a  "wrapper"
		      around  the interpreter.) This option should not contain
		      any spaces.  It is useful for  adjusting	the  execution
		      environment  or  memory  usage.	For a list of possible
		      flags, type java -h or java -X at the command line.

EXAMPLES
   Signing a JAR File
       Suppose you have a JAR file named bundle.jar and you'd like to sign  it
       using the private key of the user whose keystore alias is "jane" in the
       keystore named "mystore" in the "working" directory. Suppose  the  key‐
       store  password is "myspass" and the password for jane's private key is
       "j638klm". You can use the following to sign the JAR file and name  the
       signed JAR file "sbundle.jar":

       jarsigner -keystore "/working/mystore" -storepass myspass
	  -keypass j638klm -signedjar sbundle.jar bundle.jar jane

       Note  that  there is no -sigfile specified in the command above, so the
       generated .SF and .DSA files to be placed in the signed JAR  file  will
       have default names based on the alias name. That is, they will be named
       JANE.SF and JANE.DSA.

       If you want to be prompted for the store password and the  private  key
       password, you could shorten the above command to

       jarsigner -keystore /working/mystore
	  -signedjar sbundle.jar bundle.jar jane

       If the keystore to be used is the default keystore (the one named .key‐
       store in your home directory), you don't need to specify a keystore, as
       in:

       jarsigner -signedjar sbundle.jar bundle.jar jane

       Finally,	 if you want the signed JAR file to simply overwrite the input
       JAR file (bundle.jar), you don't need to specify a -signedjar option:

       jarsigner bundle.jar jane

   Verifying a Signed JAR File
       To verify a signed JAR file, that is, to verify that the	 signature  is
       valid  and  the JAR file has not been tampered with, use a command such
       as the following:

       jarsigner -verify sbundle.jar

       If the verification is successful,

       jar verified.

       is displayed. Otherwise, an error message appears.

       You can get more information if you use the -verbose option.  A	sample
       use  of	jarsigner  with the -verbose option is shown below, along with
       sample output:

       jarsigner -verify -verbose sbundle.jar

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

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

	     jar verified.

   Verification with Certificate Information
       If you specify the -certs option when verifying, along with the -verify
       and  -verbose  options, the output includes certificate information for
       each signer of the JAR file, including the certificate type, the signer
       distinguished  name information (if it's an X.509 certificate), and, in
       parentheses, the keystore alias for the signer if the public  key  cer‐
       tificate in the JAR file matches that in a keystore entry. For example,

       example% jarsigner -keystore /working/mystore -verify -verbose -certs myTest.jar

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

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

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

       jar verified.

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

       PGP, (bob)

   Verification of a JAR File that Includes Idnetity Database Signers
       If a JAR file has been signed using the JDK 1.1 javakey tool, and  thus
       the signer is an alias in an identity database, the verification output
       includes an "i" symbol. If the JAR file has  been  signed  by  both  an
       alias  in an identity database and an alias in a keystore, both "k" and
       "i" appear.

       When the -certs option is used, any identity database aliases are shown
       in  square  brackets  rather  than  the	parentheses  used for keystore
       aliases. For example:

       jarsigner -keystore /working/mystore -verify -verbose -certs writeFile.jar

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

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

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

       jar verified.

       Note that the alias "duke" is in brackets to denote that it is an iden‐
       tity database alias, not a keystore alias.

SEE ALSO
       jar(1), keytool(1)

				  23 Jun 2004			  jarsigner(1)
[top]

List of man pages available for MacOSX

Copyright (c) for man pages and the logo by the respective OS vendor.

For those who want to learn more, the polarhome community provides shell access and support.

[legal] [privacy] [GNU] [policy] [cookies] [netiquette] [sponsors] [FAQ]
Tweet
Polarhome, production since 1999.
Member of Polarhome portal.
Based on Fawad Halim's script.
....................................................................
Vote for polarhome
Free Shell Accounts :: the biggest list on the net