2822 lines
104 KiB
Groff
2822 lines
104 KiB
Groff
.\"t
|
|
.\" Copyright (c) 1994, 2019, Oracle and/or its affiliates. All rights reserved.
|
|
.\" DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
|
.\"
|
|
.\" This code is free software; you can redistribute it and/or modify it
|
|
.\" under the terms of the GNU General Public License version 2 only, as
|
|
.\" published by the Free Software Foundation.
|
|
.\"
|
|
.\" This code is distributed in the hope that it will be useful, but WITHOUT
|
|
.\" ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
|
.\" FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
|
|
.\" version 2 for more details (a copy is included in the LICENSE file that
|
|
.\" accompanied this code).
|
|
.\"
|
|
.\" You should have received a copy of the GNU General Public License version
|
|
.\" 2 along with this work; if not, write to the Free Software Foundation,
|
|
.\" Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
|
|
.\"
|
|
.\" Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
|
|
.\" or visit www.oracle.com if you need additional information or have any
|
|
.\" questions.
|
|
.\"
|
|
.\" Automatically generated by Pandoc 2.3.1
|
|
.\"
|
|
.TH "KEYTOOL" "1" "2020" "JDK 14" "JDK Commands"
|
|
.hy
|
|
.SH NAME
|
|
.PP
|
|
keytool \- a key and certificate management utility
|
|
.SH SYNOPSIS
|
|
.PP
|
|
\f[CB]keytool\f[R] [\f[I]commands\f[R]]
|
|
.TP
|
|
.B \f[I]commands\f[R]
|
|
Commands for \f[CB]keytool\f[R] include the following:
|
|
.RS
|
|
.IP \[bu] 2
|
|
\f[CB]\-certreq\f[R]: Generates a certificate request
|
|
.IP \[bu] 2
|
|
\f[CB]\-changealias\f[R]: Changes an entry\[aq]s alias
|
|
.IP \[bu] 2
|
|
\f[CB]\-delete\f[R]: Deletes an entry
|
|
.IP \[bu] 2
|
|
\f[CB]\-exportcert\f[R]: Exports certificate
|
|
.IP \[bu] 2
|
|
\f[CB]\-genkeypair\f[R]: Generates a key pair
|
|
.IP \[bu] 2
|
|
\f[CB]\-genseckey\f[R]: Generates a secret key
|
|
.IP \[bu] 2
|
|
\f[CB]\-gencert\f[R]: Generates a certificate from a certificate request
|
|
.IP \[bu] 2
|
|
\f[CB]\-importcert\f[R]: Imports a certificate or a certificate chain
|
|
.IP \[bu] 2
|
|
\f[CB]\-importpass\f[R]: Imports a password
|
|
.IP \[bu] 2
|
|
\f[CB]\-importkeystore\f[R]: Imports one or all entries from another
|
|
keystore
|
|
.IP \[bu] 2
|
|
\f[CB]\-keypasswd\f[R]: Changes the key password of an entry
|
|
.IP \[bu] 2
|
|
\f[CB]\-list\f[R]: Lists entries in a keystore
|
|
.IP \[bu] 2
|
|
\f[CB]\-printcert\f[R]: Prints the content of a certificate
|
|
.IP \[bu] 2
|
|
\f[CB]\-printcertreq\f[R]: Prints the content of a certificate request
|
|
.IP \[bu] 2
|
|
\f[CB]\-printcrl\f[R]: Prints the content of a Certificate Revocation List
|
|
(CRL) file
|
|
.IP \[bu] 2
|
|
\f[CB]\-storepasswd\f[R]: Changes the store password of a keystore
|
|
.IP \[bu] 2
|
|
\f[CB]\-showinfo\f[R]: Displays security\-related information
|
|
.PP
|
|
See \f[B]Commands and Options\f[R] for a description of these commands
|
|
with their options.
|
|
.RE
|
|
.SH DESCRIPTION
|
|
.PP
|
|
The \f[CB]keytool\f[R] command is a key and certificate management
|
|
utility.
|
|
It enables users to administer their own public/private key pairs and
|
|
associated certificates for use in self\-authentication (where a user
|
|
authenticates themselves to other users and services) or data integrity
|
|
and authentication services, by using digital signatures.
|
|
The \f[CB]keytool\f[R] command also enables users to cache the public keys
|
|
(in the form of certificates) of their communicating peers.
|
|
.PP
|
|
A certificate is a digitally signed statement from one entity (person,
|
|
company, and so on), which says that the public key (and some other
|
|
information) of some other entity has a particular value.
|
|
When data is digitally signed, the signature can be verified to check
|
|
the data integrity and authenticity.
|
|
Integrity means that the data hasn\[aq]t been modified or tampered with,
|
|
and authenticity means that the data comes from the individual who
|
|
claims to have created and signed it.
|
|
.PP
|
|
The \f[CB]keytool\f[R] command also enables users to administer secret
|
|
keys and passphrases used in symmetric encryption and decryption (Data
|
|
Encryption Standard).
|
|
It can also display other security\-related information.
|
|
.PP
|
|
The \f[CB]keytool\f[R] command stores the keys and certificates in a
|
|
keystore.
|
|
.SH COMMAND AND OPTION NOTES
|
|
.PP
|
|
The following notes apply to the descriptions in \f[B]Commands and
|
|
Options\f[R]:
|
|
.IP \[bu] 2
|
|
All command and option names are preceded by a hyphen sign
|
|
(\f[CB]\-\f[R]).
|
|
.IP \[bu] 2
|
|
Only one command can be provided.
|
|
.IP \[bu] 2
|
|
Options for each command can be provided in any order.
|
|
.IP \[bu] 2
|
|
There are two kinds of options, one is single\-valued which should be
|
|
only provided once.
|
|
If a single\-valued option is provided multiple times, the value of the
|
|
last one is used.
|
|
The other type is multi\-valued, which can be provided multiple times
|
|
and all values are used.
|
|
The only multi\-valued option currently supported is the \f[CB]\-ext\f[R]
|
|
option used to generate X.509v3 certificate extensions.
|
|
.IP \[bu] 2
|
|
All items not italicized or in braces ({ }) or brackets ([ ]) are
|
|
required to appear as is.
|
|
.IP \[bu] 2
|
|
Braces surrounding an option signify that a default value is used when
|
|
the option isn\[aq]t specified on the command line.
|
|
Braces are also used around the \f[CB]\-v\f[R], \f[CB]\-rfc\f[R], and
|
|
\f[CB]\-J\f[R] options, which have meaning only when they appear on the
|
|
command line.
|
|
They don\[aq]t have any default values.
|
|
.IP \[bu] 2
|
|
Brackets surrounding an option signify that the user is prompted for the
|
|
values when the option isn\[aq]t specified on the command line.
|
|
For the \f[CB]\-keypass\f[R] option, if you don\[aq]t specify the option
|
|
on the command line, then the \f[CB]keytool\f[R] command first attempts to
|
|
use the keystore password to recover the private/secret key.
|
|
If this attempt fails, then the \f[CB]keytool\f[R] command prompts you for
|
|
the private/secret key password.
|
|
.IP \[bu] 2
|
|
Items in italics (option values) represent the actual values that must
|
|
be supplied.
|
|
For example, here is the format of the \f[CB]\-printcert\f[R] command:
|
|
.RS 2
|
|
.RS
|
|
.PP
|
|
\f[CB]keytool\ \-printcert\f[R] {\f[CB]\-file\f[R] \f[I]cert_file\f[R]}
|
|
{\f[CB]\-v\f[R]}
|
|
.RE
|
|
.PP
|
|
When you specify a \f[CB]\-printcert\f[R] command, replace
|
|
\f[I]cert_file\f[R] with the actual file name, as follows:
|
|
\f[CB]keytool\ \-printcert\ \-file\ VScert.cer\f[R]
|
|
.RE
|
|
.IP \[bu] 2
|
|
Option values must be enclosed in quotation marks when they contain a
|
|
blank (space).
|
|
.SH COMMANDS AND OPTIONS
|
|
.PP
|
|
The keytool commands and their options can be grouped by the tasks that
|
|
they perform.
|
|
.PP
|
|
\f[B]Commands for Creating or Adding Data to the Keystore\f[R]:
|
|
.IP \[bu] 2
|
|
\f[CB]\-gencert\f[R]
|
|
.IP \[bu] 2
|
|
\f[CB]\-genkeypair\f[R]
|
|
.IP \[bu] 2
|
|
\f[CB]\-genseckey\f[R]
|
|
.IP \[bu] 2
|
|
\f[CB]\-importcert\f[R]
|
|
.IP \[bu] 2
|
|
\f[CB]\-importpass\f[R]
|
|
.PP
|
|
\f[B]Commands for Importing Contents from Another Keystore\f[R]:
|
|
.IP \[bu] 2
|
|
\f[CB]\-importkeystore\f[R]
|
|
.PP
|
|
\f[B]Commands for Generating a Certificate Request\f[R]:
|
|
.IP \[bu] 2
|
|
\f[CB]\-certreq\f[R]
|
|
.PP
|
|
\f[B]Commands for Exporting Data\f[R]:
|
|
.IP \[bu] 2
|
|
\f[CB]\-exportcert\f[R]
|
|
.PP
|
|
\f[B]Commands for Displaying Data\f[R]:
|
|
.IP \[bu] 2
|
|
\f[CB]\-list\f[R]
|
|
.IP \[bu] 2
|
|
\f[CB]\-printcert\f[R]
|
|
.IP \[bu] 2
|
|
\f[CB]\-printcertreq\f[R]
|
|
.IP \[bu] 2
|
|
\f[CB]\-printcrl\f[R]
|
|
.PP
|
|
\f[B]Commands for Managing the Keystore\f[R]:
|
|
.IP \[bu] 2
|
|
\f[CB]\-storepasswd\f[R]
|
|
.IP \[bu] 2
|
|
\f[CB]\-keypasswd\f[R]
|
|
.IP \[bu] 2
|
|
\f[CB]\-delete\f[R]
|
|
.IP \[bu] 2
|
|
\f[CB]\-changealias\f[R]
|
|
.PP
|
|
\f[B]Commands for Displaying Security\-related Information\f[R]:
|
|
.IP \[bu] 2
|
|
\f[CB]\-showinfo\f[R]
|
|
.SH COMMANDS FOR CREATING OR ADDING DATA TO THE KEYSTORE
|
|
.TP
|
|
.B \f[CB]\-gencert\f[R]
|
|
The following are the available options for the \f[CB]\-gencert\f[R]
|
|
command:
|
|
.RS
|
|
.IP \[bu] 2
|
|
{\f[CB]\-rfc\f[R]}: Output in RFC (Request For Comment) style
|
|
.IP \[bu] 2
|
|
{\f[CB]\-infile\f[R] \f[I]infile\f[R]}: Input file name
|
|
.IP \[bu] 2
|
|
{\f[CB]\-outfile\f[R] \f[I]outfile\f[R]}: Output file name
|
|
.IP \[bu] 2
|
|
{\f[CB]\-alias\f[R] \f[I]alias\f[R]}: Alias name of the entry to process
|
|
.IP \[bu] 2
|
|
{\f[CB]\-sigalg\f[R] \f[I]sigalg\f[R]}: Signature algorithm name
|
|
.IP \[bu] 2
|
|
{\f[CB]\-dname\f[R] \f[I]dname\f[R]}: Distinguished name
|
|
.IP \[bu] 2
|
|
{\f[CB]\-startdate\f[R] \f[I]startdate\f[R]}: Certificate validity start
|
|
date and time
|
|
.IP \[bu] 2
|
|
{\f[CB]\-ext\f[R] \f[I]ext\f[R]}*: X.509 extension
|
|
.IP \[bu] 2
|
|
{\f[CB]\-validity\f[R] \f[I]days\f[R]}: Validity number of days
|
|
.IP \[bu] 2
|
|
[\f[CB]\-keypass\f[R] \f[I]arg\f[R]]: Key password
|
|
.IP \[bu] 2
|
|
{\f[CB]\-keystore\f[R] \f[I]keystore\f[R]}: Keystore name
|
|
.IP \[bu] 2
|
|
[\f[CB]\-storepass\f[R] \f[I]arg\f[R]]: Keystore password
|
|
.IP \[bu] 2
|
|
{\f[CB]\-storetype\f[R] \f[I]type\f[R]}: Keystore type
|
|
.IP \[bu] 2
|
|
{\f[CB]\-providername\f[R] \f[I]name\f[R]}: Provider name
|
|
.IP \[bu] 2
|
|
{\f[CB]\-addprovider\f[R] \f[I]name\f[R] [\f[CB]\-providerarg\f[R]
|
|
\f[I]arg\f[R]]}: Adds a security provider by name (such as SunPKCS11)
|
|
with an optional configure argument.
|
|
The value of the security provider is the name of a security provider
|
|
that is defined in a module.
|
|
.RS 2
|
|
.PP
|
|
For example,
|
|
.RS
|
|
.PP
|
|
\f[CB]keytool\ \-addprovider\ SunPKCS11\ \-providerarg\ some.cfg\ ...\f[R]
|
|
.RE
|
|
.PP
|
|
\f[B]Note:\f[R]
|
|
.PP
|
|
For compatibility reasons, the SunPKCS11 and OracleUcrypto providers can
|
|
still be loaded with
|
|
\f[CB]\-providerclass\ sun.security.pkcs11.SunPKCS11\f[R] and
|
|
\f[CB]\-providerclass\ com.oracle.security.crypto.UcryptoProvider\f[R]
|
|
even if they are now defined in modules.
|
|
These are the only modules included in JDK that need a configuration,
|
|
and therefore the most widely used with the \f[CB]\-providerclass\f[R]
|
|
option.
|
|
For legacy security providers located on classpath and loaded by
|
|
reflection, \f[CB]\-providerclass\f[R] should still be used.
|
|
.RE
|
|
.IP \[bu] 2
|
|
{\f[CB]\-providerclass\f[R] \f[I]class\f[R] [\f[CB]\-providerarg\f[R]
|
|
\f[I]arg\f[R]]}: Add security provider by fully qualified class name with
|
|
an optional configure argument.
|
|
.RS 2
|
|
.PP
|
|
For example, if \f[CB]MyProvider\f[R] is a legacy provider loaded via
|
|
reflection,
|
|
.RS
|
|
.PP
|
|
\f[CB]keytool\ \-providerclass\ com.example.MyProvider\ ...\f[R]
|
|
.RE
|
|
.RE
|
|
.IP \[bu] 2
|
|
{\f[CB]\-providerpath\f[R] \f[I]list\f[R]}: Provider classpath
|
|
.IP \[bu] 2
|
|
{\f[CB]\-v\f[R]}: Verbose output
|
|
.IP \[bu] 2
|
|
{\f[CB]\-protected\f[R]}: Password provided through a protected mechanism
|
|
.PP
|
|
Use the \f[CB]\-gencert\f[R] command to generate a certificate as a
|
|
response to a certificate request file (which can be created by the
|
|
\f[CB]keytool\ \-certreq\f[R] command).
|
|
The command reads the request either from \f[I]infile\f[R] or, if
|
|
omitted, from the standard input, signs it by using the alias\[aq]s
|
|
private key, and outputs the X.509 certificate into either
|
|
\f[I]outfile\f[R] or, if omitted, to the standard output.
|
|
When \f[CB]\-rfc\f[R] is specified, the output format is Base64\-encoded
|
|
PEM; otherwise, a binary DER is created.
|
|
.PP
|
|
The \f[CB]\-sigalg\f[R] value specifies the algorithm that should be used
|
|
to sign the certificate.
|
|
The \f[I]startdate\f[R] argument is the start time and date that the
|
|
certificate is valid.
|
|
The \f[I]days\f[R] argument tells the number of days for which the
|
|
certificate should be considered valid.
|
|
.PP
|
|
When \f[I]dname\f[R] is provided, it is used as the subject of the
|
|
generated certificate.
|
|
Otherwise, the one from the certificate request is used.
|
|
.PP
|
|
The \f[CB]\-ext\f[R] value shows what X.509 extensions will be embedded in
|
|
the certificate.
|
|
Read \f[B]Common Command Options\f[R] for the grammar of \f[CB]\-ext\f[R].
|
|
.PP
|
|
The \f[CB]\-gencert\f[R] option enables you to create certificate chains.
|
|
The following example creates a certificate, \f[CB]e1\f[R], that contains
|
|
three certificates in its certificate chain.
|
|
.PP
|
|
The following commands creates four key pairs named \f[CB]ca\f[R],
|
|
\f[CB]ca1\f[R], \f[CB]ca2\f[R], and \f[CB]e1\f[R]:
|
|
.IP
|
|
.nf
|
|
\f[CB]
|
|
keytool\ \-alias\ ca\ \-dname\ CN=CA\ \-genkeypair\ \-keyalg\ rsa
|
|
keytool\ \-alias\ ca1\ \-dname\ CN=CA\ \-genkeypair\ \-keyalg\ rsa
|
|
keytool\ \-alias\ ca2\ \-dname\ CN=CA\ \-genkeypair\ \-keyalg\ rsa
|
|
keytool\ \-alias\ e1\ \-dname\ CN=E1\ \-genkeypair\ \-keyalg\ rsa
|
|
\f[R]
|
|
.fi
|
|
.PP
|
|
The following two commands create a chain of signed certificates;
|
|
\f[CB]ca\f[R] signs \f[CB]ca1\f[R] and \f[CB]ca1\f[R] signs \f[CB]ca2\f[R], all
|
|
of which are self\-issued:
|
|
.IP
|
|
.nf
|
|
\f[CB]
|
|
keytool\ \-alias\ ca1\ \-certreq\ |
|
|
\ \ \ \ keytool\ \-alias\ ca\ \-gencert\ \-ext\ san=dns:ca1\ |
|
|
\ \ \ \ keytool\ \-alias\ ca1\ \-importcert
|
|
|
|
keytool\ \-alias\ ca2\ \-certreq\ |
|
|
\ \ \ \ keytool\ \-alias\ ca1\ \-gencert\ \-ext\ san=dns:ca2\ |
|
|
\ \ \ \ keytool\ \-alias\ ca2\ \-importcert
|
|
\f[R]
|
|
.fi
|
|
.PP
|
|
The following command creates the certificate \f[CB]e1\f[R] and stores it
|
|
in the \f[CB]e1.cert\f[R] file, which is signed by \f[CB]ca2\f[R].
|
|
As a result, \f[CB]e1\f[R] should contain \f[CB]ca\f[R], \f[CB]ca1\f[R], and
|
|
\f[CB]ca2\f[R] in its certificate chain:
|
|
.RS
|
|
.PP
|
|
\f[CB]keytool\ \-alias\ e1\ \-certreq\ |\ keytool\ \-alias\ ca2\ \-gencert\ >\ e1.cert\f[R]
|
|
.RE
|
|
.RE
|
|
.TP
|
|
.B \f[CB]\-genkeypair\f[R]
|
|
The following are the available options for the \f[CB]\-genkeypair\f[R]
|
|
command:
|
|
.RS
|
|
.IP \[bu] 2
|
|
{\f[CB]\-alias\f[R] \f[I]alias\f[R]}: Alias name of the entry to process
|
|
.IP \[bu] 2
|
|
\f[CB]\-keyalg\f[R] \f[I]alg\f[R]: Key algorithm name
|
|
.IP \[bu] 2
|
|
{\f[CB]\-keysize\f[R] \f[I]size\f[R]}: Key bit size
|
|
.IP \[bu] 2
|
|
{\f[CB]\-groupname\f[R] \f[I]name\f[R]}: Group name.
|
|
For example, an Elliptic Curve name.
|
|
.IP \[bu] 2
|
|
{\f[CB]\-sigalg\f[R] \f[I]alg\f[R]}: Signature algorithm name
|
|
.IP \[bu] 2
|
|
[\f[CB]\-dname\f[R] \f[I]name\f[R]]: Distinguished name
|
|
.IP \[bu] 2
|
|
{\f[CB]\-startdate\f[R] \f[I]date\f[R]}: Certificate validity start date
|
|
and time
|
|
.IP \[bu] 2
|
|
{\f[CB]\-ext\f[R] \f[I]value\f[R]}*: X.509 extension
|
|
.IP \[bu] 2
|
|
{\f[CB]\-validity\f[R] \f[I]days\f[R]}: Validity number of days
|
|
.IP \[bu] 2
|
|
[\f[CB]\-keypass\f[R] \f[I]arg\f[R]]: Key password
|
|
.IP \[bu] 2
|
|
{\f[CB]\-keystore\f[R] \f[I]keystore\f[R]}: Keystore name
|
|
.IP \[bu] 2
|
|
[\f[CB]\-storepass\f[R] \f[I]arg\f[R]]: Keystore password
|
|
.IP \[bu] 2
|
|
{\f[CB]\-storetype\f[R] \f[I]type\f[R]}: Keystore type
|
|
.IP \[bu] 2
|
|
{\f[CB]\-providername\f[R] \f[I]name\f[R]}: Provider name
|
|
.IP \[bu] 2
|
|
{\f[CB]\-addprovider\f[R] \f[I]name\f[R] [\f[CB]\-providerarg\f[R]
|
|
\f[I]arg\f[R]]}: Add security provider by name (such as SunPKCS11) with
|
|
an optional configure argument.
|
|
.IP \[bu] 2
|
|
{\f[CB]\-providerclass\f[R] \f[I]class\f[R] [\f[CB]\-providerarg\f[R]
|
|
\f[I]arg\f[R]] }: Add security provider by fully qualified class name
|
|
with an optional configure argument.
|
|
.IP \[bu] 2
|
|
{\f[CB]\-providerpath\f[R] \f[I]list\f[R]}: Provider classpath
|
|
.IP \[bu] 2
|
|
{\f[CB]\-v\f[R]}: Verbose output
|
|
.IP \[bu] 2
|
|
{\f[CB]\-protected\f[R]}: Password provided through a protected mechanism
|
|
.PP
|
|
Use the \f[CB]\-genkeypair\f[R] command to generate a key pair (a public
|
|
key and associated private key).
|
|
Wraps the public key in an X.509 v3 self\-signed certificate, which is
|
|
stored as a single\-element certificate chain.
|
|
This certificate chain and the private key are stored in a new keystore
|
|
entry that is identified by its alias.
|
|
.PP
|
|
The \f[CB]\-keyalg\f[R] value specifies the algorithm to be used to
|
|
generate the key pair, and the \f[CB]\-keysize\f[R] value specifies the
|
|
size of each key to be generated.
|
|
The \f[CB]\-sigalg\f[R] value specifies the algorithm that should be used
|
|
to sign the self\-signed certificate.
|
|
This algorithm must be compatible with the \f[CB]\-keyalg\f[R] value.
|
|
.PP
|
|
The \f[CB]\-groupname\f[R] value specifies the named group (for example,
|
|
the standard or predefined name of an Elliptic Curve) of the key to be
|
|
generated.
|
|
Only one of \f[CB]\-groupname\f[R] and \f[CB]\-keysize\f[R] can be
|
|
specified.
|
|
.PP
|
|
The \f[CB]\-dname\f[R] value specifies the X.500 Distinguished Name to be
|
|
associated with the value of \f[CB]\-alias\f[R], and is used as the issuer
|
|
and subject fields in the self\-signed certificate.
|
|
If a distinguished name is not provided at the command line, then the
|
|
user is prompted for one.
|
|
.PP
|
|
The value of \f[CB]\-keypass\f[R] is a password used to protect the
|
|
private key of the generated key pair.
|
|
If a password is not provided, then the user is prompted for it.
|
|
If you press the \f[B]Return\f[R] key at the prompt, then the key
|
|
password is set to the same password as the keystore password.
|
|
The \f[CB]\-keypass\f[R] value must have at least six characters.
|
|
.PP
|
|
The value of \f[CB]\-startdate\f[R] specifies the issue time of the
|
|
certificate, also known as the "Not Before" value of the X.509
|
|
certificate\[aq]s Validity field.
|
|
.PP
|
|
The option value can be set in one of these two forms:
|
|
.PP
|
|
([\f[CB]+\-\f[R]]\f[I]nnn\f[R][\f[CB]ymdHMS\f[R]])+
|
|
.PP
|
|
[\f[I]yyyy\f[R]\f[CB]/\f[R]\f[I]mm\f[R]\f[CB]/\f[R]\f[I]dd\f[R]]
|
|
[\f[I]HH\f[R]\f[CB]:\f[R]\f[I]MM\f[R]\f[CB]:\f[R]\f[I]SS\f[R]]
|
|
.PP
|
|
With the first form, the issue time is shifted by the specified value
|
|
from the current time.
|
|
The value is a concatenation of a sequence of subvalues.
|
|
Inside each subvalue, the plus sign (+) means shift forward, and the
|
|
minus sign (\-) means shift backward.
|
|
The time to be shifted is \f[I]nnn\f[R] units of years, months, days,
|
|
hours, minutes, or seconds (denoted by a single character of \f[CB]y\f[R],
|
|
\f[CB]m\f[R], \f[CB]d\f[R], \f[CB]H\f[R], \f[CB]M\f[R], or \f[CB]S\f[R]
|
|
respectively).
|
|
The exact value of the issue time is calculated by using the
|
|
\f[CB]java.util.GregorianCalendar.add(int\ field,\ int\ amount)\f[R]
|
|
method on each subvalue, from left to right.
|
|
For example, the issue time can be specified by:
|
|
.IP
|
|
.nf
|
|
\f[CB]
|
|
Calendar\ c\ =\ new\ GregorianCalendar();
|
|
c.add(Calendar.YEAR,\ \-1);
|
|
c.add(Calendar.MONTH,\ 1);
|
|
c.add(Calendar.DATE,\ \-1);
|
|
return\ c.getTime()
|
|
\f[R]
|
|
.fi
|
|
.PP
|
|
With the second form, the user sets the exact issue time in two parts,
|
|
year/month/day and hour:minute:second (using the local time zone).
|
|
The user can provide only one part, which means the other part is the
|
|
same as the current date (or time).
|
|
The user must provide the exact number of digits shown in the format
|
|
definition (padding with 0 when shorter).
|
|
When both date and time are provided, there is one (and only one) space
|
|
character between the two parts.
|
|
The hour should always be provided in 24\-hour format.
|
|
.PP
|
|
When the option isn\[aq]t provided, the start date is the current time.
|
|
The option can only be provided one time.
|
|
.PP
|
|
The value of \f[I]date\f[R] specifies the number of days (starting at the
|
|
date specified by \f[CB]\-startdate\f[R], or the current date when
|
|
\f[CB]\-startdate\f[R] isn\[aq]t specified) for which the certificate
|
|
should be considered valid.
|
|
.RE
|
|
.TP
|
|
.B \f[CB]\-genseckey\f[R]
|
|
The following are the available options for the \f[CB]\-genseckey\f[R]
|
|
command:
|
|
.RS
|
|
.IP \[bu] 2
|
|
{\f[CB]\-alias\f[R] \f[I]alias\f[R]}: Alias name of the entry to process
|
|
.IP \[bu] 2
|
|
[\f[CB]\-keypass\f[R] \f[I]arg\f[R]]: Key password
|
|
.IP \[bu] 2
|
|
\f[CB]\-keyalg\f[R] \f[I]alg\f[R]: Key algorithm name
|
|
.IP \[bu] 2
|
|
{\f[CB]\-keysize\f[R] \f[I]size\f[R]}: Key bit size
|
|
.IP \[bu] 2
|
|
{\f[CB]\-keystore\f[R] \f[I]keystore\f[R]}: Keystore name
|
|
.IP \[bu] 2
|
|
[\f[CB]\-storepass\f[R] \f[I]arg\f[R]]: Keystore password
|
|
.IP \[bu] 2
|
|
{\f[CB]\-storetype\f[R] \f[I]type\f[R]}: Keystore type
|
|
.IP \[bu] 2
|
|
{\f[CB]\-providername\f[R] \f[I]name\f[R]}: Provider name
|
|
.IP \[bu] 2
|
|
{\f[CB]\-addprovider\f[R] \f[I]name\f[R] [\f[CB]\-providerarg\f[R]
|
|
\f[I]arg\f[R]]}: Add security provider by name (such as SunPKCS11) with
|
|
an optional configure argument.
|
|
.IP \[bu] 2
|
|
{\f[CB]\-providerclass\f[R] \f[I]class\f[R] [\f[CB]\-providerarg\f[R]
|
|
\f[I]arg\f[R]]}: Add security provider by fully qualified class name with
|
|
an optional configure argument.
|
|
.IP \[bu] 2
|
|
{\f[CB]\-providerpath\f[R] \f[I]list\f[R]}: Provider classpath
|
|
.IP \[bu] 2
|
|
{\f[CB]\-v\f[R]}: Verbose output
|
|
.IP \[bu] 2
|
|
{\f[CB]\-protected\f[R]}: Password provided through a protected mechanism
|
|
.PP
|
|
Use the \f[CB]\-genseckey\f[R] command to generate a secret key and store
|
|
it in a new \f[CB]KeyStore.SecretKeyEntry\f[R] identified by
|
|
\f[CB]alias\f[R].
|
|
.PP
|
|
The value of \f[CB]\-keyalg\f[R] specifies the algorithm to be used to
|
|
generate the secret key, and the value of \f[CB]\-keysize\f[R] specifies
|
|
the size of the key that is generated.
|
|
The \f[CB]\-keypass\f[R] value is a password that protects the secret key.
|
|
If a password is not provided, then the user is prompted for it.
|
|
If you press the \f[B]Return\f[R] key at the prompt, then the key
|
|
password is set to the same password that is used for the
|
|
\f[CB]\-keystore\f[R].
|
|
The \f[CB]\-keypass\f[R] value must contain at least six characters.
|
|
.RE
|
|
.TP
|
|
.B \f[CB]\-importcert\f[R]
|
|
The following are the available options for the \f[CB]\-importcert\f[R]
|
|
command:
|
|
.RS
|
|
.IP \[bu] 2
|
|
{\f[CB]\-noprompt\f[R]}: Do not prompt
|
|
.IP \[bu] 2
|
|
{\f[CB]\-trustcacerts\f[R]}: Trust certificates from cacerts
|
|
.IP \[bu] 2
|
|
{\f[CB]\-protected\f[R]}: Password is provided through protected mechanism
|
|
.IP \[bu] 2
|
|
{\f[CB]\-alias\f[R] \f[I]alias\f[R]}: Alias name of the entry to process
|
|
.IP \[bu] 2
|
|
{\f[CB]\-file\f[R] \f[I]file\f[R]}: Input file name
|
|
.IP \[bu] 2
|
|
[\f[CB]\-keypass\f[R] \f[I]arg\f[R]]: Key password
|
|
.IP \[bu] 2
|
|
{\f[CB]\-keystore\f[R] \f[I]keystore\f[R]}: Keystore name
|
|
.IP \[bu] 2
|
|
{\f[CB]\-cacerts\f[R]}: Access the cacerts keystore
|
|
.IP \[bu] 2
|
|
[\f[CB]\-storepass\f[R] \f[I]arg\f[R]]: Keystore password
|
|
.IP \[bu] 2
|
|
{\f[CB]\-storetype\f[R] \f[I]type\f[R]}: Keystore type
|
|
.IP \[bu] 2
|
|
{\f[CB]\-providername\f[R] \f[I]name\f[R]}: Provider name
|
|
.IP \[bu] 2
|
|
{\f[CB]\-addprovider\f[R] \f[I]name\f[R] [\f[CB]\-providerarg\f[R]
|
|
\f[I]arg\f[R]]}: Add security provider by name (such as SunPKCS11) with
|
|
an optional configure argument.
|
|
.IP \[bu] 2
|
|
{\f[CB]\-providerclass\f[R] \f[I]class\f[R] [\f[CB]\-providerarg\f[R]
|
|
\f[I]arg\f[R]]}: Add security provider by fully qualified class name with
|
|
an optional configure argument.
|
|
.IP \[bu] 2
|
|
{\f[CB]\-providerpath\f[R] \f[I]list\f[R]}: Provider classpath
|
|
.IP \[bu] 2
|
|
{\f[CB]\-v\f[R]}: Verbose output
|
|
.PP
|
|
Use the \f[CB]\-importcert\f[R] command to read the certificate or
|
|
certificate chain (where the latter is supplied in a PKCS#7 formatted
|
|
reply or in a sequence of X.509 certificates) from \f[CB]\-file\f[R]
|
|
\f[I]file\f[R], and store it in the \f[CB]keystore\f[R] entry identified by
|
|
\f[CB]\-alias\f[R].
|
|
If \f[CB]\-file\f[R] \f[I]file\f[R] is not specified, then the certificate
|
|
or certificate chain is read from \f[CB]stdin\f[R].
|
|
.PP
|
|
The \f[CB]keytool\f[R] command can import X.509 v1, v2, and v3
|
|
certificates, and PKCS#7 formatted certificate chains consisting of
|
|
certificates of that type.
|
|
The data to be imported must be provided either in binary encoding
|
|
format or in printable encoding format (also known as Base64 encoding)
|
|
as defined by the Internet RFC 1421 standard.
|
|
In the latter case, the encoding must be bounded at the beginning by a
|
|
string that starts with \f[CB]\-\-\-\-\-BEGIN\f[R], and bounded at the end
|
|
by a string that starts with \f[CB]\-\-\-\-\-END\f[R].
|
|
.PP
|
|
You import a certificate for two reasons: To add it to the list of
|
|
trusted certificates, and to import a certificate reply received from a
|
|
certificate authority (CA) as the result of submitting a Certificate
|
|
Signing Request (CSR) to that CA.
|
|
See the \f[CB]\-certreq\f[R] command in \f[B]Commands for Generating a
|
|
Certificate Request\f[R].
|
|
.PP
|
|
The type of import is indicated by the value of the \f[CB]\-alias\f[R]
|
|
option.
|
|
If the alias doesn\[aq]t point to a key entry, then the \f[CB]keytool\f[R]
|
|
command assumes you are adding a trusted certificate entry.
|
|
In this case, the alias shouldn\[aq]t already exist in the keystore.
|
|
If the alias does exist, then the \f[CB]keytool\f[R] command outputs an
|
|
error because a trusted certificate already exists for that alias, and
|
|
doesn\[aq]t import the certificate.
|
|
If \f[CB]\-alias\f[R] points to a key entry, then the \f[CB]keytool\f[R]
|
|
command assumes that you\[aq]re importing a certificate reply.
|
|
.RE
|
|
.TP
|
|
.B \f[CB]\-importpass\f[R]
|
|
The following are the available options for the \f[CB]\-importpass\f[R]
|
|
command:
|
|
.RS
|
|
.IP \[bu] 2
|
|
{\f[CB]\-alias\f[R] \f[I]alias\f[R]}: Alias name of the entry to process
|
|
.IP \[bu] 2
|
|
[\f[CB]\-keypass\f[R] \f[I]arg\f[R]]: Key password
|
|
.IP \[bu] 2
|
|
{\f[CB]\-keyalg\f[R] \f[I]alg\f[R]}: Key algorithm name
|
|
.IP \[bu] 2
|
|
{\f[CB]\-keysize\f[R] \f[I]size\f[R]}: Key bit size
|
|
.IP \[bu] 2
|
|
{\f[CB]\-keystore\f[R] \f[I]keystore\f[R]}: Keystore name
|
|
.IP \[bu] 2
|
|
[\f[CB]\-storepass\f[R] \f[I]arg\f[R]]: Keystore password
|
|
.IP \[bu] 2
|
|
{\f[CB]\-storetype\f[R] \f[I]type\f[R]}: Keystore type
|
|
.IP \[bu] 2
|
|
{\f[CB]\-providername\f[R] \f[I]name\f[R]}: Provider name
|
|
.IP \[bu] 2
|
|
{\f[CB]\-addprovider\f[R] \f[I]name\f[R] [\f[CB]\-providerarg\f[R]
|
|
\f[I]arg\f[R]]}: Add security provider by name (such as SunPKCS11) with
|
|
an optional configure argument.
|
|
.IP \[bu] 2
|
|
{\f[CB]\-providerclass\f[R] \f[I]class\f[R] [\f[CB]\-providerarg\f[R]
|
|
\f[I]arg\f[R]]}: Add security provider by fully qualified class name with
|
|
an optional configure argument.
|
|
.IP \[bu] 2
|
|
{\f[CB]\-providerpath\f[R] \f[I]list\f[R]}: Provider classpath
|
|
.IP \[bu] 2
|
|
{\f[CB]\-v\f[R]}: Verbose output
|
|
.IP \[bu] 2
|
|
{\f[CB]\-protected\f[R]}: Password provided through a protected mechanism
|
|
.PP
|
|
Use the \f[CB]\-importpass\f[R] command to imports a passphrase and store
|
|
it in a new \f[CB]KeyStore.SecretKeyEntry\f[R] identified by
|
|
\f[CB]\-alias\f[R].
|
|
The passphrase may be supplied via the standard input stream; otherwise
|
|
the user is prompted for it.
|
|
The \f[CB]\-keypass\f[R] option provides a password to protect the
|
|
imported passphrase.
|
|
If a password is not provided, then the user is prompted for it.
|
|
If you press the \f[B]Return\f[R] key at the prompt, then the key
|
|
password is set to the same password as that used for the
|
|
\f[CB]keystore\f[R].
|
|
The \f[CB]\-keypass\f[R] value must contain at least six characters.
|
|
.RE
|
|
.SH COMMANDS FOR IMPORTING CONTENTS FROM ANOTHER KEYSTORE
|
|
.TP
|
|
.B \f[CB]\-importkeystore\f[R]
|
|
The following are the available options for the
|
|
\f[CB]\-importkeystore\f[R] command:
|
|
.RS
|
|
.IP \[bu] 2
|
|
\f[CB]\-srckeystore\f[R] \f[I]keystore\f[R]: Source keystore name
|
|
.IP \[bu] 2
|
|
{\f[CB]\-destkeystore\f[R] \f[I]keystore\f[R]}: Destination keystore name
|
|
.IP \[bu] 2
|
|
{\f[CB]\-srcstoretype\f[R] \f[I]type\f[R]}: Source keystore type
|
|
.IP \[bu] 2
|
|
{\f[CB]\-deststoretype\f[R] \f[I]type\f[R]}: Destination keystore type
|
|
.IP \[bu] 2
|
|
[\f[CB]\-srcstorepass\f[R] \f[I]arg\f[R]]: Source keystore password
|
|
.IP \[bu] 2
|
|
[\f[CB]\-deststorepass\f[R] \f[I]arg\f[R]]: Destination keystore password
|
|
.IP \[bu] 2
|
|
{\f[CB]\-srcprotected\f[R]}: Source keystore password protected
|
|
.IP \[bu] 2
|
|
{\f[CB]\-destprotected\f[R]}: Destination keystore password protected
|
|
.IP \[bu] 2
|
|
{\f[CB]\-srcprovidername\f[R] \f[I]name\f[R]}: Source keystore provider
|
|
name
|
|
.IP \[bu] 2
|
|
{\f[CB]\-destprovidername\f[R] \f[I]name\f[R]}: Destination keystore
|
|
provider name
|
|
.IP \[bu] 2
|
|
{\f[CB]\-srcalias\f[R] \f[I]alias\f[R]}: Source alias
|
|
.IP \[bu] 2
|
|
{\f[CB]\-destalias\f[R] \f[I]alias\f[R]}: Destination alias
|
|
.IP \[bu] 2
|
|
[\f[CB]\-srckeypass\f[R] \f[I]arg\f[R]]: Source key password
|
|
.IP \[bu] 2
|
|
[\f[CB]\-destkeypass\f[R] \f[I]arg\f[R]]: Destination key password
|
|
.IP \[bu] 2
|
|
{\f[CB]\-noprompt\f[R]}: Do not prompt
|
|
.IP \[bu] 2
|
|
{\f[CB]\-addprovider\f[R] \f[I]name\f[R] [\f[CB]\-providerarg\f[R]
|
|
\f[I]arg\f[R]]: Add security provider by name (such as SunPKCS11) with an
|
|
optional configure argument.
|
|
.IP \[bu] 2
|
|
{\f[CB]\-providerclass\f[R] \f[I]class\f[R] [\f[CB]\-providerarg\f[R]
|
|
\f[I]arg\f[R]]}: Add security provider by fully qualified class name with
|
|
an optional configure argument
|
|
.IP \[bu] 2
|
|
{\f[CB]\-providerpath\f[R] \f[I]list\f[R]}: Provider classpath
|
|
.IP \[bu] 2
|
|
{\f[CB]\-v\f[R]}: Verbose output
|
|
.PP
|
|
\f[B]Note:\f[R]
|
|
.PP
|
|
This is the first line of all options:
|
|
.RS
|
|
.PP
|
|
\f[CB]\-srckeystore\f[R] \f[I]keystore\f[R] \f[CB]\-destkeystore\f[R]
|
|
\f[I]keystore\f[R]
|
|
.RE
|
|
.PP
|
|
Use the \f[CB]\-importkeystore\f[R] command to import a single entry or
|
|
all entries from a source keystore to a destination keystore.
|
|
.PP
|
|
\f[B]Note:\f[R]
|
|
.PP
|
|
If you do not specify \f[CB]\-destkeystore\f[R] when using the
|
|
\f[CB]keytool\ \-importkeystore\f[R] command, then the default keystore
|
|
used is \f[CB]$HOME/.keystore\f[R].
|
|
.PP
|
|
When the \f[CB]\-srcalias\f[R] option is provided, the command imports the
|
|
single entry identified by the alias to the destination keystore.
|
|
If a destination alias isn\[aq]t provided with \f[CB]\-destalias\f[R],
|
|
then \f[CB]\-srcalias\f[R] is used as the destination alias.
|
|
If the source entry is protected by a password, then
|
|
\f[CB]\-srckeypass\f[R] is used to recover the entry.
|
|
If \f[CB]\-srckeypass\f[R] isn\[aq]t provided, then the \f[CB]keytool\f[R]
|
|
command attempts to use \f[CB]\-srcstorepass\f[R] to recover the entry.
|
|
If \f[CB]\-srcstorepass\f[R] is not provided or is incorrect, then the
|
|
user is prompted for a password.
|
|
The destination entry is protected with \f[CB]\-destkeypass\f[R].
|
|
If \f[CB]\-destkeypass\f[R] isn\[aq]t provided, then the destination entry
|
|
is protected with the source entry password.
|
|
For example, most third\-party tools require \f[CB]storepass\f[R] and
|
|
\f[CB]keypass\f[R] in a PKCS #12 keystore to be the same.
|
|
To create a PKCS#12 keystore for these tools, always specify a
|
|
\f[CB]\-destkeypass\f[R] that is the same as \f[CB]\-deststorepass\f[R].
|
|
.PP
|
|
If the \f[CB]\-srcalias\f[R] option isn\[aq]t provided, then all entries
|
|
in the source keystore are imported into the destination keystore.
|
|
Each destination entry is stored under the alias from the source entry.
|
|
If the source entry is protected by a password, then
|
|
\f[CB]\-srcstorepass\f[R] is used to recover the entry.
|
|
If \f[CB]\-srcstorepass\f[R] is not provided or is incorrect, then the
|
|
user is prompted for a password.
|
|
If a source keystore entry type isn\[aq]t supported in the destination
|
|
keystore, or if an error occurs while storing an entry into the
|
|
destination keystore, then the user is prompted either to skip the entry
|
|
and continue or to quit.
|
|
The destination entry is protected with the source entry password.
|
|
.PP
|
|
If the destination alias already exists in the destination keystore,
|
|
then the user is prompted either to overwrite the entry or to create a
|
|
new entry under a different alias name.
|
|
.PP
|
|
If the \f[CB]\-noprompt\f[R] option is provided, then the user isn\[aq]t
|
|
prompted for a new destination alias.
|
|
Existing entries are overwritten with the destination alias name.
|
|
Entries that can\[aq]t be imported are skipped and a warning is
|
|
displayed.
|
|
.RE
|
|
.SH COMMANDS FOR GENERATING A CERTIFICATE REQUEST
|
|
.TP
|
|
.B \f[CB]\-certreq\f[R]
|
|
The following are the available options for the \f[CB]\-certreq\f[R]
|
|
command:
|
|
.RS
|
|
.IP \[bu] 2
|
|
{\f[CB]\-alias\f[R] \f[I]alias\f[R]}: Alias name of the entry to process
|
|
.IP \[bu] 2
|
|
{\f[CB]\-sigalg\f[R] \f[I]alg\f[R]}: Signature algorithm name
|
|
.IP \[bu] 2
|
|
{\f[CB]\-file\f[R] \f[I]file\f[R]}: Output file name
|
|
.IP \[bu] 2
|
|
[ \f[CB]\-keypass\f[R] \f[I]arg\f[R]]: Key password
|
|
.IP \[bu] 2
|
|
{\f[CB]\-keystore\f[R] \f[I]keystore\f[R]}: Keystore name
|
|
.IP \[bu] 2
|
|
{\f[CB]\-dname\f[R] \f[I]name\f[R]}: Distinguished name
|
|
.IP \[bu] 2
|
|
{\f[CB]\-ext\f[R] \f[I]value\f[R]}: X.509 extension
|
|
.IP \[bu] 2
|
|
[\f[CB]\-storepass\f[R] \f[I]arg\f[R]]: Keystore password
|
|
.IP \[bu] 2
|
|
{\f[CB]\-storetype\f[R] \f[I]type\f[R]}: Keystore type
|
|
.IP \[bu] 2
|
|
{\f[CB]\-providername\f[R] \f[I]name\f[R]}: Provider name
|
|
.IP \[bu] 2
|
|
{\f[CB]\-addprovider\f[R] \f[I]name\f[R] [\f[CB]\-providerarg\f[R]
|
|
\f[I]arg\f[R]]}: Add security provider by name (such as SunPKCS11) with
|
|
an optional configure argument.
|
|
.IP \[bu] 2
|
|
{\f[CB]\-providerclass\f[R] \f[I]class\f[R] [\f[CB]\-providerarg\f[R]
|
|
\f[I]arg\f[R]]}: Add security provider by fully qualified class name with
|
|
an optional configure argument.
|
|
.IP \[bu] 2
|
|
{\f[CB]\-providerpath\f[R] \f[I]list\f[R]}: Provider classpath
|
|
.IP \[bu] 2
|
|
{\f[CB]\-v\f[R]}: Verbose output
|
|
.IP \[bu] 2
|
|
{\f[CB]\-protected\f[R]}: Password provided through a protected mechanism
|
|
.PP
|
|
Use the \f[CB]\-certreq\f[R] command to generate a Certificate Signing
|
|
Request (CSR) using the PKCS #10 format.
|
|
.PP
|
|
A CSR is intended to be sent to a CA.
|
|
The CA authenticates the certificate requestor (usually offline) and
|
|
returns a certificate or certificate chain to replace the existing
|
|
certificate chain (initially a self\-signed certificate) in the
|
|
keystore.
|
|
.PP
|
|
The private key associated with \f[I]alias\f[R] is used to create the
|
|
PKCS #10 certificate request.
|
|
To access the private key, the correct password must be provided.
|
|
If \f[CB]\-keypass\f[R] isn\[aq]t provided at the command line and is
|
|
different from the password used to protect the integrity of the
|
|
keystore, then the user is prompted for it.
|
|
If \f[CB]\-dname\f[R] is provided, then it is used as the subject in the
|
|
CSR.
|
|
Otherwise, the X.500 Distinguished Name associated with alias is used.
|
|
.PP
|
|
The \f[CB]\-sigalg\f[R] value specifies the algorithm that should be used
|
|
to sign the CSR.
|
|
.PP
|
|
The CSR is stored in the \f[CB]\-file\f[R] \f[I]file\f[R].
|
|
If a file is not specified, then the CSR is output to \f[CB]\-stdout\f[R].
|
|
.PP
|
|
Use the \f[CB]\-importcert\f[R] command to import the response from the
|
|
CA.
|
|
.RE
|
|
.SH COMMANDS FOR EXPORTING DATA
|
|
.TP
|
|
.B \f[CB]\-exportcert\f[R]
|
|
The following are the available options for the \f[CB]\-exportcert\f[R]
|
|
command:
|
|
.RS
|
|
.IP \[bu] 2
|
|
{\f[CB]\-rfc\f[R]}: Output in RFC style
|
|
.IP \[bu] 2
|
|
{\f[CB]\-alias\f[R] \f[I]alias\f[R]}: Alias name of the entry to process
|
|
.IP \[bu] 2
|
|
{\f[CB]\-file\f[R] \f[I]file\f[R]}: Output file name
|
|
.IP \[bu] 2
|
|
{\f[CB]\-keystore\f[R] \f[I]keystore\f[R]}: Keystore name
|
|
.IP \[bu] 2
|
|
{\f[CB]\-cacerts\f[R]}: Access the cacerts keystore
|
|
.IP \[bu] 2
|
|
[\f[CB]\-storepass\f[R] \f[I]arg\f[R]]: Keystore password
|
|
.IP \[bu] 2
|
|
{\f[CB]\-storetype\f[R] \f[I]type\f[R]}: Keystore type
|
|
.IP \[bu] 2
|
|
{\f[CB]\-providername\f[R] \f[I]name\f[R]}: Provider name
|
|
.IP \[bu] 2
|
|
{\f[CB]\-addprovider\f[R] \f[I]name\f[R] [\f[CB]\-providerarg\f[R]
|
|
\f[I]arg\f[R]]}: Add security provider by name (such as SunPKCS11) with
|
|
an optional configure argument.
|
|
.IP \[bu] 2
|
|
{\f[CB]\-providerclass\f[R] \f[I]class\f[R] [\f[CB]\-providerarg\f[R]
|
|
\f[I]arg\f[R]] }: Add security provider by fully qualified class name
|
|
with an optional configure argument.
|
|
.IP \[bu] 2
|
|
{\f[CB]\-providerpath\f[R] \f[I]list\f[R]}: Provider classpath
|
|
.IP \[bu] 2
|
|
{\f[CB]\-v\f[R]}: Verbose output
|
|
.IP \[bu] 2
|
|
{\f[CB]\-protected\f[R]}: Password provided through a protected mechanism
|
|
.PP
|
|
Use the \f[CB]\-exportcert\f[R] command to read a certificate from the
|
|
keystore that is associated with \f[CB]\-alias\f[R] \f[I]alias\f[R] and
|
|
store it in the \f[CB]\-file\f[R] \f[I]file\f[R].
|
|
When a file is not specified, the certificate is output to
|
|
\f[CB]stdout\f[R].
|
|
.PP
|
|
By default, the certificate is output in binary encoding.
|
|
If the \f[CB]\-rfc\f[R] option is specified, then the output in the
|
|
printable encoding format defined by the Internet RFC 1421 Certificate
|
|
Encoding Standard.
|
|
.PP
|
|
If \f[CB]\-alias\f[R] refers to a trusted certificate, then that
|
|
certificate is output.
|
|
Otherwise, \f[CB]\-alias\f[R] refers to a key entry with an associated
|
|
certificate chain.
|
|
In that case, the first certificate in the chain is returned.
|
|
This certificate authenticates the public key of the entity addressed by
|
|
\f[CB]\-alias\f[R].
|
|
.RE
|
|
.SH COMMANDS FOR DISPLAYING DATA
|
|
.TP
|
|
.B \f[CB]\-list\f[R]
|
|
The following are the available options for the \f[CB]\-list\f[R] command:
|
|
.RS
|
|
.IP \[bu] 2
|
|
{\f[CB]\-rfc\f[R]}: Output in RFC style
|
|
.IP \[bu] 2
|
|
{\f[CB]\-alias\f[R] \f[I]alias\f[R]}: Alias name of the entry to process
|
|
.IP \[bu] 2
|
|
{\f[CB]\-keystore\f[R] \f[I]keystore\f[R]}: Keystore name
|
|
.IP \[bu] 2
|
|
{\f[CB]\-cacerts\f[R]}: Access the cacerts keystore
|
|
.IP \[bu] 2
|
|
[\f[CB]\-storepass\f[R] \f[I]arg\f[R]]: Keystore password
|
|
.IP \[bu] 2
|
|
{\f[CB]\-storetype\f[R] \f[I]type\f[R]}: Keystore type
|
|
.IP \[bu] 2
|
|
{\f[CB]\-providername\f[R] \f[I]name\f[R]}: Provider name
|
|
.IP \[bu] 2
|
|
{\f[CB]\-addprovider\f[R] \f[I]name\f[R] [\f[CB]\-providerarg\f[R]
|
|
\f[I]arg\f[R]]}: Add security provider by name (such as SunPKCS11) with
|
|
an optional configure argument.
|
|
.IP \[bu] 2
|
|
{\f[CB]\-providerclass\f[R] \f[I]class\f[R] [\f[CB]\-providerarg\f[R]
|
|
\f[I]arg\f[R]] }: Add security provider by fully qualified class name
|
|
with an optional configure argument.
|
|
.IP \[bu] 2
|
|
{\f[CB]\-providerpath\f[R] \f[I]list\f[R]}: Provider classpath
|
|
.IP \[bu] 2
|
|
{\f[CB]\-v\f[R]}: Verbose output
|
|
.IP \[bu] 2
|
|
{\f[CB]\-protected\f[R]}: Password provided through a protected mechanism
|
|
.PP
|
|
Use the \f[CB]\-list\f[R] command to print the contents of the keystore
|
|
entry identified by \f[CB]\-alias\f[R] to \f[CB]stdout\f[R].
|
|
If \f[CB]\-alias\f[R] \f[I]alias\f[R] is not specified, then the contents
|
|
of the entire keystore are printed.
|
|
.PP
|
|
By default, this command prints the SHA\-256 fingerprint of a
|
|
certificate.
|
|
If the \f[CB]\-v\f[R] option is specified, then the certificate is printed
|
|
in human\-readable format, with additional information such as the
|
|
owner, issuer, serial number, and any extensions.
|
|
If the \f[CB]\-rfc\f[R] option is specified, then the certificate contents
|
|
are printed by using the printable encoding format, as defined by the
|
|
Internet RFC 1421 Certificate Encoding Standard.
|
|
.PP
|
|
\f[B]Note:\f[R]
|
|
.PP
|
|
You can\[aq]t specify both \f[CB]\-v\f[R] and \f[CB]\-rfc\f[R] in the same
|
|
command.
|
|
Otherwise, an error is reported.
|
|
.RE
|
|
.TP
|
|
.B \f[CB]\-printcert\f[R]
|
|
The following are the available options for the \f[CB]\-printcert\f[R]
|
|
command:
|
|
.RS
|
|
.IP \[bu] 2
|
|
{\f[CB]\-rfc\f[R]}: Output in RFC style
|
|
.IP \[bu] 2
|
|
{\f[CB]\-file\f[R] \f[I]cert_file\f[R]}: Input file name
|
|
.IP \[bu] 2
|
|
{\f[CB]\-sslserver\f[R] \f[I]server\f[R][\f[CB]:\f[R]\f[I]port\f[R]]}:: Secure
|
|
Sockets Layer (SSL) server host and port
|
|
.IP \[bu] 2
|
|
{\f[CB]\-jarfile\f[R] \f[I]JAR_file\f[R]}: Signed \f[CB]\&.jar\f[R] file
|
|
.IP \[bu] 2
|
|
{\f[CB]\-v\f[R]}: Verbose output
|
|
.PP
|
|
Use the \f[CB]\-printcert\f[R] command to read and print the certificate
|
|
from \f[CB]\-file\f[R] \f[I]cert_file\f[R], the SSL server located at
|
|
\f[CB]\-sslserver\f[R] \f[I]server\f[R][\f[CB]:\f[R]\f[I]port\f[R]], or the
|
|
signed JAR file specified by \f[CB]\-jarfile\f[R] \f[I]JAR_file\f[R].
|
|
It prints its contents in a human\-readable format.
|
|
When a port is not specified, the standard HTTPS port 443 is assumed.
|
|
.PP
|
|
\f[B]Note:\f[R]
|
|
.PP
|
|
The \f[CB]\-sslserver\f[R] and \f[CB]\-file\f[R] options can\[aq]t be
|
|
provided in the same command.
|
|
Otherwise, an error is reported.
|
|
If you don\[aq]t specify either option, then the certificate is read
|
|
from \f[CB]stdin\f[R].
|
|
.PP
|
|
When\f[CB]\-rfc\f[R] is specified, the \f[CB]keytool\f[R] command prints the
|
|
certificate in PEM mode as defined by the Internet RFC 1421 Certificate
|
|
Encoding standard.
|
|
.PP
|
|
If the certificate is read from a file or \f[CB]stdin\f[R], then it might
|
|
be either binary encoded or in printable encoding format, as defined by
|
|
the RFC 1421 Certificate Encoding standard.
|
|
.PP
|
|
If the SSL server is behind a firewall, then the
|
|
\f[CB]\-J\-Dhttps.proxyHost=proxyhost\f[R] and
|
|
\f[CB]\-J\-Dhttps.proxyPort=proxyport\f[R] options can be specified on the
|
|
command line for proxy tunneling.
|
|
.PP
|
|
\f[B]Note:\f[R]
|
|
.PP
|
|
This option can be used independently of a keystore.
|
|
.RE
|
|
.TP
|
|
.B \f[CB]\-printcertreq\f[R]
|
|
The following are the available options for the \f[CB]\-printcertreq\f[R]
|
|
command:
|
|
.RS
|
|
.IP \[bu] 2
|
|
{\f[CB]\-file\f[R] \f[I]file\f[R]}: Input file name
|
|
.IP \[bu] 2
|
|
{\f[CB]\-v\f[R]}: Verbose output
|
|
.PP
|
|
Use the \f[CB]\-printcertreq\f[R] command to print the contents of a PKCS
|
|
#10 format certificate request, which can be generated by the
|
|
\f[CB]keytool\ \-certreq\f[R] command.
|
|
The command reads the request from file.
|
|
If there is no file, then the request is read from the standard input.
|
|
.RE
|
|
.TP
|
|
.B \f[CB]\-printcrl\f[R]
|
|
The following are the available options for the \f[CB]\-printcrl\f[R]
|
|
command:
|
|
.RS
|
|
.IP \[bu] 2
|
|
{\f[CB]\-file\ crl\f[R]}: Input file name
|
|
.IP \[bu] 2
|
|
{\f[CB]\-v\f[R]}: Verbose output
|
|
.PP
|
|
Use the \f[CB]\-printcrl\f[R] command to read the Certificate Revocation
|
|
List (CRL) from \f[CB]\-file\ crl\f[R] .
|
|
A CRL is a list of the digital certificates that were revoked by the CA
|
|
that issued them.
|
|
The CA generates the \f[CB]crl\f[R] file.
|
|
.PP
|
|
\f[B]Note:\f[R]
|
|
.PP
|
|
This option can be used independently of a keystore.
|
|
.RE
|
|
.SH COMMANDS FOR MANAGING THE KEYSTORE
|
|
.TP
|
|
.B \f[CB]\-storepasswd\f[R]
|
|
The following are the available options for the \f[CB]\-storepasswd\f[R]
|
|
command:
|
|
.RS
|
|
.IP \[bu] 2
|
|
[\f[CB]\-new\f[R] \f[I]arg\f[R]]: New password
|
|
.IP \[bu] 2
|
|
{\f[CB]\-keystore\f[R] \f[I]keystore\f[R]}: Keystore name
|
|
.IP \[bu] 2
|
|
{\f[CB]\-cacerts\f[R]}: Access the cacerts keystore
|
|
.IP \[bu] 2
|
|
[\f[CB]\-storepass\f[R] \f[I]arg\f[R]]: Keystore password
|
|
.IP \[bu] 2
|
|
{\f[CB]\-storetype\f[R] \f[I]type\f[R]}: Keystore type
|
|
.IP \[bu] 2
|
|
{\f[CB]\-providername\f[R] \f[I]name\f[R]}: Provider name
|
|
.IP \[bu] 2
|
|
{\f[CB]\-addprovider\f[R] \f[I]name\f[R] [\f[CB]\-providerarg\f[R]
|
|
\f[I]arg\f[R]]}: Add security provider by name (such as SunPKCS11) with
|
|
an optional configure argument.
|
|
.IP \[bu] 2
|
|
{\f[CB]\-providerclass\f[R] \f[I]class\f[R] [\f[CB]\-providerarg\f[R]
|
|
\f[I]arg\f[R]]}: Add security provider by fully qualified class name with
|
|
an optional configure argument.
|
|
.IP \[bu] 2
|
|
{\f[CB]\-providerpath\f[R] \f[I]list\f[R]}: Provider classpath
|
|
.IP \[bu] 2
|
|
{\f[CB]\-v\f[R]}: Verbose output
|
|
.PP
|
|
Use the \f[CB]\-storepasswd\f[R] command to change the password used to
|
|
protect the integrity of the keystore contents.
|
|
The new password is set by \f[CB]\-new\f[R] \f[I]arg\f[R] and must contain
|
|
at least six characters.
|
|
.RE
|
|
.TP
|
|
.B \f[CB]\-keypasswd\f[R]
|
|
The following are the available options for the \f[CB]\-keypasswd\f[R]
|
|
command:
|
|
.RS
|
|
.IP \[bu] 2
|
|
{\f[CB]\-alias\f[R] \f[I]alias\f[R]}: Alias name of the entry to process
|
|
.IP \[bu] 2
|
|
[\f[CB]\-keypass\f[R] \f[I]old_keypass\f[R]]: Key password
|
|
.IP \[bu] 2
|
|
[\f[CB]\-new\f[R] \f[I]new_keypass\f[R]]: New password
|
|
.IP \[bu] 2
|
|
{\f[CB]\-keystore\f[R] \f[I]keystore\f[R]}: Keystore name
|
|
.IP \[bu] 2
|
|
{\f[CB]\-storepass\f[R] \f[I]arg\f[R]}: Keystore password
|
|
.IP \[bu] 2
|
|
{\f[CB]\-storetype\f[R] \f[I]type\f[R]}: Keystore type
|
|
.IP \[bu] 2
|
|
{\f[CB]\-providername\f[R] \f[I]name\f[R]}: Provider name
|
|
.IP \[bu] 2
|
|
{\f[CB]\-addprovider\f[R] \f[I]name\f[R] [\f[CB]\-providerarg\f[R]
|
|
\f[I]arg\f[R]]}: Add security provider by name (such as SunPKCS11) with
|
|
an optional configure argument.
|
|
.IP \[bu] 2
|
|
{\f[CB]\-providerclass\f[R] \f[I]class\f[R] [\f[CB]\-providerarg\f[R]
|
|
\f[I]arg\f[R]]}: Add security provider by fully qualified class name with
|
|
an optional configure argument.
|
|
.IP \[bu] 2
|
|
{\f[CB]\-providerpath\f[R] \f[I]list\f[R]}: Provider classpath
|
|
.IP \[bu] 2
|
|
{\f[CB]\-v\f[R]}: Verbose output
|
|
.PP
|
|
Use the \f[CB]\-keypasswd\f[R] command to change the password (under which
|
|
private/secret keys identified by \f[CB]\-alias\f[R] are protected) from
|
|
\f[CB]\-keypass\f[R] \f[I]old_keypass\f[R] to \f[CB]\-new\f[R]
|
|
\f[I]new_keypass\f[R].
|
|
The password value must contain at least six characters.
|
|
.PP
|
|
If the \f[CB]\-keypass\f[R] option isn\[aq]t provided at the command line
|
|
and the \f[CB]\-keypass\f[R] password is different from the keystore
|
|
password (\f[CB]\-storepass\f[R] \f[I]arg\f[R]), then the user is prompted
|
|
for it.
|
|
.PP
|
|
If the \f[CB]\-new\f[R] option isn\[aq]t provided at the command line,
|
|
then the user is prompted for it.
|
|
.RE
|
|
.TP
|
|
.B \f[CB]\-delete\f[R]
|
|
The following are the available options for the \f[CB]\-delete\f[R]
|
|
command:
|
|
.RS
|
|
.IP \[bu] 2
|
|
[\f[CB]\-alias\f[R] \f[I]alias\f[R]]: Alias name of the entry to process
|
|
.IP \[bu] 2
|
|
{\f[CB]\-keystore\f[R] \f[I]keystore\f[R]}: Keystore name
|
|
.IP \[bu] 2
|
|
{\f[CB]\-cacerts\f[R]}: Access the cacerts keystore
|
|
.IP \[bu] 2
|
|
[\f[CB]\-storepass\f[R] \f[I]arg\f[R]]: Keystore password
|
|
.IP \[bu] 2
|
|
{\f[CB]\-storetype\f[R] \f[I]type\f[R]}: Keystore type
|
|
.IP \[bu] 2
|
|
{\f[CB]\-providername\f[R] \f[I]name\f[R]}: Provider name
|
|
.IP \[bu] 2
|
|
{\f[CB]\-addprovider\f[R] \f[I]name\f[R] [\f[CB]\-providerarg\f[R]
|
|
\f[I]arg\f[R]]}: Add security provider by name (such as SunPKCS11) with
|
|
an optional configure argument.
|
|
.IP \[bu] 2
|
|
{\f[CB]\-providerclass\f[R] \f[I]class\f[R] [\f[CB]\-providerarg\f[R]
|
|
\f[I]arg\f[R]]}: Add security provider by fully qualified class name with
|
|
an optional configure argument.
|
|
.IP \[bu] 2
|
|
{\f[CB]\-providerpath\f[R] \f[I]list\f[R]}: Provider classpath
|
|
.IP \[bu] 2
|
|
{\f[CB]\-v\f[R]}: Verbose output
|
|
.IP \[bu] 2
|
|
{\f[CB]\-protected\f[R]}: Password provided through a protected mechanism
|
|
.PP
|
|
Use the \f[CB]\-delete\f[R] command to delete the \f[CB]\-alias\f[R]
|
|
\f[I]alias\f[R] entry from the keystore.
|
|
When not provided at the command line, the user is prompted for the
|
|
\f[CB]alias\f[R].
|
|
.RE
|
|
.TP
|
|
.B \f[CB]\-changealias\f[R]
|
|
The following are the available options for the \f[CB]\-changealias\f[R]
|
|
command:
|
|
.RS
|
|
.IP \[bu] 2
|
|
{\f[CB]\-alias\f[R] \f[I]alias\f[R]}: Alias name of the entry to process
|
|
.IP \[bu] 2
|
|
[\f[CB]\-destalias\f[R] \f[I]alias\f[R]]: Destination alias
|
|
.IP \[bu] 2
|
|
[\f[CB]\-keypass\f[R] \f[I]arg\f[R]]: Key password
|
|
.IP \[bu] 2
|
|
{\f[CB]\-keystore\f[R] \f[I]keystore\f[R]}: Keystore name
|
|
.IP \[bu] 2
|
|
{\f[CB]\-cacerts\f[R]}: Access the cacerts keystore
|
|
.IP \[bu] 2
|
|
[\f[CB]\-storepass\f[R] \f[I]arg\f[R]]: Keystore password
|
|
.IP \[bu] 2
|
|
{\f[CB]\-storetype\f[R] \f[I]type\f[R]}: Keystore type
|
|
.IP \[bu] 2
|
|
{\f[CB]\-providername\f[R] \f[I]name\f[R]}: Provider name
|
|
.IP \[bu] 2
|
|
{\f[CB]\-addprovider\f[R] \f[I]name\f[R] [\f[CB]\-providerarg\f[R]
|
|
\f[I]arg\f[R]]}: Add security provider by name (such as SunPKCS11) with
|
|
an optional configure argument.
|
|
.IP \[bu] 2
|
|
{\f[CB]\-providerclass\f[R] \f[I]class\f[R] [\f[CB]\-providerarg\f[R]
|
|
\f[I]arg\f[R]]}: Add security provider by fully qualified class name with
|
|
an optional configure argument.
|
|
.IP \[bu] 2
|
|
{\f[CB]\-providerpath\f[R] \f[I]list\f[R]}: Provider classpath
|
|
.IP \[bu] 2
|
|
{\f[CB]\-v\f[R]}: Verbose output
|
|
.IP \[bu] 2
|
|
{\f[CB]\-protected\f[R]}: Password provided through a protected mechanism
|
|
.PP
|
|
Use the \f[CB]\-changealias\f[R] command to move an existing keystore
|
|
entry from \f[CB]\-alias\f[R] \f[I]alias\f[R] to a new \f[CB]\-destalias\f[R]
|
|
\f[I]alias\f[R].
|
|
If a destination alias is not provided, then the command prompts you for
|
|
one.
|
|
If the original entry is protected with an entry password, then the
|
|
password can be supplied with the \f[CB]\-keypass\f[R] option.
|
|
If a key password is not provided, then the \f[CB]\-storepass\f[R] (if
|
|
provided) is attempted first.
|
|
If the attempt fails, then the user is prompted for a password.
|
|
.RE
|
|
.SH COMMANDS FOR DISPLAYING SECURITY\-RELATED INFORMATION
|
|
.TP
|
|
.B \f[CB]\-showinfo\f[R]
|
|
The following are the available options for the \f[CB]\-showinfo\f[R]
|
|
command:
|
|
.RS
|
|
.IP \[bu] 2
|
|
{\f[CB]\-tls\f[R]}: Displays TLS configuration information
|
|
.IP \[bu] 2
|
|
{\f[CB]\-v\f[R]}: Verbose output
|
|
.PP
|
|
Use the \f[CB]\-showinfo\f[R] command to display various security\-related
|
|
information.
|
|
The \f[CB]\-tls\f[R] option displays TLS configurations, such as the list
|
|
of enabled protocols and cipher suites.
|
|
.RE
|
|
.SH COMMANDS FOR DISPLAYING HELP INFORMATION
|
|
.PP
|
|
You can use \f[CB]\-\-help\f[R] to display a list of \f[CB]keytool\f[R]
|
|
commands or to display help information about a specific
|
|
\f[CB]keytool\f[R] command.
|
|
.IP \[bu] 2
|
|
To display a list of \f[CB]keytool\f[R] commands, enter:
|
|
.RS 2
|
|
.RS
|
|
.PP
|
|
\f[CB]keytool\ \-\-help\f[R]
|
|
.RE
|
|
.RE
|
|
.IP \[bu] 2
|
|
To display help information about a specific \f[CB]keytool\f[R] command,
|
|
enter:
|
|
.RS 2
|
|
.RS
|
|
.PP
|
|
\f[CB]keytool\ \-<command>\ \-\-help\f[R]
|
|
.RE
|
|
.RE
|
|
.SH COMMON COMMAND OPTIONS
|
|
.PP
|
|
The \f[CB]\-v\f[R] option can appear for all commands except
|
|
\f[CB]\-\-help\f[R].
|
|
When the \f[CB]\-v\f[R] option appears, it signifies verbose mode, which
|
|
means that more information is provided in the output.
|
|
.PP
|
|
The \f[CB]\-J\f[R]\f[I]option\f[R] argument can appear for any command.
|
|
When the \f[CB]\-J\f[R]\f[I]option\f[R] is used, the specified
|
|
\f[I]option\f[R] string is passed directly to the Java interpreter.
|
|
This option doesn\[aq]t contain any spaces.
|
|
It\[aq]s useful for adjusting the execution environment or memory usage.
|
|
For a list of possible interpreter options, enter \f[CB]java\ \-h\f[R] or
|
|
\f[CB]java\ \-X\f[R] at the command line.
|
|
.PP
|
|
These options can appear for all commands operating on a keystore:
|
|
.TP
|
|
.B \f[CB]\-storetype\f[R] \f[I]storetype\f[R]
|
|
This qualifier specifies the type of keystore to be instantiated.
|
|
.RS
|
|
.RE
|
|
.TP
|
|
.B \f[CB]\-keystore\f[R] \f[I]keystore\f[R]
|
|
The keystore location.
|
|
.RS
|
|
.PP
|
|
If the JKS \f[CB]storetype\f[R] is used and a keystore file doesn\[aq]t
|
|
yet exist, then certain \f[CB]keytool\f[R] commands can result in a new
|
|
keystore file being created.
|
|
For example, if \f[CB]keytool\ \-genkeypair\f[R] is called and the
|
|
\f[CB]\-keystore\f[R] option isn\[aq]t specified, the default keystore
|
|
file named \f[CB]\&.keystore\f[R] is created in the user\[aq]s home
|
|
directory if it doesn\[aq]t already exist.
|
|
Similarly, if the \f[CB]\-keystore\ ks_file\f[R] option is specified but
|
|
\f[CB]ks_file\f[R] doesn\[aq]t exist, then it is created.
|
|
For more information on the JKS \f[CB]storetype\f[R], see the
|
|
\f[B]KeyStore Implementation\f[R] section in \f[B]KeyStore aliases\f[R].
|
|
.PP
|
|
Note that the input stream from the \f[CB]\-keystore\f[R] option is passed
|
|
to the \f[CB]KeyStore.load\f[R] method.
|
|
If \f[CB]NONE\f[R] is specified as the URL, then a null stream is passed
|
|
to the \f[CB]KeyStore.load\f[R] method.
|
|
\f[CB]NONE\f[R] should be specified if the keystore isn\[aq]t file\-based.
|
|
For example, when the keystore resides on a hardware token device.
|
|
.RE
|
|
.TP
|
|
.B \f[CB]\-cacerts\f[R] \f[I]cacerts\f[R]
|
|
Operates on the \f[I]cacerts\f[R] keystore .
|
|
This option is equivalent to \f[CB]\-keystore\f[R]
|
|
\f[I]path_to_cacerts\f[R] \f[CB]\-storetype\f[R] \f[I]type_of_cacerts\f[R].
|
|
An error is reported if the \f[CB]\-keystore\f[R] or \f[CB]\-storetype\f[R]
|
|
option is used with the \f[CB]\-cacerts\f[R] option.
|
|
.RS
|
|
.RE
|
|
.TP
|
|
.B \f[CB]\-storepass\f[R] [\f[CB]:env\f[R] | \f[CB]:file\f[R] ] \f[I]argument\f[R]
|
|
The password that is used to protect the integrity of the keystore.
|
|
.RS
|
|
.PP
|
|
If the modifier \f[CB]env\f[R] or \f[CB]file\f[R] isn\[aq]t specified, then
|
|
the password has the value \f[I]argument\f[R], which must contain at
|
|
least six characters.
|
|
Otherwise, the password is retrieved as follows:
|
|
.IP \[bu] 2
|
|
\f[CB]env\f[R]: Retrieve the password from the environment variable named
|
|
\f[I]argument\f[R].
|
|
.IP \[bu] 2
|
|
\f[CB]file\f[R]: Retrieve the password from the file named
|
|
\f[I]argument\f[R].
|
|
.PP
|
|
\f[B]Note:\f[R] All other options that require passwords, such as
|
|
\f[CB]\-keypass\f[R], \f[CB]\-srckeypass\f[R], \f[CB]\-destkeypass\f[R],
|
|
\f[CB]\-srcstorepass\f[R], and \f[CB]\-deststorepass\f[R], accept the
|
|
\f[CB]env\f[R] and \f[CB]file\f[R] modifiers.
|
|
Remember to separate the password option and the modifier with a colon
|
|
(:).
|
|
.PP
|
|
The password must be provided to all commands that access the keystore
|
|
contents.
|
|
For such commands, when the \f[CB]\-storepass\f[R] option isn\[aq]t
|
|
provided at the command line, the user is prompted for it.
|
|
.PP
|
|
When retrieving information from the keystore, the password is optional.
|
|
If a password is not specified, then the integrity of the retrieved
|
|
information can\[aq]t be verified and a warning is displayed.
|
|
.RE
|
|
.TP
|
|
.B \f[CB]\-providername\f[R] \f[I]name\f[R]
|
|
Used to identify a cryptographic service provider\[aq]s name when listed
|
|
in the security properties file.
|
|
.RS
|
|
.RE
|
|
.TP
|
|
.B \f[CB]\-addprovider\f[R] \f[I]name\f[R]
|
|
Used to add a security provider by name (such as SunPKCS11) .
|
|
.RS
|
|
.RE
|
|
.TP
|
|
.B \f[CB]\-providerclass\f[R] \f[I]class\f[R]
|
|
Used to specify the name of a cryptographic service provider\[aq]s
|
|
master class file when the service provider isn\[aq]t listed in the
|
|
security properties file.
|
|
.RS
|
|
.RE
|
|
.TP
|
|
.B \f[CB]\-providerpath\f[R] \f[I]list\f[R]
|
|
Used to specify the provider classpath.
|
|
.RS
|
|
.RE
|
|
.TP
|
|
.B \f[CB]\-providerarg\f[R] \f[I]arg\f[R]
|
|
Used with the \f[CB]\-addprovider\f[R] or \f[CB]\-providerclass\f[R] option
|
|
to represent an optional string input argument for the constructor of
|
|
\f[I]class\f[R] name.
|
|
.RS
|
|
.RE
|
|
.TP
|
|
.B \f[CB]\-protected=true\f[R]|\f[CB]false\f[R]
|
|
Specify this value as \f[CB]true\f[R] when a password must be specified by
|
|
way of a protected authentication path, such as a dedicated PIN reader.
|
|
Because there are two keystores involved in the
|
|
\f[CB]\-importkeystore\f[R] command, the following two options,
|
|
\f[CB]\-srcprotected\f[R] and \f[CB]\-destprotected\f[R], are provided for
|
|
the source keystore and the destination keystore respectively.
|
|
.RS
|
|
.RE
|
|
.TP
|
|
.B \f[CB]\-ext\f[R] {\f[I]name\f[R]{\f[CB]:critical\f[R]} {\f[CB]=\f[R]\f[I]value\f[R]}}
|
|
Denotes an X.509 certificate extension.
|
|
The option can be used in \f[CB]\-genkeypair\f[R] and \f[CB]\-gencert\f[R]
|
|
to embed extensions into the generated certificate, or in
|
|
\f[CB]\-certreq\f[R] to show what extensions are requested in the
|
|
certificate request.
|
|
The option can appear multiple times.
|
|
The \f[I]name\f[R] argument can be a supported extension name (see
|
|
\f[B]Supported Named Extensions\f[R]) or an arbitrary OID number.
|
|
The \f[I]value\f[R] argument, when provided, denotes the argument for the
|
|
extension.
|
|
When \f[I]value\f[R] is omitted, the default value of the extension or
|
|
the extension itself requires no argument.
|
|
The \f[CB]:critical\f[R] modifier, when provided, means the
|
|
extension\[aq]s \f[CB]isCritical\f[R] attribute is \f[CB]true\f[R];
|
|
otherwise, it is \f[CB]false\f[R].
|
|
You can use \f[CB]:c\f[R] in place of \f[CB]:critical\f[R].
|
|
.RS
|
|
.RE
|
|
.TP
|
|
.B \f[CB]\-conf\f[R] \f[I]file\f[R]
|
|
Specifies a pre\-configured options file.
|
|
.RS
|
|
.RE
|
|
.SH PRE\-CONFIGURED OPTIONS FILE
|
|
.PP
|
|
A pre\-configured options file is a Java properties file that can be
|
|
specified with the \f[CB]\-conf\f[R] option.
|
|
Each property represents the default option(s) for a keytool command
|
|
using "keytool.\f[I]command_name\f[R]" as the property name.
|
|
A special property named "keytool.all" represents the default option(s)
|
|
applied to all commands.
|
|
A property value can include \f[CB]${prop}\f[R] which will be expanded to
|
|
the system property associated with it.
|
|
If an option value includes white spaces inside, it should be surrounded
|
|
by quotation marks (" or \[aq]).
|
|
All property names must be in lower case.
|
|
.PP
|
|
When \f[CB]keytool\f[R] is launched with a pre\-configured options file,
|
|
the value for "keytool.all" (if it exists) is prepended to the
|
|
\f[CB]keytool\f[R] command line first, with the value for the command name
|
|
(if it exists) comes next, and the existing options on the command line
|
|
at last.
|
|
For a single\-valued option, this allows the property for a specific
|
|
command to override the "keytool.all" value, and the value specified on
|
|
the command line to override both.
|
|
For multiple\-valued options, all of them will be used by
|
|
\f[CB]keytool\f[R].
|
|
.PP
|
|
For example, given the following file named \f[CB]preconfig\f[R]:
|
|
.IP
|
|
.nf
|
|
\f[CB]
|
|
\ \ \ \ #\ A\ tiny\ pre\-configured\ options\ file
|
|
\ \ \ \ keytool.all\ =\ \-keystore\ ${user.home}/ks
|
|
\ \ \ \ keytool.list\ =\ \-v
|
|
\ \ \ \ keytool.genkeypair\ =\ \-keyalg\ rsa
|
|
\f[R]
|
|
.fi
|
|
.PP
|
|
\f[CB]keytool\ \-conf\ preconfig\ \-list\f[R] is identical to
|
|
.RS
|
|
.PP
|
|
\f[CB]keytool\ \-keystore\ ~/ks\ \-v\ \-list\f[R]
|
|
.RE
|
|
.PP
|
|
\f[CB]keytool\ \-conf\ preconfig\ \-genkeypair\ \-alias\ me\f[R] is
|
|
identical to
|
|
.RS
|
|
.PP
|
|
\f[CB]keytool\ \-keystore\ ~/ks\ \-keyalg\ rsa\ \-genkeypair\ \-alias\ me\f[R]
|
|
.RE
|
|
.PP
|
|
\f[CB]keytool\ \-conf\ preconfig\ \-genkeypair\ \-alias\ you\ \-keyalg\ ec\f[R]
|
|
is identical to
|
|
.RS
|
|
.PP
|
|
\f[CB]keytool\ \-keystore\ ~/ks\ \-keyalg\ rsa\ \-genkeypair\ \-alias\ you\ \-keyalg\ ec\f[R]
|
|
.RE
|
|
.PP
|
|
which is equivalent to
|
|
.RS
|
|
.PP
|
|
\f[CB]keytool\ \-keystore\ ~/ks\ \-genkeypair\ \-alias\ you\ \-keyalg\ ec\f[R]
|
|
.RE
|
|
.PP
|
|
because \f[CB]\-keyalg\f[R] is a single\-valued option and the \f[CB]ec\f[R]
|
|
value specified on the command line overrides the preconfigured options
|
|
file.
|
|
.SH EXAMPLES OF OPTION VALUES
|
|
.PP
|
|
The following examples show the defaults for various option values:
|
|
.IP
|
|
.nf
|
|
\f[CB]
|
|
\-alias\ "mykey"
|
|
|
|
\-keysize
|
|
\ \ \ \ 2048\ (when\ using\ \-genkeypair\ and\ \-keyalg\ is\ "RSA")
|
|
\ \ \ \ 2048\ (when\ using\ \-genkeypair\ and\ \-keyalg\ is\ "DSA")
|
|
\ \ \ \ 256\ (when\ using\ \-genkeypair\ and\ \-keyalg\ is\ "EC")
|
|
\ \ \ \ 56\ (when\ using\ \-genseckey\ and\ \-keyalg\ is\ "DES")
|
|
\ \ \ \ 168\ (when\ using\ \-genseckey\ and\ \-keyalg\ is\ "DESede")
|
|
|
|
\-validity\ 90
|
|
|
|
\-keystore\ <the\ file\ named\ .keystore\ in\ the\ user\[aq]s\ home\ directory>
|
|
|
|
\-destkeystore\ <the\ file\ named\ .keystore\ in\ the\ user\[aq]s\ home\ directory>
|
|
|
|
\-storetype\ <the\ value\ of\ the\ "keystore.type"\ property\ in\ the
|
|
\ \ \ \ security\ properties\ file,\ which\ is\ returned\ by\ the\ static
|
|
\ \ \ \ getDefaultType\ method\ in\ java.security.KeyStore>
|
|
|
|
\-file
|
|
\ \ \ \ stdin\ (if\ reading)
|
|
\ \ \ \ stdout\ (if\ writing)
|
|
|
|
\-protected\ false
|
|
\f[R]
|
|
.fi
|
|
.PP
|
|
When generating a certificate or a certificate request, the default
|
|
signature algorithm (\f[CB]\-sigalg\f[R] option) is derived from the
|
|
algorithm of the underlying private key to provide an appropriate level
|
|
of security strength as follows:
|
|
.PP
|
|
.TS
|
|
tab(@);
|
|
l l l.
|
|
T{
|
|
keyalg
|
|
T}@T{
|
|
keysize
|
|
T}@T{
|
|
default sigalg
|
|
T}
|
|
_
|
|
T{
|
|
DSA
|
|
T}@T{
|
|
any size
|
|
T}@T{
|
|
SHA256withDSA
|
|
T}
|
|
T{
|
|
RSA
|
|
T}@T{
|
|
<= 3072
|
|
T}@T{
|
|
SHA256withRSA
|
|
T}
|
|
T{
|
|
T}@T{
|
|
<= 7680
|
|
T}@T{
|
|
SHA384withRSA
|
|
T}
|
|
T{
|
|
T}@T{
|
|
> 7680
|
|
T}@T{
|
|
SHA512withRSA
|
|
T}
|
|
T{
|
|
EC
|
|
T}@T{
|
|
< 384
|
|
T}@T{
|
|
SHA256withECDSA
|
|
T}
|
|
T{
|
|
T}@T{
|
|
< 512
|
|
T}@T{
|
|
SHA384withECDSA
|
|
T}
|
|
T{
|
|
T}@T{
|
|
= 512
|
|
T}@T{
|
|
SHA512withECDSA
|
|
T}
|
|
.TE
|
|
.PP
|
|
\f[B]Note:\f[R]
|
|
.PP
|
|
To improve out of the box security, default key size and signature
|
|
algorithm names are periodically updated to stronger values with each
|
|
release of the JDK.
|
|
If interoperability with older releases of the JDK is important, make
|
|
sure that the defaults are supported by those releases.
|
|
Alternatively, you can use the \f[CB]\-keysize\f[R] or \f[CB]\-sigalg\f[R]
|
|
options to override the default values at your own risk.
|
|
.SH SUPPORTED NAMED EXTENSIONS
|
|
.PP
|
|
The \f[CB]keytool\f[R] command supports these named extensions.
|
|
The names aren\[aq]t case\-sensitive.
|
|
.TP
|
|
.B \f[CB]BC\f[R] or \f[CB]BasicContraints\f[R]
|
|
Values:
|
|
.RS
|
|
.PP
|
|
The full form is
|
|
\f[CB]ca:\f[R]{\f[CB]true\f[R]|\f[CB]false\f[R]}[\f[CB],pathlen:\f[R]\f[I]len\f[R]]
|
|
or \f[I]len\f[R], which is short for
|
|
\f[CB]ca:true,pathlen:\f[R]\f[I]len\f[R].
|
|
.PP
|
|
When \f[I]len\f[R] is omitted, the resulting value is \f[CB]ca:true\f[R].
|
|
.RE
|
|
.TP
|
|
.B \f[CB]KU\f[R] or \f[CB]KeyUsage\f[R]
|
|
Values:
|
|
.RS
|
|
.PP
|
|
\f[I]usage\f[R](\f[CB],\f[R] \f[I]usage\f[R])*
|
|
.PP
|
|
\f[I]usage\f[R] can be one of the following:
|
|
.IP \[bu] 2
|
|
\f[CB]digitalSignature\f[R]
|
|
.IP \[bu] 2
|
|
\f[CB]nonRepudiation\f[R] (\f[CB]contentCommitment\f[R])
|
|
.IP \[bu] 2
|
|
\f[CB]keyEncipherment\f[R]
|
|
.IP \[bu] 2
|
|
\f[CB]dataEncipherment\f[R]
|
|
.IP \[bu] 2
|
|
\f[CB]keyAgreement\f[R]
|
|
.IP \[bu] 2
|
|
\f[CB]keyCertSign\f[R]
|
|
.IP \[bu] 2
|
|
\f[CB]cRLSign\f[R]
|
|
.IP \[bu] 2
|
|
\f[CB]encipherOnly\f[R]
|
|
.IP \[bu] 2
|
|
\f[CB]decipherOnly\f[R]
|
|
.PP
|
|
Provided there is no ambiguity, the \f[I]usage\f[R] argument can be
|
|
abbreviated with the first few letters (such as \f[CB]dig\f[R] for
|
|
\f[CB]digitalSignature\f[R]) or in camel\-case style (such as \f[CB]dS\f[R]
|
|
for \f[CB]digitalSignature\f[R] or \f[CB]cRLS\f[R] for \f[CB]cRLSign\f[R]).
|
|
The \f[I]usage\f[R] values are case\-sensitive.
|
|
.RE
|
|
.TP
|
|
.B \f[CB]EKU\f[R] or \f[CB]ExtendedKeyUsage\f[R]
|
|
Values:
|
|
.RS
|
|
.PP
|
|
\f[I]usage\f[R](\f[CB],\f[R] \f[I]usage\f[R])*
|
|
.PP
|
|
\f[I]usage\f[R] can be one of the following:
|
|
.IP \[bu] 2
|
|
\f[CB]anyExtendedKeyUsage\f[R]
|
|
.IP \[bu] 2
|
|
\f[CB]serverAuth\f[R]
|
|
.IP \[bu] 2
|
|
\f[CB]clientAuth\f[R]
|
|
.IP \[bu] 2
|
|
\f[CB]codeSigning\f[R]
|
|
.IP \[bu] 2
|
|
\f[CB]emailProtection\f[R]
|
|
.IP \[bu] 2
|
|
\f[CB]timeStamping\f[R]
|
|
.IP \[bu] 2
|
|
\f[CB]OCSPSigning\f[R]
|
|
.IP \[bu] 2
|
|
Any OID string
|
|
.PP
|
|
Provided there is no ambiguity, the \f[I]usage\f[R] argument can be
|
|
abbreviated with the first few letters or in camel\-case style.
|
|
The \f[I]usage\f[R] values are case\-sensitive.
|
|
.RE
|
|
.TP
|
|
.B \f[CB]SAN\f[R] or \f[CB]SubjectAlternativeName\f[R]
|
|
Values:
|
|
.RS
|
|
.PP
|
|
\f[I]type\f[R]\f[CB]:\f[R]\f[I]value\f[R](\f[CB],\f[R]
|
|
\f[I]type\f[R]\f[CB]:\f[R]\f[I]value\f[R])*
|
|
.PP
|
|
\f[I]type\f[R] can be one of the following:
|
|
.IP \[bu] 2
|
|
\f[CB]EMAIL\f[R]
|
|
.IP \[bu] 2
|
|
\f[CB]URI\f[R]
|
|
.IP \[bu] 2
|
|
\f[CB]DNS\f[R]
|
|
.IP \[bu] 2
|
|
\f[CB]IP\f[R]
|
|
.IP \[bu] 2
|
|
\f[CB]OID\f[R]
|
|
.PP
|
|
The \f[I]value\f[R] argument is the string format value for the
|
|
\f[I]type\f[R].
|
|
.RE
|
|
.TP
|
|
.B \f[CB]IAN\f[R] or \f[CB]IssuerAlternativeName\f[R]
|
|
Values:
|
|
.RS
|
|
.PP
|
|
Same as \f[CB]SAN\f[R] or \f[CB]SubjectAlternativeName\f[R].
|
|
.RE
|
|
.TP
|
|
.B \f[CB]SIA\f[R] or \f[CB]SubjectInfoAccess\f[R]
|
|
Values:
|
|
.RS
|
|
.PP
|
|
\f[I]method\f[R]\f[CB]:\f[R]\f[I]location\-type\f[R]\f[CB]:\f[R]\f[I]location\-value\f[R](\f[CB],\f[R]
|
|
\f[I]method\f[R]\f[CB]:\f[R]\f[I]location\-type\f[R]\f[CB]:\f[R]\f[I]location\-value\f[R])*
|
|
.PP
|
|
\f[I]method\f[R] can be one of the following:
|
|
.IP \[bu] 2
|
|
\f[CB]timeStamping\f[R]
|
|
.IP \[bu] 2
|
|
\f[CB]caRepository\f[R]
|
|
.IP \[bu] 2
|
|
Any OID
|
|
.PP
|
|
The \f[I]location\-type\f[R] and \f[I]location\-value\f[R] arguments can
|
|
be any \f[I]type\f[R]\f[CB]:\f[R]\f[I]value\f[R] supported by the
|
|
\f[CB]SubjectAlternativeName\f[R] extension.
|
|
.RE
|
|
.TP
|
|
.B \f[CB]AIA\f[R] or \f[CB]AuthorityInfoAccess\f[R]
|
|
Values:
|
|
.RS
|
|
.PP
|
|
Same as \f[CB]SIA\f[R] or \f[CB]SubjectInfoAccess\f[R].
|
|
.PP
|
|
The \f[I]method\f[R] argument can be one of the following:
|
|
.IP \[bu] 2
|
|
\f[CB]ocsp\f[R]
|
|
.IP \[bu] 2
|
|
\f[CB]caIssuers\f[R]
|
|
.IP \[bu] 2
|
|
Any OID
|
|
.RE
|
|
.PP
|
|
When \f[I]name\f[R] is OID, the value is the hexadecimal dumped Definite
|
|
Encoding Rules (DER) encoding of the \f[CB]extnValue\f[R] for the
|
|
extension excluding the OCTET STRING type and length bytes.
|
|
Other than standard hexadecimal numbers (0\-9, a\-f, A\-F), any extra
|
|
characters are ignored in the HEX string.
|
|
Therefore, both 01:02:03:04 and 01020304 are accepted as identical
|
|
values.
|
|
When there is no value, the extension has an empty value field.
|
|
.PP
|
|
A special name \f[CB]honored\f[R], used only in \f[CB]\-gencert\f[R],
|
|
denotes how the extensions included in the certificate request should be
|
|
honored.
|
|
The value for this name is a comma\-separated list of \f[CB]all\f[R] (all
|
|
requested extensions are honored),
|
|
\f[I]name\f[R]{\f[CB]:\f[R][\f[CB]critical\f[R]|\f[CB]non\-critical\f[R]]} (the
|
|
named extension is honored, but it uses a different \f[CB]isCritical\f[R]
|
|
attribute), and \f[CB]\-name\f[R] (used with \f[CB]all\f[R], denotes an
|
|
exception).
|
|
Requested extensions aren\[aq]t honored by default.
|
|
.PP
|
|
If, besides the\f[CB]\-ext\ honored\f[R] option, another named or OID
|
|
\f[CB]\-ext\f[R] option is provided, this extension is added to those
|
|
already honored.
|
|
However, if this name (or OID) also appears in the honored value, then
|
|
its value and criticality override that in the request.
|
|
If an extension of the same type is provided multiple times through
|
|
either a name or an OID, only the last extension is used.
|
|
.PP
|
|
The \f[CB]subjectKeyIdentifier\f[R] extension is always created.
|
|
For non\-self\-signed certificates, the \f[CB]authorityKeyIdentifier\f[R]
|
|
is created.
|
|
.PP
|
|
\f[B]CAUTION:\f[R]
|
|
.PP
|
|
Users should be aware that some combinations of extensions (and other
|
|
certificate fields) may not conform to the Internet standard.
|
|
See \f[B]Certificate Conformance Warning\f[R].
|
|
.SH EXAMPLES OF TASKS IN CREATING A KEYSTORE
|
|
.PP
|
|
The following examples describe the sequence actions in creating a
|
|
keystore for managing public/private key pairs and certificates from
|
|
trusted entities.
|
|
.IP \[bu] 2
|
|
\f[B]Generating the Key Pair\f[R]
|
|
.IP \[bu] 2
|
|
\f[B]Requesting a Signed Certificate from a CA\f[R]
|
|
.IP \[bu] 2
|
|
\f[B]Importing a Certificate for the CA\f[R]
|
|
.IP \[bu] 2
|
|
\f[B]Importing the Certificate Reply from the CA\f[R]
|
|
.IP \[bu] 2
|
|
\f[B]Exporting a Certificate That Authenticates the Public Key\f[R]
|
|
.IP \[bu] 2
|
|
\f[B]Importing the Keystore\f[R]
|
|
.IP \[bu] 2
|
|
\f[B]Generating Certificates for an SSL Server\f[R]
|
|
.SH GENERATING THE KEY PAIR
|
|
.PP
|
|
Create a keystore and then generate the key pair.
|
|
.PP
|
|
You can enter the command as a single line such as the following:
|
|
.RS
|
|
.PP
|
|
\f[CB]keytool\ \-genkeypair\ \-dname\ "cn=myname,\ ou=mygroup,\ o=mycompany,\ c=mycountry"\ \-alias\ business\ \-keyalg\ rsa\ \-keypass\f[R]
|
|
\f[I]password\f[R]
|
|
\f[CB]\-keystore\ /working/mykeystore\ \-storepass\ password\ \-validity\ 180\f[R]
|
|
.RE
|
|
.PP
|
|
The command creates the keystore named \f[CB]mykeystore\f[R] in the
|
|
working directory (provided it doesn\[aq]t already exist), and assigns
|
|
it the password specified by \f[CB]\-keypass\f[R].
|
|
It generates a public/private key pair for the entity whose
|
|
distinguished name is \f[CB]myname\f[R], \f[CB]mygroup\f[R],
|
|
\f[CB]mycompany\f[R], and a two\-letter country code of
|
|
\f[CB]mycountry\f[R].
|
|
It uses the RSA key generation algorithm to create the keys; both are
|
|
2048 bits
|
|
.PP
|
|
The command uses the default SHA256withRSA signature algorithm to create
|
|
a self\-signed certificate that includes the public key and the
|
|
distinguished name information.
|
|
The certificate is valid for 180 days, and is associated with the
|
|
private key in a keystore entry referred to by
|
|
\f[CB]\-alias\ business\f[R].
|
|
The private key is assigned the password specified by
|
|
\f[CB]\-keypass\f[R].
|
|
.PP
|
|
The command is significantly shorter when the option defaults are
|
|
accepted.
|
|
In this case, only \f[CB]\-keyalg\f[R] is required, and the defaults are
|
|
used for unspecified options that have default values.
|
|
You are prompted for any required values.
|
|
You could have the following:
|
|
.RS
|
|
.PP
|
|
\f[CB]keytool\ \-genkeypair\ \-keyalg\ rsa\f[R]
|
|
.RE
|
|
.PP
|
|
In this case, a keystore entry with the alias \f[CB]mykey\f[R] is created,
|
|
with a newly generated key pair and a certificate that is valid for 90
|
|
days.
|
|
This entry is placed in your home directory in a keystore named
|
|
\f[CB]\&.keystore\f[R] .
|
|
\f[CB]\&.keystore\f[R] is created if it doesn\[aq]t already exist.
|
|
You are prompted for the distinguished name information, the keystore
|
|
password, and the private key password.
|
|
.PP
|
|
\f[B]Note:\f[R]
|
|
.PP
|
|
The rest of the examples assume that you responded to the prompts with
|
|
values equal to those specified in the first \f[CB]\-genkeypair\f[R]
|
|
command.
|
|
For example, a distinguished name of
|
|
\f[CB]cn=\f[R]\f[I]myname\f[R]\f[CB],\ ou=\f[R]\f[I]mygroup\f[R]\f[CB],\ o=\f[R]\f[I]mycompany\f[R]\f[CB],\ c=\f[R]\f[I]mycountry\f[R]).
|
|
.SH REQUESTING A SIGNED CERTIFICATE FROM A CA
|
|
.PP
|
|
\f[B]Note:\f[R]
|
|
.PP
|
|
Generating the key pair created a self\-signed certificate; however, a
|
|
certificate is more likely to be trusted by others when it is signed by
|
|
a CA.
|
|
.PP
|
|
To get a CA signature, complete the following process:
|
|
.IP "1." 3
|
|
Generate a CSR:
|
|
.RS 4
|
|
.RS
|
|
.PP
|
|
\f[CB]keytool\ \-certreq\ \-file\ myname.csr\f[R]
|
|
.RE
|
|
.PP
|
|
This creates a CSR for the entity identified by the default alias
|
|
\f[CB]mykey\f[R] and puts the request in the file named
|
|
\f[CB]myname.csr\f[R].
|
|
.RE
|
|
.IP "2." 3
|
|
Submit \f[CB]myname.csr\f[R] to a CA, such as DigiCert.
|
|
.PP
|
|
The CA authenticates you, the requestor (usually offline), and returns a
|
|
certificate, signed by them, authenticating your public key.
|
|
In some cases, the CA returns a chain of certificates, each one
|
|
authenticating the public key of the signer of the previous certificate
|
|
in the chain.
|
|
.SH IMPORTING A CERTIFICATE FOR THE CA
|
|
.PP
|
|
To import a certificate for the CA, complete the following process:
|
|
.IP "1." 3
|
|
Before you import the certificate reply from a CA, you need one or more
|
|
trusted certificates either in your keystore or in the \f[CB]cacerts\f[R]
|
|
keystore file.
|
|
See \f[CB]\-importcert\f[R] in \f[B]Commands\f[R].
|
|
.RS 4
|
|
.IP \[bu] 2
|
|
If the certificate reply is a certificate chain, then you need the top
|
|
certificate of the chain.
|
|
The root CA certificate that authenticates the public key of the CA.
|
|
.IP \[bu] 2
|
|
If the certificate reply is a single certificate, then you need a
|
|
certificate for the issuing CA (the one that signed it).
|
|
If that certificate isn\[aq]t self\-signed, then you need a certificate
|
|
for its signer, and so on, up to a self\-signed root CA certificate.
|
|
.PP
|
|
The \f[CB]cacerts\f[R] keystore ships with a set of root certificates
|
|
issued by the CAs of \f[B]the Oracle Java Root Certificate program\f[R]
|
|
[http://www.oracle.com/technetwork/java/javase/javasecarootcertsprogram\-1876540.html].
|
|
If you request a signed certificate from a CA, and a certificate
|
|
authenticating that CA\[aq]s public key hasn\[aq]t been added to
|
|
\f[CB]cacerts\f[R], then you must import a certificate from that CA as a
|
|
trusted certificate.
|
|
.PP
|
|
A certificate from a CA is usually self\-signed or signed by another CA.
|
|
If it is signed by another CA, you need a certificate that authenticates
|
|
that CA\[aq]s public key.
|
|
.PP
|
|
For example, you have obtained a \f[I]X\f[R]\f[CB]\&.cer\f[R] file from a
|
|
company that is a CA and the file is supposed to be a self\-signed
|
|
certificate that authenticates that CA\[aq]s public key.
|
|
Before you import it as a trusted certificate, you should ensure that
|
|
the certificate is valid by:
|
|
.IP "1." 3
|
|
Viewing it with the \f[CB]keytool\ \-printcert\f[R] command or the
|
|
\f[CB]keytool\ \-importcert\f[R] command without using the
|
|
\f[CB]\-noprompt\f[R] option.
|
|
Make sure that the displayed certificate fingerprints match the expected
|
|
fingerprints.
|
|
.IP "2." 3
|
|
Calling the person who sent the certificate, and comparing the
|
|
fingerprints that you see with the ones that they show or that a secure
|
|
public key repository shows.
|
|
.PP
|
|
Only when the fingerprints are equal is it assured that the certificate
|
|
wasn\[aq]t replaced in transit with somebody else\[aq]s certificate
|
|
(such as an attacker\[aq]s certificate).
|
|
If such an attack takes place, and you didn\[aq]t check the certificate
|
|
before you imported it, then you would be trusting anything that the
|
|
attacker signed.
|
|
.RE
|
|
.IP "2." 3
|
|
Replace the self\-signed certificate with a certificate chain, where
|
|
each certificate in the chain authenticates the public key of the signer
|
|
of the previous certificate in the chain, up to a root CA.
|
|
.RS 4
|
|
.PP
|
|
If you trust that the certificate is valid, then you can add it to your
|
|
keystore by entering the following command:
|
|
.RS
|
|
.PP
|
|
\f[CB]keytool\ \-importcert\ \-alias\f[R] \f[I]alias\f[R]
|
|
\f[CB]\-file\ *X*\f[R].cer`
|
|
.RE
|
|
.PP
|
|
This command creates a trusted certificate entry in the keystore from
|
|
the data in the CA certificate file and assigns the values of the
|
|
\f[I]alias\f[R] to the entry.
|
|
.RE
|
|
.SH IMPORTING THE CERTIFICATE REPLY FROM THE CA
|
|
.PP
|
|
After you import a certificate that authenticates the public key of the
|
|
CA that you submitted your certificate signing request to (or there is
|
|
already such a certificate in the \f[CB]cacerts\f[R] file), you can import
|
|
the certificate reply and replace your self\-signed certificate with a
|
|
certificate chain.
|
|
.PP
|
|
The certificate chain is one of the following:
|
|
.IP \[bu] 2
|
|
Returned by the CA when the CA reply is a chain.
|
|
.IP \[bu] 2
|
|
Constructed when the CA reply is a single certificate.
|
|
This certificate chain is constructed by using the certificate reply and
|
|
trusted certificates available either in the keystore where you import
|
|
the reply or in the \f[CB]cacerts\f[R] keystore file.
|
|
.PP
|
|
For example, if you sent your certificate signing request to DigiCert,
|
|
then you can import their reply by entering the following command:
|
|
.PP
|
|
\f[B]Note:\f[R]
|
|
.PP
|
|
In this example, the returned certificate is named
|
|
\f[CB]DCmyname.cer\f[R].
|
|
.RS
|
|
.PP
|
|
\f[CB]keytool\ \-importcert\ \-trustcacerts\ \-file\ DCmyname.cer\f[R]
|
|
.RE
|
|
.SH EXPORTING A CERTIFICATE THAT AUTHENTICATES THE PUBLIC KEY
|
|
.PP
|
|
\f[B]Note:\f[R]
|
|
.PP
|
|
If you used the \f[CB]jarsigner\f[R] command to sign a Java Archive (JAR)
|
|
file, then clients that use the file will want to authenticate your
|
|
signature.
|
|
.PP
|
|
One way that clients can authenticate you is by importing your public
|
|
key certificate into their keystore as a trusted entry.
|
|
You can then export the certificate and supply it to your clients.
|
|
.PP
|
|
For example:
|
|
.IP "1." 3
|
|
Copy your certificate to a file named \f[CB]myname.cer\f[R] by entering
|
|
the following command:
|
|
.RS 4
|
|
.PP
|
|
\f[B]Note:\f[R]
|
|
.PP
|
|
In this example, the entry has an alias of \f[CB]mykey\f[R].
|
|
.RS
|
|
.PP
|
|
\f[CB]keytool\ \-exportcert\ \-alias\ mykey\ \-file\ myname.cer\f[R]
|
|
.RE
|
|
.RE
|
|
.IP "2." 3
|
|
With the certificate and the signed JAR file, a client can use the
|
|
\f[CB]jarsigner\f[R] command to authenticate your signature.
|
|
.SH IMPORTING THE KEYSTORE
|
|
.PP
|
|
Use the \f[CB]importkeystore\f[R] command to import an entire keystore
|
|
into another keystore.
|
|
This imports all entries from the source keystore, including keys and
|
|
certificates, to the destination keystore with a single command.
|
|
You can use this command to import entries from a different type of
|
|
keystore.
|
|
During the import, all new entries in the destination keystore will have
|
|
the same alias names and protection passwords (for secret keys and
|
|
private keys).
|
|
If the \f[CB]keytool\f[R] command can\[aq]t recover the private keys or
|
|
secret keys from the source keystore, then it prompts you for a
|
|
password.
|
|
If it detects alias duplication, then it asks you for a new alias, and
|
|
you can specify a new alias or simply allow the \f[CB]keytool\f[R] command
|
|
to overwrite the existing one.
|
|
.PP
|
|
For example, import entries from a typical JKS type keystore
|
|
\f[CB]key.jks\f[R] into a PKCS #11 type hardware\-based keystore, by
|
|
entering the following command:
|
|
.RS
|
|
.PP
|
|
\f[CB]keytool\ \-importkeystore\ \-srckeystore\ key.jks\ \-destkeystore\ NONE\ \-srcstoretype\ JKS\ \-deststoretype\ PKCS11\ \-srcstorepass\f[R]
|
|
\f[I]password\f[R] \f[CB]\-deststorepass\f[R] \f[I]password\f[R]
|
|
.RE
|
|
.PP
|
|
The \f[CB]importkeystore\f[R] command can also be used to import a single
|
|
entry from a source keystore to a destination keystore.
|
|
In this case, besides the options you used in the previous example, you
|
|
need to specify the alias you want to import.
|
|
With the \f[CB]\-srcalias\f[R] option specified, you can also specify the
|
|
destination alias name, protection password for a secret or private key,
|
|
and the destination protection password you want as follows:
|
|
.RS
|
|
.PP
|
|
\f[CB]keytool\ \-importkeystore\ \-srckeystore\ key.jks\ \-destkeystore\ NONE\ \-srcstoretype\ JKS\ \-deststoretype\ PKCS11\ \-srcstorepass\f[R]
|
|
\f[I]password\f[R] \f[CB]\-deststorepass\f[R] \f[I]password\f[R]
|
|
\f[CB]\-srcalias\ myprivatekey\ \-destalias\ myoldprivatekey\ \-srckeypass\f[R]
|
|
\f[I]password\f[R] \f[CB]\-destkeypass\f[R] \f[I]password\f[R]
|
|
\f[CB]\-noprompt\f[R]
|
|
.RE
|
|
.SH GENERATING CERTIFICATES FOR AN SSL SERVER
|
|
.PP
|
|
The following are \f[CB]keytool\f[R] commands used to generate key pairs
|
|
and certificates for three entities:
|
|
.IP \[bu] 2
|
|
Root CA (\f[CB]root\f[R])
|
|
.IP \[bu] 2
|
|
Intermediate CA (\f[CB]ca\f[R])
|
|
.IP \[bu] 2
|
|
SSL server (\f[CB]server\f[R])
|
|
.PP
|
|
Ensure that you store all the certificates in the same keystore.
|
|
.IP
|
|
.nf
|
|
\f[CB]
|
|
keytool\ \-genkeypair\ \-keystore\ root.jks\ \-alias\ root\ \-ext\ bc:c\ \-keyalg\ rsa
|
|
keytool\ \-genkeypair\ \-keystore\ ca.jks\ \-alias\ ca\ \-ext\ bc:c\ \-keyalg\ rsa
|
|
keytool\ \-genkeypair\ \-keystore\ server.jks\ \-alias\ server\ \-keyalg\ rsa
|
|
|
|
keytool\ \-keystore\ root.jks\ \-alias\ root\ \-exportcert\ \-rfc\ >\ root.pem
|
|
|
|
keytool\ \-storepass\ password\ \-keystore\ ca.jks\ \-certreq\ \-alias\ ca\ |
|
|
\ \ \ \ keytool\ \-storepass\ password\ \-keystore\ root.jks
|
|
\ \ \ \ \-gencert\ \-alias\ root\ \-ext\ BC=0\ \-rfc\ >\ ca.pem
|
|
keytool\ \-keystore\ ca.jks\ \-importcert\ \-alias\ ca\ \-file\ ca.pem
|
|
|
|
keytool\ \-storepass\ password\ \-keystore\ server.jks\ \-certreq\ \-alias\ server\ |
|
|
\ \ \ \ keytool\ \-storepass\ password\ \-keystore\ ca.jks\ \-gencert\ \-alias\ ca
|
|
\ \ \ \ \-ext\ ku:c=dig,kE\ \-rfc\ >\ server.pem
|
|
cat\ root.pem\ ca.pem\ server.pem\ |
|
|
\ \ \ \ keytool\ \-keystore\ server.jks\ \-importcert\ \-alias\ server
|
|
\f[R]
|
|
.fi
|
|
.SH TERMS
|
|
.TP
|
|
.B Keystore
|
|
A keystore is a storage facility for cryptographic keys and
|
|
certificates.
|
|
.RS
|
|
.RE
|
|
.TP
|
|
.B Keystore entries
|
|
Keystores can have different types of entries.
|
|
The two most applicable entry types for the \f[CB]keytool\f[R] command
|
|
include the following:
|
|
.RS
|
|
.PP
|
|
Key entries: Each entry holds very sensitive cryptographic key
|
|
information, which is stored in a protected format to prevent
|
|
unauthorized access.
|
|
Typically, a key stored in this type of entry is a secret key, or a
|
|
private key accompanied by the certificate chain for the corresponding
|
|
public key.
|
|
See \f[B]Certificate Chains\f[R].
|
|
The \f[CB]keytool\f[R] command can handle both types of entries, while the
|
|
\f[CB]jarsigner\f[R] tool only handles the latter type of entry, that is
|
|
private keys and their associated certificate chains.
|
|
.PP
|
|
Trusted certificate entries: Each entry contains a single public key
|
|
certificate that belongs to another party.
|
|
The entry is called a trusted certificate because the keystore owner
|
|
trusts that the public key in the certificate belongs to the identity
|
|
identified by the subject (owner) of the certificate.
|
|
The issuer of the certificate vouches for this, by signing the
|
|
certificate.
|
|
.RE
|
|
.TP
|
|
.B Keystore aliases
|
|
All keystore entries (key and trusted certificate entries) are accessed
|
|
by way of unique aliases.
|
|
.RS
|
|
.PP
|
|
An alias is specified when you add an entity to the keystore with the
|
|
\f[CB]\-genseckey\f[R] command to generate a secret key, the
|
|
\f[CB]\-genkeypair\f[R] command to generate a key pair (public and private
|
|
key), or the \f[CB]\-importcert\f[R] command to add a certificate or
|
|
certificate chain to the list of trusted certificates.
|
|
Subsequent \f[CB]keytool\f[R] commands must use this same alias to refer
|
|
to the entity.
|
|
.PP
|
|
For example, you can use the alias \f[CB]duke\f[R] to generate a new
|
|
public/private key pair and wrap the public key into a self\-signed
|
|
certificate with the following command.
|
|
See \f[B]Certificate Chains\f[R].
|
|
.RS
|
|
.PP
|
|
\f[CB]keytool\ \-genkeypair\ \-alias\ duke\ \-keyalg\ rsa\ \-keypass\f[R]
|
|
\f[I]passwd\f[R]
|
|
.RE
|
|
.PP
|
|
This example specifies an initial \f[I]passwd\f[R] required by subsequent
|
|
commands to access the private key associated with the alias
|
|
\f[CB]duke\f[R].
|
|
If you later want to change Duke\[aq]s private key password, use a
|
|
command such as the following:
|
|
.RS
|
|
.PP
|
|
\f[CB]keytool\ \-keypasswd\ \-alias\ duke\ \-keypass\f[R] \f[I]passwd\f[R]
|
|
\f[CB]\-new\f[R] \f[I]newpasswd\f[R]
|
|
.RE
|
|
.PP
|
|
This changes the initial \f[I]passwd\f[R] to \f[I]newpasswd\f[R].
|
|
A password shouldn\[aq]t be specified on a command line or in a script
|
|
unless it is for testing purposes, or you are on a secure system.
|
|
If you don\[aq]t specify a required password option on a command line,
|
|
then you are prompted for it.
|
|
.RE
|
|
.TP
|
|
.B Keystore implementation
|
|
The \f[CB]KeyStore\f[R] class provided in the \f[CB]java.security\f[R]
|
|
package supplies well\-defined interfaces to access and modify the
|
|
information in a keystore.
|
|
It is possible for there to be multiple different concrete
|
|
implementations, where each implementation is that for a particular type
|
|
of keystore.
|
|
.RS
|
|
.PP
|
|
Currently, two command\-line tools (\f[CB]keytool\f[R] and
|
|
\f[CB]jarsigner\f[R]) make use of keystore implementations.
|
|
Because the \f[CB]KeyStore\f[R] class is \f[CB]public\f[R], users can write
|
|
additional security applications that use it.
|
|
.PP
|
|
In JDK 9 and later, the default keystore implementation is
|
|
\f[CB]PKCS12\f[R].
|
|
This is a cross platform keystore based on the RSA PKCS12 Personal
|
|
Information Exchange Syntax Standard.
|
|
This standard is primarily meant for storing or transporting a
|
|
user\[aq]s private keys, certificates, and miscellaneous secrets.
|
|
There is another built\-in implementation, provided by Oracle.
|
|
It implements the keystore as a file with a proprietary keystore type
|
|
(format) named \f[CB]JKS\f[R].
|
|
It protects each private key with its individual password, and also
|
|
protects the integrity of the entire keystore with a (possibly
|
|
different) password.
|
|
.PP
|
|
Keystore implementations are provider\-based.
|
|
More specifically, the application interfaces supplied by
|
|
\f[CB]KeyStore\f[R] are implemented in terms of a Service Provider
|
|
Interface (SPI).
|
|
That is, there is a corresponding abstract \f[CB]KeystoreSpi\f[R] class,
|
|
also in the \f[CB]java.security\ package\f[R], which defines the Service
|
|
Provider Interface methods that providers must implement.
|
|
The term \f[I]provider\f[R] refers to a package or a set of packages that
|
|
supply a concrete implementation of a subset of services that can be
|
|
accessed by the Java Security API.
|
|
To provide a keystore implementation, clients must implement a provider
|
|
and supply a \f[CB]KeystoreSpi\f[R] subclass implementation, as described
|
|
in Steps to Implement and Integrate a Provider.
|
|
.PP
|
|
Applications can choose different types of keystore implementations from
|
|
different providers, using the \f[CB]getInstance\f[R] factory method
|
|
supplied in the \f[CB]KeyStore\f[R] class.
|
|
A keystore type defines the storage and data format of the keystore
|
|
information, and the algorithms used to protect private/secret keys in
|
|
the keystore and the integrity of the keystore.
|
|
Keystore implementations of different types aren\[aq]t compatible.
|
|
.PP
|
|
The \f[CB]keytool\f[R] command works on any file\-based keystore
|
|
implementation.
|
|
It treats the keystore location that is passed to it at the command line
|
|
as a file name and converts it to a \f[CB]FileInputStream\f[R], from which
|
|
it loads the keystore information.)The \f[CB]jarsigner\f[R] commands can
|
|
read a keystore from any location that can be specified with a URL.
|
|
.PP
|
|
For \f[CB]keytool\f[R] and \f[CB]jarsigner\f[R], you can specify a keystore
|
|
type at the command line, with the \f[CB]\-storetype\f[R] option.
|
|
.PP
|
|
If you don\[aq]t explicitly specify a keystore type, then the tools
|
|
choose a keystore implementation based on the value of the
|
|
\f[CB]keystore.type\f[R] property specified in the security properties
|
|
file.
|
|
The security properties file is called \f[CB]java.security\f[R], and
|
|
resides in the security properties directory:
|
|
.IP \[bu] 2
|
|
\f[B]Oracle Solaris, Linux, and OS X:\f[R]
|
|
\f[CB]java.home/lib/security\f[R]
|
|
.IP \[bu] 2
|
|
\f[B]Windows:\f[R] \f[CB]java.home\\lib\\security\f[R]
|
|
.PP
|
|
Each tool gets the \f[CB]keystore.type\f[R] value and then examines all
|
|
the currently installed providers until it finds one that implements a
|
|
keystores of that type.
|
|
It then uses the keystore implementation from that provider.The
|
|
\f[CB]KeyStore\f[R] class defines a static method named
|
|
\f[CB]getDefaultType\f[R] that lets applications retrieve the value of the
|
|
\f[CB]keystore.type\f[R] property.
|
|
The following line of code creates an instance of the default keystore
|
|
type as specified in the \f[CB]keystore.type\f[R] property:
|
|
.RS
|
|
.PP
|
|
\f[CB]KeyStore\ keyStore\ =\ KeyStore.getInstance(KeyStore.getDefaultType());\f[R]
|
|
.RE
|
|
.PP
|
|
The default keystore type is \f[CB]pkcs12\f[R], which is a cross\-platform
|
|
keystore based on the RSA PKCS12 Personal Information Exchange Syntax
|
|
Standard.
|
|
This is specified by the following line in the security properties file:
|
|
.RS
|
|
.PP
|
|
\f[CB]keystore.type=pkcs12\f[R]
|
|
.RE
|
|
.PP
|
|
To have the tools utilize a keystore implementation other than the
|
|
default, you can change that line to specify a different keystore type.
|
|
For example, if you want to use the Oracle\[aq]s \f[CB]jks\f[R] keystore
|
|
implementation, then change the line to the following:
|
|
.RS
|
|
.PP
|
|
\f[CB]keystore.type=jks\f[R]
|
|
.RE
|
|
.PP
|
|
\f[B]Note:\f[R]
|
|
.PP
|
|
Case doesn\[aq]t matter in keystore type designations.
|
|
For example, \f[CB]JKS\f[R] would be considered the same as \f[CB]jks\f[R].
|
|
.RE
|
|
.TP
|
|
.B Certificate
|
|
A certificate (or public\-key certificate) is a digitally signed
|
|
statement from one entity (the issuer), saying that the public key and
|
|
some other information of another entity (the subject) has some specific
|
|
value.
|
|
The following terms are related to certificates:
|
|
.RS
|
|
.IP \[bu] 2
|
|
Public Keys: These are numbers associated with a particular entity, and
|
|
are intended to be known to everyone who needs to have trusted
|
|
interactions with that entity.
|
|
Public keys are used to verify signatures.
|
|
.IP \[bu] 2
|
|
Digitally Signed: If some data is digitally signed, then it is stored
|
|
with the identity of an entity and a signature that proves that entity
|
|
knows about the data.
|
|
The data is rendered unforgeable by signing with the entity\[aq]s
|
|
private key.
|
|
.IP \[bu] 2
|
|
Identity: A known way of addressing an entity.
|
|
In some systems, the identity is the public key, and in others it can be
|
|
anything from an Oracle Solaris UID to an email address to an X.509
|
|
distinguished name.
|
|
.IP \[bu] 2
|
|
Signature: A signature is computed over some data using the private key
|
|
of an entity.
|
|
The signer, which in the case of a certificate is also known as the
|
|
issuer.
|
|
.IP \[bu] 2
|
|
Private Keys: These are numbers, each of which is supposed to be known
|
|
only to the particular entity whose private key it is (that is, it is
|
|
supposed to be kept secret).
|
|
Private and public keys exist in pairs in all public key cryptography
|
|
systems (also referred to as public key crypto systems).
|
|
In a typical public key crypto system, such as DSA, a private key
|
|
corresponds to exactly one public key.
|
|
Private keys are used to compute signatures.
|
|
.IP \[bu] 2
|
|
Entity: An entity is a person, organization, program, computer,
|
|
business, bank, or something else you are trusting to some degree.
|
|
.PP
|
|
Public key cryptography requires access to users\[aq] public keys.
|
|
In a large\-scale networked environment, it is impossible to guarantee
|
|
that prior relationships between communicating entities were established
|
|
or that a trusted repository exists with all used public keys.
|
|
Certificates were invented as a solution to this public key distribution
|
|
problem.
|
|
Now a Certification Authority (CA) can act as a trusted third party.
|
|
CAs are entities such as businesses that are trusted to sign (issue)
|
|
certificates for other entities.
|
|
It is assumed that CAs only create valid and reliable certificates
|
|
because they are bound by legal agreements.
|
|
There are many public Certification Authorities, such as DigiCert,
|
|
Comodo, Entrust, and so on.
|
|
.PP
|
|
You can also run your own Certification Authority using products such as
|
|
Microsoft Certificate Server or the Entrust CA product for your
|
|
organization.
|
|
With the \f[CB]keytool\f[R] command, it is possible to display, import,
|
|
and export certificates.
|
|
It is also possible to generate self\-signed certificates.
|
|
.PP
|
|
The \f[CB]keytool\f[R] command currently handles X.509 certificates.
|
|
.RE
|
|
.TP
|
|
.B X.509 Certificates
|
|
The X.509 standard defines what information can go into a certificate
|
|
and describes how to write it down (the data format).
|
|
All the data in a certificate is encoded with two related standards
|
|
called ASN.1/DER.
|
|
Abstract Syntax Notation 1 describes data.
|
|
The Definite Encoding Rules describe a single way to store and transfer
|
|
that data.
|
|
.RS
|
|
.PP
|
|
All X.509 certificates have the following data, in addition to the
|
|
signature:
|
|
.IP \[bu] 2
|
|
Version: This identifies which version of the X.509 standard applies to
|
|
this certificate, which affects what information can be specified in it.
|
|
Thus far, three versions are defined.
|
|
The \f[CB]keytool\f[R] command can import and export v1, v2, and v3
|
|
certificates.
|
|
It generates v3 certificates.
|
|
.RS 2
|
|
.IP \[bu] 2
|
|
X.509 Version 1 has been available since 1988, is widely deployed, and
|
|
is the most generic.
|
|
.IP \[bu] 2
|
|
X.509 Version 2 introduced the concept of subject and issuer unique
|
|
identifiers to handle the possibility of reuse of subject or issuer
|
|
names over time.
|
|
Most certificate profile documents strongly recommend that names not be
|
|
reused and that certificates shouldn\[aq]t make use of unique
|
|
identifiers.
|
|
Version 2 certificates aren\[aq]t widely used.
|
|
.IP \[bu] 2
|
|
X.509 Version 3 is the most recent (1996) and supports the notion of
|
|
extensions where anyone can define an extension and include it in the
|
|
certificate.
|
|
Some common extensions are: KeyUsage (limits the use of the keys to
|
|
particular purposes such as \f[CB]signing\-only\f[R]) and AlternativeNames
|
|
(allows other identities to also be associated with this public key, for
|
|
example.
|
|
DNS names, email addresses, IP addresses).
|
|
Extensions can be marked critical to indicate that the extension should
|
|
be checked and enforced or used.
|
|
For example, if a certificate has the KeyUsage extension marked critical
|
|
and set to \f[CB]keyCertSign\f[R], then when this certificate is presented
|
|
during SSL communication, it should be rejected because the certificate
|
|
extension indicates that the associated private key should only be used
|
|
for signing certificates and not for SSL use.
|
|
.RE
|
|
.IP \[bu] 2
|
|
Serial number: The entity that created the certificate is responsible
|
|
for assigning it a serial number to distinguish it from other
|
|
certificates it issues.
|
|
This information is used in numerous ways.
|
|
For example, when a certificate is revoked its serial number is placed
|
|
in a Certificate Revocation List (CRL).
|
|
.IP \[bu] 2
|
|
Signature algorithm identifier: This identifies the algorithm used by
|
|
the CA to sign the certificate.
|
|
.IP \[bu] 2
|
|
Issuer name: The X.500 Distinguished Name of the entity that signed the
|
|
certificate.
|
|
This is typically a CA.
|
|
Using this certificate implies trusting the entity that signed this
|
|
certificate.
|
|
In some cases, such as root or top\-level CA certificates, the issuer
|
|
signs its own certificate.
|
|
.IP \[bu] 2
|
|
Validity period: Each certificate is valid only for a limited amount of
|
|
time.
|
|
This period is described by a start date and time and an end date and
|
|
time, and can be as short as a few seconds or almost as long as a
|
|
century.
|
|
The validity period chosen depends on a number of factors, such as the
|
|
strength of the private key used to sign the certificate, or the amount
|
|
one is willing to pay for a certificate.
|
|
This is the expected period that entities can rely on the public value,
|
|
when the associated private key has not been compromised.
|
|
.IP \[bu] 2
|
|
Subject name: The name of the entity whose public key the certificate
|
|
identifies.
|
|
This name uses the X.500 standard, so it is intended to be unique across
|
|
the Internet.
|
|
This is the X.500 Distinguished Name (DN) of the entity.
|
|
For example,
|
|
.RS 2
|
|
.RS
|
|
.PP
|
|
\f[CB]CN=Java\ Duke,\ OU=Java\ Software\ Division,\ O=Oracle\ Corporation,\ C=US\f[R]
|
|
.RE
|
|
.PP
|
|
These refer to the subject\[aq]s common name (CN), organizational unit
|
|
(OU), organization (O), and country (C).
|
|
.RE
|
|
.IP \[bu] 2
|
|
Subject public key information: This is the public key of the entity
|
|
being named with an algorithm identifier that specifies which public key
|
|
crypto system this key belongs to and any associated key parameters.
|
|
.RE
|
|
.TP
|
|
.B Certificate Chains
|
|
The \f[CB]keytool\f[R] command can create and manage keystore key entries
|
|
that each contain a private key and an associated certificate chain.
|
|
The first certificate in the chain contains the public key that
|
|
corresponds to the private key.
|
|
.RS
|
|
.PP
|
|
When keys are first generated, the chain starts off containing a single
|
|
element, a self\-signed certificate.
|
|
See \-genkeypair in \f[B]Commands\f[R].
|
|
A self\-signed certificate is one for which the issuer (signer) is the
|
|
same as the subject.
|
|
The subject is the entity whose public key is being authenticated by the
|
|
certificate.
|
|
Whenever the \f[CB]\-genkeypair\f[R] command is called to generate a new
|
|
public/private key pair, it also wraps the public key into a
|
|
self\-signed certificate.
|
|
.PP
|
|
Later, after a Certificate Signing Request (CSR) was generated with the
|
|
\f[CB]\-certreq\f[R] command and sent to a Certification Authority (CA),
|
|
the response from the CA is imported with \f[CB]\-importcert\f[R], and the
|
|
self\-signed certificate is replaced by a chain of certificates.
|
|
At the bottom of the chain is the certificate (reply) issued by the CA
|
|
authenticating the subject\[aq]s public key.
|
|
The next certificate in the chain is one that authenticates the CA\[aq]s
|
|
public key.
|
|
.PP
|
|
In many cases, this is a self\-signed certificate, which is a
|
|
certificate from the CA authenticating its own public key, and the last
|
|
certificate in the chain.
|
|
In other cases, the CA might return a chain of certificates.
|
|
In this case, the bottom certificate in the chain is the same (a
|
|
certificate signed by the CA, authenticating the public key of the key
|
|
entry), but the second certificate in the chain is a certificate signed
|
|
by a different CA that authenticates the public key of the CA you sent
|
|
the CSR to.
|
|
The next certificate in the chain is a certificate that authenticates
|
|
the second CA\[aq]s key, and so on, until a self\-signed root
|
|
certificate is reached.
|
|
Each certificate in the chain (after the first) authenticates the public
|
|
key of the signer of the previous certificate in the chain.
|
|
.PP
|
|
Many CAs only return the issued certificate, with no supporting chain,
|
|
especially when there is a flat hierarchy (no intermediates CAs).
|
|
In this case, the certificate chain must be established from trusted
|
|
certificate information already stored in the keystore.
|
|
.PP
|
|
A different reply format (defined by the PKCS #7 standard) includes the
|
|
supporting certificate chain in addition to the issued certificate.
|
|
Both reply formats can be handled by the \f[CB]keytool\f[R] command.
|
|
.PP
|
|
The top\-level (root) CA certificate is self\-signed.
|
|
However, the trust into the root\[aq]s public key doesn\[aq]t come from
|
|
the root certificate itself, but from other sources such as a newspaper.
|
|
This is because anybody could generate a self\-signed certificate with
|
|
the distinguished name of, for example, the DigiCert root CA.
|
|
The root CA public key is widely known.
|
|
The only reason it is stored in a certificate is because this is the
|
|
format understood by most tools, so the certificate in this case is only
|
|
used as a vehicle to transport the root CA\[aq]s public key.
|
|
Before you add the root CA certificate to your keystore, you should view
|
|
it with the \f[CB]\-printcert\f[R] option and compare the displayed
|
|
fingerprint with the well\-known fingerprint obtained from a newspaper,
|
|
the root CA\[aq]s Web page, and so on.
|
|
.RE
|
|
.TP
|
|
.B cacerts Certificates File
|
|
A certificates file named \f[CB]cacerts\f[R] resides in the security
|
|
properties directory:
|
|
.RS
|
|
.IP \[bu] 2
|
|
\f[B]Oracle Solaris, Linux, and OS X:\f[R]
|
|
\f[I]JAVA_HOME\f[R]\f[CB]/lib/security\f[R]
|
|
.IP \[bu] 2
|
|
\f[B]Windows:\f[R] \f[I]JAVA_HOME\f[R]\f[CB]\\lib\\security\f[R]
|
|
.PP
|
|
\f[I]JAVA_HOME\f[R] is the runtime environment directory, which is the
|
|
\f[CB]jre\f[R] directory in the JDK or the top\-level directory of the
|
|
Java Runtime Environment (JRE).
|
|
.PP
|
|
The \f[CB]cacerts\f[R] file represents a system\-wide keystore with CA
|
|
certificates.
|
|
System administrators can configure and manage that file with the
|
|
\f[CB]keytool\f[R] command by specifying \f[CB]jks\f[R] as the keystore
|
|
type.
|
|
The \f[CB]cacerts\f[R] keystore file ships with a default set of root CA
|
|
certificates.
|
|
For Oracle Solaris, Linux, OS X, and Windows, you can list the default
|
|
certificates with the following command:
|
|
.RS
|
|
.PP
|
|
\f[CB]keytool\ \-list\ \-cacerts\f[R]
|
|
.RE
|
|
.PP
|
|
The initial password of the \f[CB]cacerts\f[R] keystore file is
|
|
\f[CB]changeit\f[R].
|
|
System administrators should change that password and the default access
|
|
permission of that file upon installing the SDK.
|
|
.PP
|
|
\f[B]Note:\f[R]
|
|
.PP
|
|
It is important to verify your \f[CB]cacerts\f[R] file.
|
|
Because you trust the CAs in the \f[CB]cacerts\f[R] file as entities for
|
|
signing and issuing certificates to other entities, you must manage the
|
|
\f[CB]cacerts\f[R] file carefully.
|
|
The \f[CB]cacerts\f[R] file should contain only certificates of the CAs
|
|
you trust.
|
|
It is your responsibility to verify the trusted root CA certificates
|
|
bundled in the \f[CB]cacerts\f[R] file and make your own trust decisions.
|
|
.PP
|
|
To remove an untrusted CA certificate from the \f[CB]cacerts\f[R] file,
|
|
use the \f[CB]\-delete\f[R] option of the \f[CB]keytool\f[R] command.
|
|
You can find the \f[CB]cacerts\f[R] file in the JRE installation
|
|
directory.
|
|
Contact your system administrator if you don\[aq]t have permission to
|
|
edit this file
|
|
.RE
|
|
.TP
|
|
.B Internet RFC 1421 Certificate Encoding Standard
|
|
Certificates are often stored using the printable encoding format
|
|
defined by the Internet RFC 1421 standard, instead of their binary
|
|
encoding.
|
|
This certificate format, also known as Base64 encoding, makes it easy to
|
|
export certificates to other applications by email or through some other
|
|
mechanism.
|
|
.RS
|
|
.PP
|
|
Certificates read by the \f[CB]\-importcert\f[R] and \f[CB]\-printcert\f[R]
|
|
commands can be in either this format or binary encoded.
|
|
The \f[CB]\-exportcert\f[R] command by default outputs a certificate in
|
|
binary encoding, but will instead output a certificate in the printable
|
|
encoding format, when the \f[CB]\-rfc\f[R] option is specified.
|
|
.PP
|
|
The \f[CB]\-list\f[R] command by default prints the SHA\-256 fingerprint
|
|
of a certificate.
|
|
If the \f[CB]\-v\f[R] option is specified, then the certificate is printed
|
|
in human\-readable format.
|
|
If the \f[CB]\-rfc\f[R] option is specified, then the certificate is
|
|
output in the printable encoding format.
|
|
.PP
|
|
In its printable encoding format, the encoded certificate is bounded at
|
|
the beginning and end by the following text:
|
|
.IP
|
|
.nf
|
|
\f[CB]
|
|
\-\-\-\-\-BEGIN\ CERTIFICATE\-\-\-\-\-
|
|
|
|
encoded\ certificate\ goes\ here.
|
|
|
|
\-\-\-\-\-END\ CERTIFICATE\-\-\-\-\-
|
|
\f[R]
|
|
.fi
|
|
.RE
|
|
.TP
|
|
.B X.500 Distinguished Names
|
|
X.500 Distinguished Names are used to identify entities, such as those
|
|
that are named by the \f[CB]subject\f[R] and \f[CB]issuer\f[R] (signer)
|
|
fields of X.509 certificates.
|
|
The \f[CB]keytool\f[R] command supports the following subparts:
|
|
.RS
|
|
.IP \[bu] 2
|
|
commonName: The common name of a person such as Susan Jones.
|
|
.IP \[bu] 2
|
|
organizationUnit: The small organization (such as department or
|
|
division) name.
|
|
For example, Purchasing.
|
|
.IP \[bu] 2
|
|
localityName: The locality (city) name, for example, Palo Alto.
|
|
.IP \[bu] 2
|
|
stateName: State or province name, for example, California.
|
|
.IP \[bu] 2
|
|
country: Two\-letter country code, for example, CH.
|
|
.PP
|
|
When you supply a distinguished name string as the value of a
|
|
\f[CB]\-dname\f[R] option, such as for the \f[CB]\-genkeypair\f[R] command,
|
|
the string must be in the following format:
|
|
.RS
|
|
.PP
|
|
\f[CB]CN=cName,\ OU=orgUnit,\ O=org,\ L=city,\ S=state,\ C=countryCode\f[R]
|
|
.RE
|
|
.PP
|
|
All the following items represent actual values and the previous
|
|
keywords are abbreviations for the following:
|
|
.IP
|
|
.nf
|
|
\f[CB]
|
|
CN=commonName
|
|
OU=organizationUnit
|
|
O=organizationName
|
|
L=localityName
|
|
S=stateName
|
|
C=country
|
|
\f[R]
|
|
.fi
|
|
.PP
|
|
A sample distinguished name string is:
|
|
.RS
|
|
.PP
|
|
\f[CB]CN=Mark\ Smith,\ OU=Java,\ O=Oracle,\ L=Cupertino,\ S=California,\ C=US\f[R]
|
|
.RE
|
|
.PP
|
|
A sample command using such a string is:
|
|
.RS
|
|
.PP
|
|
\f[CB]keytool\ \-genkeypair\ \-dname\ "CN=Mark\ Smith,\ OU=Java,\ O=Oracle,\ L=Cupertino,\ S=California,\ C=US"\ \-alias\ mark\ \-keyalg\ rsa\f[R]
|
|
.RE
|
|
.PP
|
|
Case doesn\[aq]t matter for the keyword abbreviations.
|
|
For example, CN, cn, and Cn are all treated the same.
|
|
.PP
|
|
Order matters; each subcomponent must appear in the designated order.
|
|
However, it isn\[aq]t necessary to have all the subcomponents.
|
|
You can use a subset, for example:
|
|
.RS
|
|
.PP
|
|
\f[CB]CN=Smith,\ OU=Java,\ O=Oracle,\ C=US\f[R]
|
|
.RE
|
|
.PP
|
|
If a distinguished name string value contains a comma, then the comma
|
|
must be escaped by a backslash (\\) character when you specify the
|
|
string on a command line, as in:
|
|
.RS
|
|
.PP
|
|
\f[CB]cn=Jack,\ ou=Java\\,\ Product\ Development,\ o=Oracle,\ c=US\f[R]
|
|
.RE
|
|
.PP
|
|
It is never necessary to specify a distinguished name string on a
|
|
command line.
|
|
When the distinguished name is needed for a command, but not supplied on
|
|
the command line, the user is prompted for each of the subcomponents.
|
|
In this case, a comma doesn\[aq]t need to be escaped by a backslash
|
|
(\\).
|
|
.RE
|
|
.SH WARNINGS
|
|
.SH IMPORTING TRUSTED CERTIFICATES WARNING
|
|
.PP
|
|
\f[B]Important\f[R]: Be sure to check a certificate very carefully before
|
|
importing it as a trusted certificate.
|
|
.PP
|
|
\f[B]Windows Example:\f[R]
|
|
.PP
|
|
View the certificate first with the \f[CB]\-printcert\f[R] command or the
|
|
\f[CB]\-importcert\f[R] command without the \f[CB]\-noprompt\f[R] option.
|
|
Ensure that the displayed certificate fingerprints match the expected
|
|
ones.
|
|
For example, suppose someone sends or emails you a certificate that you
|
|
put it in a file named \f[CB]\\tmp\\cert\f[R].
|
|
Before you consider adding the certificate to your list of trusted
|
|
certificates, you can execute a \f[CB]\-printcert\f[R] command to view its
|
|
fingerprints, as follows:
|
|
.IP
|
|
.nf
|
|
\f[CB]
|
|
\ \ keytool\ \-printcert\ \-file\ \\tmp\\cert
|
|
\ \ \ \ Owner:\ CN=ll,\ OU=ll,\ O=ll,\ L=ll,\ S=ll,\ C=ll
|
|
\ \ \ \ Issuer:\ CN=ll,\ OU=ll,\ O=ll,\ L=ll,\ S=ll,\ C=ll
|
|
\ \ \ \ Serial\ Number:\ 59092b34
|
|
\ \ \ \ Valid\ from:\ Thu\ Jun\ 24\ 18:01:13\ PDT\ 2016\ until:\ Wed\ Jun\ 23\ 17:01:13\ PST\ 2016
|
|
\ \ \ \ Certificate\ Fingerprints:
|
|
|
|
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ SHA\-1:\ 20:B6:17:FA:EF:E5:55:8A:D0:71:1F:E8:D6:9D:C0:37:13:0E:5E:FE
|
|
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ SHA\-256:\ 90:7B:70:0A:EA:DC:16:79:92:99:41:FF:8A:FE:EB:90:
|
|
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ 17:75:E0:90:B2:24:4D:3A:2A:16:A6:E4:11:0F:67:A4
|
|
\f[R]
|
|
.fi
|
|
.PP
|
|
\f[B]Oracle Solaris Example:\f[R]
|
|
.PP
|
|
View the certificate first with the \f[CB]\-printcert\f[R] command or the
|
|
\f[CB]\-importcert\f[R] command without the \f[CB]\-noprompt\f[R] option.
|
|
Ensure that the displayed certificate fingerprints match the expected
|
|
ones.
|
|
For example, suppose someone sends or emails you a certificate that you
|
|
put it in a file named \f[CB]/tmp/cert\f[R].
|
|
Before you consider adding the certificate to your list of trusted
|
|
certificates, you can execute a \f[CB]\-printcert\f[R] command to view its
|
|
fingerprints, as follows:
|
|
.IP
|
|
.nf
|
|
\f[CB]
|
|
\ \ keytool\ \-printcert\ \-file\ /tmp/cert
|
|
\ \ \ \ Owner:\ CN=ll,\ OU=ll,\ O=ll,\ L=ll,\ S=ll,\ C=ll
|
|
\ \ \ \ Issuer:\ CN=ll,\ OU=ll,\ O=ll,\ L=ll,\ S=ll,\ C=ll
|
|
\ \ \ \ Serial\ Number:\ 59092b34
|
|
\ \ \ \ Valid\ from:\ Thu\ Jun\ 24\ 18:01:13\ PDT\ 2016\ until:\ Wed\ Jun\ 23\ 17:01:13\ PST\ 2016
|
|
\ \ \ \ Certificate\ Fingerprints:
|
|
|
|
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ SHA\-1:\ 20:B6:17:FA:EF:E5:55:8A:D0:71:1F:E8:D6:9D:C0:37:13:0E:5E:FE
|
|
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ SHA\-256:\ 90:7B:70:0A:EA:DC:16:79:92:99:41:FF:8A:FE:EB:90:
|
|
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ 17:75:E0:90:B2:24:4D:3A:2A:16:A6:E4:11:0F:67:A4
|
|
\f[R]
|
|
.fi
|
|
.PP
|
|
Then call or otherwise contact the person who sent the certificate and
|
|
compare the fingerprints that you see with the ones that they show.
|
|
Only when the fingerprints are equal is it guaranteed that the
|
|
certificate wasn\[aq]t replaced in transit with somebody else\[aq]s
|
|
certificate such as an attacker\[aq]s certificate.
|
|
If such an attack took place, and you didn\[aq]t check the certificate
|
|
before you imported it, then you would be trusting anything the attacker
|
|
signed, for example, a JAR file with malicious class files inside.
|
|
.PP
|
|
\f[B]Note:\f[R]
|
|
.PP
|
|
It isn\[aq]t required that you execute a \f[CB]\-printcert\f[R] command
|
|
before importing a certificate.
|
|
This is because before you add a certificate to the list of trusted
|
|
certificates in the keystore, the \f[CB]\-importcert\f[R] command prints
|
|
out the certificate information and prompts you to verify it.
|
|
You can then stop the import operation.
|
|
However, you can do this only when you call the \f[CB]\-importcert\f[R]
|
|
command without the \f[CB]\-noprompt\f[R] option.
|
|
If the \f[CB]\-noprompt\f[R] option is specified, then there is no
|
|
interaction with the user.
|
|
.SH PASSWORDS WARNING
|
|
.PP
|
|
Most commands that operate on a keystore require the store password.
|
|
Some commands require a private/secret key password.
|
|
Passwords can be specified on the command line in the
|
|
\f[CB]\-storepass\f[R] and \f[CB]\-keypass\f[R] options.
|
|
However, a password shouldn\[aq]t be specified on a command line or in a
|
|
script unless it is for testing, or you are on a secure system.
|
|
When you don\[aq]t specify a required password option on a command line,
|
|
you are prompted for it.
|
|
.SH CERTIFICATE CONFORMANCE WARNING
|
|
.PP
|
|
\f[B]Internet X.509 Public Key Infrastructure Certificate and
|
|
Certificate Revocation List (CRL) Profile\f[R]
|
|
[https://tools.ietf.org/rfc/rfc5280.txt] defined a profile on conforming
|
|
X.509 certificates, which includes what values and value combinations
|
|
are valid for certificate fields and extensions.
|
|
.PP
|
|
The \f[CB]keytool\f[R] command doesn\[aq]t enforce all of these rules so
|
|
it can generate certificates that don\[aq]t conform to the standard,
|
|
such as self\-signed certificates that would be used for internal
|
|
testing purposes.
|
|
Certificates that don\[aq]t conform to the standard might be rejected by
|
|
JRE or other applications.
|
|
Users should ensure that they provide the correct options for
|
|
\f[CB]\-dname\f[R], \f[CB]\-ext\f[R], and so on.
|
|
.SH IMPORT A NEW TRUSTED CERTIFICATE
|
|
.PP
|
|
Before you add the certificate to the keystore, the \f[CB]keytool\f[R]
|
|
command verifies it by attempting to construct a chain of trust from
|
|
that certificate to a self\-signed certificate (belonging to a root CA),
|
|
using trusted certificates that are already available in the keystore.
|
|
.PP
|
|
If the \f[CB]\-trustcacerts\f[R] option was specified, then additional
|
|
certificates are considered for the chain of trust, namely the
|
|
certificates in a file named \f[CB]cacerts\f[R].
|
|
.PP
|
|
If the \f[CB]keytool\f[R] command fails to establish a trust path from the
|
|
certificate to be imported up to a self\-signed certificate (either from
|
|
the keystore or the \f[CB]cacerts\f[R] file), then the certificate
|
|
information is printed, and the user is prompted to verify it by
|
|
comparing the displayed certificate fingerprints with the fingerprints
|
|
obtained from some other (trusted) source of information, which might be
|
|
the certificate owner.
|
|
Be very careful to ensure the certificate is valid before importing it
|
|
as a trusted certificate.
|
|
The user then has the option of stopping the import operation.
|
|
If the \f[CB]\-noprompt\f[R] option is specified, then there is no
|
|
interaction with the user.
|
|
.SH IMPORT A CERTIFICATE REPLY
|
|
.PP
|
|
When you import a certificate reply, the certificate reply is validated
|
|
with trusted certificates from the keystore, and optionally, the
|
|
certificates configured in the \f[CB]cacerts\f[R] keystore file when the
|
|
\f[CB]\-trustcacerts\f[R] option is specified.
|
|
.PP
|
|
The methods of determining whether the certificate reply is trusted are
|
|
as follows:
|
|
.IP \[bu] 2
|
|
If the reply is a single X.509 certificate, then the \f[CB]keytool\f[R]
|
|
command attempts to establish a trust chain, starting at the certificate
|
|
reply and ending at a self\-signed certificate (belonging to a root CA).
|
|
The certificate reply and the hierarchy of certificates is used to
|
|
authenticate the certificate reply from the new certificate chain of
|
|
aliases.
|
|
If a trust chain can\[aq]t be established, then the certificate reply
|
|
isn\[aq]t imported.
|
|
In this case, the \f[CB]keytool\f[R] command doesn\[aq]t print the
|
|
certificate and prompt the user to verify it, because it is very
|
|
difficult for a user to determine the authenticity of the certificate
|
|
reply.
|
|
.IP \[bu] 2
|
|
If the reply is a PKCS #7 formatted certificate chain or a sequence of
|
|
X.509 certificates, then the chain is ordered with the user certificate
|
|
first followed by zero or more CA certificates.
|
|
If the chain ends with a self\-signed root CA certificate and
|
|
the\f[CB]\-trustcacerts\f[R] option was specified, the \f[CB]keytool\f[R]
|
|
command attempts to match it with any of the trusted certificates in the
|
|
keystore or the \f[CB]cacerts\f[R] keystore file.
|
|
If the chain doesn\[aq]t end with a self\-signed root CA certificate and
|
|
the \f[CB]\-trustcacerts\f[R] option was specified, the \f[CB]keytool\f[R]
|
|
command tries to find one from the trusted certificates in the keystore
|
|
or the \f[CB]cacerts\f[R] keystore file and add it to the end of the
|
|
chain.
|
|
If the certificate isn\[aq]t found and the \f[CB]\-noprompt\f[R] option
|
|
isn\[aq]t specified, the information of the last certificate in the
|
|
chain is printed, and the user is prompted to verify it.
|
|
.PP
|
|
If the public key in the certificate reply matches the user\[aq]s public
|
|
key already stored with \f[CB]alias\f[R], then the old certificate chain
|
|
is replaced with the new certificate chain in the reply.
|
|
The old chain can only be replaced with a valid \f[CB]keypass\f[R], and so
|
|
the password used to protect the private key of the entry is supplied.
|
|
If no password is provided, and the private key password is different
|
|
from the keystore password, the user is prompted for it.
|
|
.PP
|
|
This command was named \f[CB]\-import\f[R] in earlier releases.
|
|
This old name is still supported in this release.
|
|
The new name, \f[CB]\-importcert\f[R], is preferred.
|