A KeyStore
manages different types of entries.
Each type of entry implements the KeyStore.Entry
interface.
Three basic KeyStore.Entry
implementations are provided:
This type of entry holds a cryptographic PrivateKey
,
which is optionally stored in a protected format to prevent
unauthorized access. It is also accompanied by a certificate chain
for the corresponding public key.
Private keys and certificate chains are used by a given entity for self-authentication. Applications for this authentication include software distribution organizations which sign JAR files as part of releasing and/or licensing software.
This type of entry holds a cryptographic SecretKey
,
which is optionally stored in a protected format to prevent
unauthorized access.
This type of entry contains a single public key Certificate
belonging to another party. It is called a trusted certificate
because the keystore owner trusts that the public key in the certificate
indeed belongs to the identity identified by the subject (owner)
of the certificate.
This type of entry can be used to authenticate other parties.
Each entry in a keystore is identified by an "alias" string. In the case of private keys and their associated certificate chains, these strings distinguish among the different ways in which the entity may authenticate itself. For example, the entity may authenticate itself using different certificate authorities, or using different public key algorithms.
Whether aliases are case-sensitive is implementation dependent. In order to avoid problems, it is recommended not to use aliases in a KeyStore that only differ in case.
Whether keystores are persistent, and the mechanisms used by the keystore if it is persistent, are not specified here. This allows use of a variety of techniques for protecting sensitive (e.g., private or secret) keys. Smart cards or other integrated cryptographic engines (SafeKeyper) are one option, and simpler mechanisms such as files may also be used (in a variety of formats).
Typical ways to request a KeyStore
object include
specifying an existing keystore file,
relying on the default type and providing a specific keystore type.
// get keystore password char[] password = getPassword(); // probe the keystore file and load the keystore entries KeyStore ks = KeyStore.getInstance(new File("keyStoreName"), password);The system will probe the specified file to determine its keystore type and return a keystore implementation with its entries already loaded. When this approach is used there is no need to call the keystore's
load
method.
KeyStore ks = KeyStore.getInstance(KeyStore.getDefaultType());The system will return a keystore implementation for the default type.
KeyStore ks = KeyStore.getInstance("JKS");The system will return the most preferred implementation of the specified keystore type available in the environment.
Before a keystore can be accessed, it must be
loaded
(unless it was already loaded during instantiation).
KeyStore ks = KeyStore.getInstance(KeyStore.getDefaultType()); // get user password and file input stream char[] password = getPassword(); try (FileInputStream fis = new FileInputStream("keyStoreName")) { ks.load(fis, password); }To create an empty keystore using the above
load
method,
pass null
as the InputStream
argument.
Once the keystore has been loaded, it is possible to read existing entries from the keystore, or to write new entries into the keystore:
KeyStore.PasswordProtection protParam = new KeyStore.PasswordProtection(password); try (FileOutputStream fos = new FileOutputStream("newKeyStoreName")) { // get my private key KeyStore.PrivateKeyEntry pkEntry = (KeyStore.PrivateKeyEntry) ks.getEntry("privateKeyAlias", protParam); PrivateKey myPrivateKey = pkEntry.getPrivateKey(); // save my secret key javax.crypto.SecretKey mySecretKey; KeyStore.SecretKeyEntry skEntry = new KeyStore.SecretKeyEntry(mySecretKey); ks.setEntry("secretKeyAlias", skEntry, protParam); // store away the keystore ks.store(fos, password); } finally { protParam.destroy(); }Note that although the same password may be used to load the keystore, to protect the private key entry, to protect the secret key entry, and to store the keystore (as is shown in the sample code above), different passwords or other protection parameters may also be used.
Every implementation of the Java platform is required to support
the following standard KeyStore
type:
PKCS12
java.security.PrivateKey
, javax.crypto.SecretKey
, java.security.cert.Certificate
Modifier and Type | Class and Description |
---|---|
public abstract static class | KeyStore.
A description of a to-be-instantiated |
public static class | KeyStore.
A |
public static interface | KeyStore.
A marker interface for |
public static interface | |
public static class | KeyStore.
A password-based implementation of |
public static class | KeyStore.
A |
public static interface | KeyStore.
A marker interface for keystore protection parameters. |
public static class | KeyStore.
A |
pack-priv static class | |
public static class | KeyStore.
A |
Modifier and Type | Field and Description |
---|---|
private boolean | |
private static final Debug | |
private static final String | |
private final KeyStoreSpi | |
private static final Debug | |
private final Provider | |
private static final boolean | |
private final String |
Access | Constructor and Description |
---|---|
protected | KeyStore(KeyStoreSpi
the provider implementation. keyStoreSpi, Provider the provider. provider, String the keystore type. type)Creates a |
Modifier and Type | Method and Description |
---|---|
public final Enumeration | |
public final boolean | Returns: true if the alias exists, false otherwisethe alias name alias)Checks if the given alias exists in this keystore. |
public final void | deleteEntry(String
the alias name alias)Deletes the entry identified by the given alias from this keystore. |
public final boolean | Returns: true if the keystore Entry for the specified
alias is an instance or subclass of the
specified entryClass , false otherwisethe alias name alias, Class<? extends KeyStore.the entry class entryClass)Determines if the keystore |
public final Set | Returns: an unmodifiableSet of attributes. This set is
empty if the KeyStoreSpi implementation has not overridden
KeyStoreSpi#engineGetAttributes(String) , or the given
alias does not exist, or there are no attributes associated
with the alias. This set may also be empty for
PrivateKeyEntry or SecretKeyEntry
entries that contain protected attributes and are only available
through the Entry#getAttributes method after the entry
is extracted.the alias name alias)Retrieves the attributes associated with the given alias. |
public final Certificate | Returns: the certificate, ornull if the given alias does not
exist or does not contain a certificate.the alias name alias)Returns the certificate associated with the given alias. |
public final String | Returns: the alias name of the first entry with a matching certificate, ornull if no such entry exists in this keystore.the certificate to match with. cert)Returns the (alias) name of the first keystore entry whose certificate matches the given certificate. |
public final Certificate[] | Returns: the certificate chain (ordered with the user's certificate first followed by zero or more certificate authorities), ornull
if the given alias does not exist or does not contain a certificate chainthe alias name alias)Returns the certificate chain associated with the given alias. |
public final Date | Returns: the creation date of this entry, ornull if the given
alias does not existthe alias name alias)Returns the creation date of the entry identified by the given alias. |
public static final String | Returns: the default keystore type as specified by thekeystore.type security property, or the string "pkcs12"
if no such property exists.Returns the default keystore type as specified by the
|
public final KeyStore. | Returns: the keystoreEntry for the specified alias,
or null if there is no such entryget the keystore alias, KeyStore.Entry for this aliasthe protParamProtectionParameter
used to protect the Entry ,
which may be null Gets a keystore |
public static KeyStore | Returns: a keystore object of the specified typethe type of keystore.
See the KeyStore section in the
Java Security Standard Algorithm Names Specification
for information about standard keystore types. type)Returns a |
public static KeyStore | Returns: a keystore object of the specified typethe type of keystore.
See the KeyStore section in the
Java Security Standard Algorithm Names Specification
for information about standard keystore types. type, String the name of the provider. provider)Returns a |
public static KeyStore | Returns: a keystore object of the specified typethe type of keystore.
See the KeyStore section in the
Java Security Standard Algorithm Names Specification
for information about standard keystore types. type, Provider the provider. provider)Returns a |
public static final KeyStore | Returns: a keystore object loaded with keystore datathe keystore file file, char[] the keystore password, which may be password)null Returns a loaded keystore object of the appropriate keystore type. |
public static final KeyStore | Returns: a keystore object loaded with keystore datathe keystore file file, KeyStore.the paramLoadStoreParameter that specifies how to load
the keystore, which may be null Returns a loaded keystore object of the appropriate keystore type. |
private static final KeyStore | |
public final Key | |
public final Provider | |
private String | |
public final String | |
public final boolean | Returns: true if the entry identified by the given alias
contains a trusted certificate, false otherwise.the alias for the keystore entry to be checked alias)Returns |
public final boolean | Returns: true if the entry identified by the given alias is a
key-related entry, false otherwise.the alias for the keystore entry to be checked alias)Returns |
public final void | load(InputStream
the input stream from which the keystore is loaded,
or stream, char[] null the password used to check the integrity of
the keystore, the password used to unlock the keystore,
or password)null Loads this keystore from the given input stream. |
public final void | load(KeyStore.
the paramLoadStoreParameter
that specifies how to load the keystore,
which may be null Loads this keystore using the given |
public final void | setCertificateEntry(String
the alias name alias, Certificate the certificate cert)Assigns the given trusted certificate to the given alias. |
public final void | |
public final void | setKeyEntry(String
the alias name alias, Key the key to be associated with the alias key, char[] the password to protect the key password, Certificate[] the certificate chain for the corresponding public
key (only required if the given key is of type
chain)java.security.PrivateKey ).Assigns the given key to the given alias, protecting it with the given password. |
public final void | setKeyEntry(String
the alias name alias, byte[] the key (in protected format) to be associated with the alias key, Certificate[] the certificate chain for the corresponding public
key (only useful if the protected key is of type
chain)java.security.PrivateKey ).Assigns the given key (that has already been protected) to the given alias. |
public final int | Returns: the number of entries in this keystoreRetrieves the number of entries in this keystore. |
public final void | store(OutputStream
the output stream to which this keystore is written. stream, char[] the password to generate the keystore integrity check.
May be password)null if the keystore does not support
or require an integrity check.Stores this keystore to the given output stream, and protects its integrity with the given password. |
public final void | store(KeyStore.
the paramLoadStoreParameter
that specifies how to store the keystore,
which may be null Stores this keystore using the given |