Back to main site | Back to man page index

SIGNTOOL(1)                                       NSS Security Tools                                      SIGNTOOL(1)



NAME
       signtool - Digitally sign objects and files.

SYNOPSIS
       signtool [[-b basename]] [[-c Compression Level]] [[-d cert-dir]] [[-e extension]] [[-f filename]]
                [[-i installer script]] [[-h]] [[-H]] [[-v]] [[-w]] [[-G nickname]] [[-J]] [[-j directory]]
                [-k keyName] [[--keysize | -s size]] [[-l]] [[-L]] [[-M]] [[-m metafile]] [[--norecurse]] [[-O]]
                [[-o]] [[--outfile]] [[-p password]] [[-t|--token tokenname]] [[-z]] [[-X]] [[-x name]]
                [[--verbose value]] [[--leavearc]] [[-Z jarfile]] [directory-tree] [archive]

STATUS
       This documentation is still work in progress. Please contribute to the initial review in Mozilla NSS bug
       836477[1]

DESCRIPTION
       The Signing Tool, signtool, creates digital signatures and uses a Java Archive (JAR) file to associate the
       signatures with files in a directory. Electronic software distribution over any network involves potential
       security problems. To help address some of these problems, you can associate digital signatures with the files
       in a JAR archive. Digital signatures allow SSL-enabled clients to perform two important operations:

       * Confirm the identity of the individual, company, or other entity whose digital signature is associated with
       the files

       * Check whether the files have been tampered with since being signed

       If you have a signing certificate, you can use Netscape Signing Tool to digitally sign files and package them
       as a JAR file. An object-signing certificate is a special kind of certificate that allows you to associate
       your digital signature with one or more files.

       An individual file can potentially be signed with multiple digital signatures. For example, a commercial
       software developer might sign the files that constitute a software product to prove that the files are indeed
       from a particular company. A network administrator manager might sign the same files with an additional
       digital signature based on a company-generated certificate to indicate that the product is approved for use
       within the company.

       The significance of a digital signature is comparable to the significance of a handwritten signature. Once you
       have signed a file, it is difficult to claim later that you didn't sign it. In some situations, a digital
       signature may be considered as legally binding as a handwritten signature. Therefore, you should take great
       care to ensure that you can stand behind any file you sign and distribute.

       For example, if you are a software developer, you should test your code to make sure it is virus-free before
       signing it. Similarly, if you are a network administrator, you should make sure, before signing any code, that
       it comes from a reliable source and will run correctly with the software installed on the machines to which
       you are distributing it.

       Before you can use Netscape Signing Tool to sign files, you must have an object-signing certificate, which is
       a special certificate whose associated private key is used to create digital signatures. For testing purposes
       only, you can create an object-signing certificate with Netscape Signing Tool 1.3. When testing is finished
       and you are ready to disitribute your software, you should obtain an object-signing certificate from one of
       two kinds of sources:

       * An independent certificate authority (CA) that authenticates your identity and charges you a fee. You
       typically get a certificate from an independent CA if you want to sign software that will be distributed over
       the Internet.

       * CA server software running on your corporate intranet or extranet. Netscape Certificate Management System
       the Communicator client software. Communicator supports the public-key cryptography standard known as PKCS
       #12, which governs key portability. You can, for example, move an object-signing certificate and its
       associated private key from one computer to another on a credit-card-sized device called a smart card.

OPTIONS
       -b basename
           Specifies the base filename for the .rsa and .sf files in the META-INF directory to conform with the JAR
           format. For example, -b signatures causes the files to be named signatures.rsa and signatures.sf. The
           default is signtool.

       -c#
           Specifies the compression level for the -J or -Z option. The symbol # represents a number from 0 to 9,
           where 0 means no compression and 9 means maximum compression. The higher the level of compression, the
           smaller the output but the longer the operation takes. If the -c# option is not used with either the -J or
           the -Z option, the default compression value used by both the -J and -Z options is 6.

       -d certdir
           Specifies your certificate database directory; that is, the directory in which you placed your key3.db and
           cert7.db files. To specify the current directory, use "-d." (including the period). The Unix version of
           signtool assumes ~/.netscape unless told otherwise. The NT version of signtool always requires the use of
           the -d option to specify where the database files are located.

       -e extension
           Tells signtool to sign only files with the given extension; for example, use -e".class" to sign only Java
           class files. Note that with Netscape Signing Tool version 1.1 and later this option can appear multiple
           times on one command line, making it possible to specify multiple file types or classes to include.

       -f commandfile
           Specifies a text file containing Netscape Signing Tool options and arguments in keyword=value format. All
           options and arguments can be expressed through this file. For more information about the syntax used with
           this file, see "Tips and Techniques".

       -G nickname
           Generates a new private-public key pair and corresponding object-signing certificate with the given
           nickname. The newly generated keys and certificate are installed into the key and certificate databases in
           the directory specified by the -d option. With the NT version of Netscape Signing Tool, you must use the
           -d option with the -G option. With the Unix version of Netscape Signing Tool, omitting the -d option
           causes the tool to install the keys and certificate in the Communicator key and certificate databases. If
           you are installing the keys and certificate in the Communicator databases, you must exit Communicator
           before using this option; otherwise, you risk corrupting the databases. In all cases, the certificate is
           also output to a file named x509.cacert, which has the MIME-type application/x-x509-ca-cert. Unlike
           certificates normally used to sign finished code to be distributed over a network, a test certificate
           created with -G is not signed by a recognized certificate authority. Instead, it is self-signed. In
           addition, a single test signing certificate functions as both an object-signing certificate and a CA. When
           you are using it to sign objects, it behaves like an object-signing certificate. When it is imported into
           browser software such as Communicator, it behaves like an object-signing CA and cannot be used to sign
           objects. The -G option is available in Netscape Signing Tool 1.0 and later versions only. By default, it
           produces only RSA certificates with 1024-byte keys in the internal token. However, you can use the -s
           option specify the required key size and the -t option to specify the token.

       -i scriptname
           Specifies the name of an installer script for SmartUpdate. This script installs files from the JAR archive
           in the local system after SmartUpdate has validated the digital signature. For more details, see the
           description of -m that follows. The -i option provides a straightforward way to provide this information

       -j directory
           Specifies a special JavaScript directory. This option causes the specified directory to be signed and tags
           its entries as inline JavaScript. This special type of entry does not have to appear in the JAR file
           itself. Instead, it is located in the HTML page containing the inline scripts. When you use signtool -v,
           these entries are displayed with the string NOT PRESENT.

       -k key ... directory
           Specifies the nickname (key) of the certificate you want to sign with and signs the files in the specified
           directory. The directory to sign is always specified as the last command-line argument. Thus, it is
           possible to write signtool -k MyCert -d . signdir You may have trouble if the nickname contains a single
           quotation mark. To avoid problems, escape the quotation mark using the escape conventions for your
           platform. It's also possible to use the -k option without signing any files or specifying a directory. For
           example, you can use it with the -l option to get detailed information about a particular signing
           certificate.

       -l
           Lists signing certificates, including issuing CAs. If any of your certificates are expired or invalid, the
           list will so specify. This option can be used with the -k option to list detailed information about a
           particular signing certificate. The -l option is available in Netscape Signing Tool 1.0 and later versions
           only.

       -L
           Lists the certificates in your database. An asterisk appears to the left of the nickname for any
           certificate that can be used to sign objects with signtool.

       --leavearc
           Retains the temporary .arc (archive) directories that the -J option creates. These directories are
           automatically erased by default. Retaining the temporary directories can be an aid to debugging.

       -m metafile
           Specifies the name of a metadata control file. Metadata is signed information attached either to the JAR
           archive itself or to files within the archive. This metadata can be any ASCII string, but is used mainly
           for specifying an installer script. The metadata file contains one entry per line, each with three fields:
           field #1: file specification, or + if you want to specify global metadata (that is, metadata about the JAR
           archive itself or all entries in the archive) field #2: the name of the data you are specifying; for
           example: Install-Script field #3: data corresponding to the name in field #2 For example, the -i option
           uses the equivalent of this line: + Install-Script: script.js This example associates a MIME type with a
           file: movie.qt MIME-Type: video/quicktime For information about the way installer script information
           appears in the manifest file for a JAR archive, see The JAR Format on Netscape DevEdge.

       -M
           Lists the PKCS #11 modules available to signtool, including smart cards. The -M option is available in
           Netscape Signing Tool 1.0 and later versions only. For information on using Netscape Signing Tool with
           smart cards, see "Using Netscape Signing Tool with Smart Cards". For information on using the -M option to
           verify FIPS-140-1 validated mode, see "Netscape Signing Tool and FIPS-140-1".

       --norecurse
           Blocks recursion into subdirectories when signing a directory's contents or when parsing HTML.

       -o
           Optimizes the archive for size. Use this only if you are signing very large archives containing hundreds
           of files. This option makes the manifest files (required by the JAR format) considerably smaller, but they
           contain slightly less information.

           Specifies which available token should generate the key and receive the certificate. Use the -M option to
           find out what tokens are available. The -t option can be used with the -G option only.

       -v archive
           Displays the contents of an archive and verifies the cryptographic integrity of the digital signatures it
           contains and the files with which they are associated. This includes checking that the certificate for the
           issuer of the object-signing certificate is listed in the certificate database, that the CA's digital
           signature on the object-signing certificate is valid, that the relevant certificates have not expired, and
           so on.

       --verbosity value
           Sets the quantity of information Netscape Signing Tool generates in operation. A value of 0 (zero) is the
           default and gives full information. A value of -1 suppresses most messages, but not error messages.

       -w archive
           Displays the names of signers of any files in the archive.

       -x directory
           Excludes the specified directory from signing. Note that with Netscape Signing Tool version 1.1 and later
           this option can appear multiple times on one command line, making it possible to specify several
           particular directories to exclude.

       -z
           Tells signtool not to store the signing time in the digital signature. This option is useful if you want
           the expiration date of the signature checked against the current date and time rather than the time the
           files were signed.

       -Z jarfile
           Creates a JAR file with the specified name. You must specify this option if you want signtool to create
           the JAR file; it does not do so automatically. If you don't specify -Z, you must use an external ZIP tool
           to create the JAR file. The -Z option cannot be used at the same time as the -J option. If the -c# option
           is not used with the -Z option, the default compression value is 6.

THE COMMAND FILE FORMAT
       Entries in a Netscape Signing Tool command file have this general format: keyword=value Everything before the
       = sign on a single line is a keyword, and everything from the = sign to the end of line is a value. The value
       may include = signs; only the first = sign on a line is interpreted. Blank lines are ignored, but white space
       on a line with keywords and values is assumed to be part of the keyword (if it comes before the equal sign) or
       part of the value (if it comes after the first equal sign). Keywords are case insensitive, values are
       generally case sensitive. Since the = sign and newline delimit the value, it should not be quoted.

       Subsection

       basename
           Same as -b option.

       compression
           Same as -c option.

       certdir
           Same as -d option.

       extension
           Same as -e option.

       certname
           Nickname of certificate, as with -k and -l -k options.

       signdir
           The directory to be signed, as with -k option.

       list
           Same as -l option. Value is ignored, but = sign must be present.

       listall
           Same as -L option. Value is ignored, but = sign must be present.

       metafile
           Same as -m option.

       modules
           Same as -M option. Value is ignored, but = sign must be present.

       optimize
           Same as -o option. Value is ignored, but = sign must be present.

       password
           Same as -p option.

       keysize
           Same as -s option.

       token
           Same as -t option.

       verify
           Same as -v option.

       who
           Same as -w option.

       exclude
           Same as -x option.

       notime
           Same as -z option. value is ignored, but = sign must be present.

       jarfile
           Same as -Z option.

       outfile
           Name of a file to which output and error messages will be redirected. This option has no command-line
           equivalent.

EXTENDED EXAMPLES
       The following example will do this and that

       Listing Available Signing Certificates

             GTE CyberTrust Root CA
             Uptime Group Plc. Class 4 CA
           * Verisign Object Signing Cert
             Integrion CA
             GTE CyberTrust Secure Server CA
             AT&T Directory Services
           * test object signing cert
             Uptime Group Plc. Class 1 CA
             VeriSign Class 1 Primary CA
           - ------------

           Certificates that can be used to sign objects have *'s to their left.

       Two signing certificates are displayed: Verisign Object Signing Cert and test object signing cert.

       You use the -l option to get a list of signing certificates only, including the signing CA for each.

           signtool -l

           using certificate directory: /u/jsmith/.netscape
           Object signing certificates
           ---------------------------------------

           Verisign Object Signing Cert
               Issued by: VeriSign, Inc. - Verisign, Inc.
               Expires: Tue May 19, 1998
           test object signing cert
               Issued by: test object signing cert (Signtool 1.0 Testing
           Certificate (960187691))
               Expires: Sun May 17, 1998
           ---------------------------------------

       For a list including CAs, use the -L option.

       Signing a File

       1. Create an empty directory.

           mkdir signdir

       2. Put some file into it.

           echo boo > signdir/test.f

       3. Specify the name of your object-signing certificate and sign the directory.

           signtool -k MySignCert -Z testjar.jar signdir

           using key "MySignCert"
           using certificate directory: /u/jsmith/.netscape
           Generating signdir/META-INF/manifest.mf file..
           --> test.f
           adding signdir/test.f to testjar.jar
           Generating signtool.sf file..
           using certificate directory: /u/jsmith/.netscape
           archive "testjar.jar" has passed crypto verification.
                      status   path
                ------------   -------------------
                    verified   test.f

       Using Netscape Signing Tool with a ZIP Utility

       To use Netscape Signing Tool with a ZIP utility, you must have the utility in your path environment variable.
       You should use the zip.exe utility rather than pkzip.exe, which cannot handle long filenames. You can use a
       ZIP utility instead of the -Z option to package a signed archive into a JAR file after you have signed it:

           cd signdir

             zip -r ../myjar.jar *
             adding: META-INF/ (stored 0%)
             adding: META-INF/manifest.mf (deflated 15%)
             adding: META-INF/signtool.sf (deflated 28%)
             adding: META-INF/signtool.rsa (stored 0%)
             adding: text.txt (stored 0%)

       Generating the Keys and Certificate

       The signtool option -G generates a new public-private key pair and certificate. It takes the nickname of the
       new certificate as an argument. The newly generated keys and certificate are installed into the key and
       certificate databases in the directory specified by the -d option. With the NT version of Netscape Signing
       Tool, you must use the -d option with the -G option. With the Unix version of Netscape Signing Tool, omitting
       the -d option causes the tool to install the keys and certificate in the Communicator key and certificate
       databases. In all cases, the certificate is also output to a file named x509.cacert, which has the MIME-type
       application/x-x509-ca-cert.

       Certificates contain standard information about the entity they identify, such as the common name and
       organization name. Netscape Signing Tool prompts you for this information when you run the command with the -G
       option. However, all of the requested fields are optional for test certificates. If you do not enter a common
       name, the tool provides a default name. In the following example, the user input is in boldface:

           signtool -G MyTestCert

           using certificate directory: /u/someuser/.netscape
           Enter certificate information. All fields are optional. Acceptable
           characters are numbers, letters, spaces, and apostrophes.
           certificate common name: Test Object Signing Certificate
           organization: Netscape Communications Corp.
           organization unit: Server Products Division
           state or province: California
           country (must be exactly 2 characters): US
           username: someuser
           email address: [email protected]
           Enter Password or Pin for "Communicator Certificate DB": [Password will not echo]
           generated public/private key pair
           certificate request generated
           certificate has been signed
           certificate "MyTestCert" added to database
           Exported certificate to x509.raw and x509.cacert.

       You can use the -M option to list the PKCS #11 modules, including smart cards, that are available to signtool:

           signtool -d "c:\netscape\users\jsmith" -M

           using certificate directory: c:\netscape\users\username
           Listing of PKCS11 modules
           -----------------------------------------------
                1. Netscape Internal PKCS #11 Module
                            (this module is internally loaded)
                            slots: 2 slots attached
                            status: loaded
                  slot: Communicator Internal Cryptographic Services Version 4.0
                 token: Communicator Generic Crypto Svcs
                  slot: Communicator User Private Key and Certificate Services
                 token: Communicator Certificate DB
                2. CryptOS
                            (this is an external module)
            DLL name: core32
                 slots: 1 slots attached
                status: loaded
                  slot: Litronic 210
                 token:
                -----------------------------------------------

       Using Netscape Signing Tool and a Smart Card to Sign Files

       The signtool command normally takes an argument of the -k option to specify a signing certificate. To sign
       with a smart card, you supply only the fully qualified name of the certificate.

       To see fully qualified certificate names when you run Communicator, click the Security button in Navigator,
       then click Yours under Certificates in the left frame. Fully qualified names are of the format smart
       card:certificate, for example "MyCard:My Signing Cert". You use this name with the -k argument as follows:

           signtool -k "MyCard:My Signing Cert" directory

       Verifying FIPS Mode

       Use the -M option to verify that you are using the FIPS-140-1 module.

           signtool -d "c:\netscape\users\jsmith" -M

           using certificate directory: c:\netscape\users\jsmith
           Listing of PKCS11 modules
           -----------------------------------------------
             1. Netscape Internal PKCS #11 Module
                     (this module is internally loaded)
                     slots: 2 slots attached
                     status: loaded
               slot: Communicator Internal Cryptographic Services Version 4.0
              token: Communicator Generic Crypto Svcs
               slot: Communicator User Private Key and Certificate Services
              token: Communicator Certificate DB
           -----------------------------------------------
           slot: Netscape Internal FIPS-140-1 Cryptographic Services
           token: Communicator Certificate DB
           -----------------------------------------------

SEE ALSO
       signver (1)

       The NSS wiki has information on the new database design and how to configure applications to use it.

       ·   https://wiki.mozilla.org/NSS_Shared_DB_Howto

       ·   https://wiki.mozilla.org/NSS_Shared_DB

ADDITIONAL RESOURCES
       For information about NSS and other tools related to NSS (like JSS), check out the NSS project wiki at
       http://www.mozilla.org/projects/security/pki/nss/. The NSS site relates directly to NSS code changes and
       releases.

       Mailing lists: https://lists.mozilla.org/listinfo/dev-tech-crypto

       IRC: Freenode at #dogtag-pki

AUTHORS
       The NSS tools were written and maintained by developers with Netscape, Red Hat, Sun, Oracle, Mozilla, and
       Google.

       Authors: Elio Maldonado <[email protected]>, Deon Lackey <[email protected]>.

LICENSE
       Licensed under the Mozilla Public License, v. 2.0. If a copy of the MPL was not distributed with this file,
       You can obtain one at http://mozilla.org/MPL/2.0/.

NOTES
        1. Mozilla NSS bug 836477
           https://bugzilla.mozilla.org/show_bug.cgi?id=836477



nss-tools                                            5 June 2014                                          SIGNTOOL(1)