.. _mozilla_projects_nss_tools_signtool: NSS tools : signtool ==================== .. container:: | Name | signtool — Digitally sign objects and files. | Synopsis | signtool [-k keyName] `-h <-h>`__ `-H <-H>`__ `-l <-l>`__ `-L <-L>`__ `-M <-M>`__ `-v <-v>`__ `-w <-w>`__ | `-G nickname <-G_nickname>`__ `-s size <--keysize>`__ `-b basename <-b_basename>`__ [[-c Compression | Level] ] [[-d cert-dir] ] [[-i installer script] ] [[-m metafile] ] [[-x | name] ] [[-f filename] ] [[-t|--token tokenname] ] [[-e extension] ] [[-o] | ] [[-z] ] [[-X] ] [[--outfile] ] [[--verbose value] ] [[--norecurse] ] | [[--leavearc] ] [[-j directory] ] [[-Z jarfile] ] [[-O] ] [[-p password] ] | [directory-tree] [archive] | 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 provides a complete management | solution for creating, deploying, and managing certificates, including CAs | that issue object-signing certificates. | You must also have a certificate for the CA that issues your signing | certificate before you can sign files. If the certificate authority's | certificate isn't already installed in your copy of Communicator, you | typically install it by clicking the appropriate link on the certificate | authority's web site, for example on the page from which you initiated | enrollment for your signing certificate. This is the case for some test | certificates, as well as certificates issued by Netscape Certificate | Management System: you must download the CA certificate in addition to | obtaining your own signing certificate. CA certificates for several | certificate authorities are preinstalled in the Communicator certificate | database. | When you receive an object-signing certificate for your own use, it is | automatically installed in your copy of 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". | -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 if you | don't need to specify any metadata other than an installer script. | -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. | -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. For more information about the use of | the -G option, see "Generating Test Object-Signing | Certificates""Generating Test Object-Signing Certificates" on page | 1241. | -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. | -J | Signs a directory of HTML files containing JavaScript and creates | as many archive files as are specified in the HTML tags. Even if | signtool creates more than one archive file, you need to supply | the key database password only once. The -J option is available | only in Netscape Signing Tool 1.0 and later versions. The -J | option cannot be used at the same time as the -Z option. If the | -c# option is not used with the -J option, the default compression | value is 6. Note that versions 1.1 and later of Netscape Signing | Tool correctly recognizes the CODEBASE attribute, allows paths to | be expressed for the CLASS and SRC attributes instead of filenames | only, processes LINK tags and parses HTML correctly, and offers | clearer error messages. | -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. | --outfile outputfile | Specifies a file to receive redirected output from Netscape | Signing Tool. | -p password | Specifies a password for the private-key database. Note that the | password entered on the command line is displayed as plain text. | -s keysize | Specifies the size of the key for generated certificate. Use the | -M option to find out what tokens are available. The -s option can | be used with the -G option only. | -t token | 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. | generate | Same as -G option. | installscript | Same as -i option. | javascriptdir | Same as -j option. | htmldir | Same as -J 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 | You use the -L option to list the nicknames for all available certificates | and check which ones are signing certificates. | signtool -L | using certificate directory: /u/jsmith/.netscape | S Certificates | - ------------ | BBN Certificate Services CA Root 1 | IBM World Registry CA | VeriSign Class 1 CA - Individual Subscriber - VeriSign, Inc. | 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.. | Enter Password or Pin for "Communicator Certificate DB": | adding signdir/META-INF/manifest.mf to testjar.jar | adding signdir/META-INF/signtool.sf to testjar.jar | adding signdir/META-INF/signtool.rsa to testjar.jar | tree "signdir" signed successfully | 4. Test the archive you just created. | signtool -v testjar.jar | 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: someuser@netscape.com | 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. | The certificate information is read from standard input. Therefore, the | information can be read from a file using the redirection operator (<) in | some operating systems. To create a file for this purpose, enter each of | the seven input fields, in order, on a separate line. Make sure there is a | newline character at the end of the last line. Then run signtool with | standard input redirected from your file as follows: | signtool -G MyTestCert inputfile | The prompts show up on the screen, but the responses will be automatically | read from the file. The password will still be read from the console | unless you use the -p option to give the password on the command line. | Using the -M Option to List Smart Cards | 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 | ----------------------------------------------- | This Unix example shows that Netscape Signing Tool is using a FIPS-140-1 | module: | signtool -d "c:\netscape\users\jsmith" -M | using certificate directory: c:\netscape\users\jsmith | Enter Password or Pin for "Communicator Certificate DB": [password will not echo] | Listing of PKCS11 modules | ----------------------------------------------- | 1. Netscape Internal FIPS PKCS #11 Module | (this module is internally loaded) | slots: 1 slots attached | status: loaded | 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. | o https://wiki.mozilla.org/NSS_Shared_DB_Howto | o 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 | [1]\ `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, and Sun. | Authors: Elio Maldonado , Deon Lackey | . | Copyright | (c) 2010, Red Hat, Inc. Licensed under the GNU Public License version 2. | References | Visible links | 1. `http://www.mozilla.org/projects/security/pki/nss/ `__