Download the JDK
Search the Tutorials
Hide the TOC
Trail: Deployment
Lesson: Packaging Programs in JAR Files
Section: Signing and Verifying JAR Files
Packaging Programs in JAR Files
Using JAR Files: The Basics
Creating a JAR File
Viewing the Contents of a JAR File
Extracting the Contents of a JAR File
Updating a JAR File
Running JAR-Packaged Software
Working with Manifest Files: The Basics
Understanding the Default Manifest
Modifying a Manifest File
Setting an Application's Entry Point
Adding Classes to the JAR File's Classpath
Setting Package Version Information
Sealing Packages within a JAR File
Signing and Verifying JAR Files
Understanding Signing and Verification
Signing JAR Files
Verifying Signed JAR Files
Using JAR-related APIs
The JarClassLoader Class
The JarRunner Class
Home Page > Deployment > Packaging Programs in JAR Files
Signing JAR Files

> You use the JAR Signing and Verification Tool to sign JAR files. You invoke the JAR Signing and Verification Tool by using the `jarsigner` command, so we'll refer to it as "Jarsigner" for short.

> To sign a JAR file, you must first have a private key. Private keys and their associated public-key certificates are stored in password-protected databases called keystores. A keystore can hold the keys of many potential signers. Each key in the keystore can be identified by an alias which is typically the name of the signer who owns the key. The key belonging to Rita Jones might have the alias "rita", for example.

> The basic form of the command for signing a JAR file is

> >     jarsigner jar-file alias

> In this command:
> - `jar-file` is the pathname of the JAR file that's to be signed.
> - `alias` is the alias identifying the private key that's to be used to sign the JAR file, and the key's associated certificate.

> The Jarsigner tool will prompt you for the passwords for the keystore and alias.

> This basic form of the command assumes that the keystore to be used is in a file named `.keystore` in your home directory. It will create signature and signature block files with names `x.SF` and `x.DSA` respectively, where `x` is the first eight letters of the alias, all converted to upper case. This basic command will overwrite the original JAR file with the signed JAR file.

> In practice, you may want to use this command in conjunction with one or more of these options, which must precede the `jar-file` pathname:

> Jarsigner Command Options
> Option | Description
> --- | ---
> `-keystore` url | Specifies a keystore to be used if you don't want to use the `.keystore` default database.
> `-storepass` password | Allows you to enter the keystore's password on the command line rather than be prompted for it.
> `-keypass` password | Allows you to enter your alias's password on the command line rather than be prompted for it.
> `-sigfile` file | Specifies the base name for the .SF and .DSA files if you don't want the base name to be taken from your alias. file must be composed only of upper case letters (A-Z), numerals (0-9), hyphen (-), and underscore (_).
> `-signedjar` file | Specifies the name of the signed JAR file to be generated if you don't want the original unsigned file to be overwritten with the signed file.

### Example

> Let's look at a couple of examples of signing a JAR file with the Jarsigner tool. In these examples we will assume:
> - your alias is "johndoe".
> - the keystore you want to use is in a file named "mykeys" in the current working directory.
> - the keystore's password is "abc123".
> - the password for your alias is "mypass".
> Under these assumptions, you could use this command to sign a JAR file named `app.jar`:

> >     jarsigner -keystore mykeys -storepass abc123
> >               -keypass mypass app.jar johndoe

> Because this command doesn't make use of the `-sigfile` option, the .SF and .DSA files it creates would be named `JOHNDOE.SF` and `JOHNDOE.DSA`. Because the command doesn't use the `-signedjar` option, the resulting signed file will overwrite the original version of `app.jar`.

> Let's look at what would happen if you used a different combination of options:

> >     jarsigner -keystore mykeys -sigfile SIG
> >               -signedjar SignedApp.jar app.jar johndoe

> This time, you would be prompted to enter the passwords for both the keystore and your alias because the passwords aren't specified on the command line. The signature and signature block files would be named `SIG.SF` and `SIG.DSA`, respectively, and the signed JAR file `SignedApp.jar` would be placed in the current directory. The original unsigned JAR file would remain unchanged.

### Additional Information

> Complete reference pages for the JAR Signing and Verification Tool are on-line: Summary of Security Tools

Previous page: Understanding Signing and Verification
Next page: Verifying Signed JAR Files