- java.lang.Object
-
- java.security.KeyStore
-
public class KeyStore extends Object
该类代表加密密钥和证书的存储设备。A
KeyStore管理不同类型的条目。 每种类型的条目实现KeyStore.Entry接口。 提供了三个基本的KeyStore.Entry实现:- KeyStore.PrivateKeyEntry
这种类型的条目保存加密
PrivateKey,其可选地以受保护的格式存储以防止未经授权的访问。 还附有相应公钥的证书链。私钥和证书链由给定实体用于自身认证。 用于此认证的应用程序包括在发布和/或许可软件时签署JAR文件的软件分发机构。
- KeyStore.SecretKeyEntry
这种类型的条目保存加密
SecretKey,其可选地以受保护的格式存储以防止未经授权的访问。 - KeyStore.TrustedCertificateEntry
这种类型的条目包含属于另一方的单个公钥
Certificate。 它被称为可信证书,因为密钥库所有者信任证书中的公钥确实属于由证书的主体 (所有者)标识的身份。这种类型的条目可用于验证其他方。
密钥库中的每个条目都由“别名”字符串标识。 在私钥及其关联的证书链的情况下,这些字符串区分实体可以自己认证的不同方式。 例如,实体可以使用不同的证书颁发机构或使用不同的公钥算法对其进行身份验证。
别名区分大小写是否依赖于实现。 为了避免出现问题,建议不要在KeyStore中使用只有不同的别名。
密钥库是否是持久的,如果密钥库是持久的,则使用密钥库的机制,这里没有指定。 这允许使用各种技术来保护敏感(例如,私人或秘密)密钥。 智能卡或其他集成的加密引擎(SafeKeyper)是一种选择,也可以使用诸如文件的更简单的机制(以各种格式)。
请求KeyStore对象的典型方法包括指定现有密钥库文件,依赖于默认类型并提供特定的密钥库类型。
- 指定现有密钥库文件:
// get keystore password char[] password = getPassword(); // probe the keystore file and load the keystore entries KeyStore ks = KeyStore.getInstance(new File("keyStoreName"), password);系统将探测指定的文件以确定其密钥库类型,并返回其加载条目的密钥库实现。 当使用这种方法时,不需要调用密钥库的load方法。 - 要依靠默认类型:
KeyStore ks = KeyStore.getInstance(KeyStore.getDefaultType());系统将返回默认类型的密钥库实现。 - 提供特定的密钥库类型:
KeyStore ks = KeyStore.getInstance("JKS");系统将返回在环境中可用的指定密钥库类型的最优选实现。
在可以访问密钥库之前,它必须是
loaded(除非在实例化期间已经加载)。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); }要使用上述load方法创建一个空密钥库,请通过null作为InputStream参数。一旦加载了密钥库,就可以从密钥库中读取现有条目,或者将新条目写入密钥库中:
KeyStore.ProtectionParameter protParam = new KeyStore.PasswordProtection(password); // 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 try (FileOutputStream fos = new FileOutputStream("newKeyStoreName")) { ks.store(fos, password); }请注意,虽然可以使用相同的密码来加载密钥库,以保护私钥条目,保护密钥条目,并存储密钥库(如上面的示例代码所示),不同的密码或其他保护参数也可以使用。Java平台的每个实现都需要支持以下标准
KeyStore类型:-
PKCS12
- 从以下版本开始:
- 1.2
- 另请参见:
-
PrivateKey,SecretKey,Certificate
- KeyStore.PrivateKeyEntry
-
-
Nested Class Summary
Nested Classes Modifier and Type Class 描述 static classKeyStore.Builder要实例化的KeyStore对象的描述。static classKeyStore.CallbackHandlerProtection一个封装CallbackHandler的ProtectionParameter。static interfaceKeyStore.EntryKeyStore条目类型的标记界面。static interfaceKeyStore.LoadStoreParameterstatic classKeyStore.PasswordProtection基于密码的实现ProtectionParameter。static classKeyStore.PrivateKeyEntry一个KeyStore条目,其中包含一个PrivateKey和相应的证书链。static interfaceKeyStore.ProtectionParameter用于密钥库保护参数的标记界面。static classKeyStore.SecretKeyEntryAKeyStore条目,其中包含一个SecretKey。static classKeyStore.TrustedCertificateEntryAKeyStore条目,其中包含受信任的Certificate。
-
构造方法摘要
构造方法 Modifier Constructor 描述 protectedKeyStore(KeyStoreSpi keyStoreSpi, Provider provider, String type)创建给定类型的KeyStore对象,并封装给定的提供者实现(SPI对象)。
-
方法摘要
所有方法 静态方法 接口方法 具体的方法 Modifier and Type 方法 描述 Enumeration<String>aliases()列出此密钥库的所有别名。booleancontainsAlias(String alias)检查此密钥库中是否存在给定的别名。voiddeleteEntry(String alias)从此密钥库中删除由给定别名标识的条目。booleanentryInstanceOf(String alias, Class<? extends KeyStore.Entry> entryClass)确定密钥库Entry为指定alias是指定的一个实例或亚类entryClass。CertificategetCertificate(String alias)返回与给定别名相关联的证书。StringgetCertificateAlias(Certificate cert)返回其证书与给定证书匹配的第一个密钥库条目的(别名)名称。Certificate[]getCertificateChain(String alias)返回与给定别名关联的证书链。DategetCreationDate(String alias)返回由给定别名标识的条目的创建日期。static StringgetDefaultType()返回由keystore.type安全属性指定的默认密钥库类型,或者如果没有这样的属性,则返回字符串“jks”(“Java密钥库”的缩写)。KeyStore.EntrygetEntry(String alias, KeyStore.ProtectionParameter protParam)获取具有指定保护参数的指定别名的密钥库Entry。static KeyStoregetInstance(File file, char[] password)返回相应密钥库类型的加载密钥库对象。static KeyStoregetInstance(File file, KeyStore.LoadStoreParameter param)返回相应密钥库类型的加载密钥库对象。static KeyStoregetInstance(String type)返回指定类型的密钥库对象。static KeyStoregetInstance(String type, String provider)返回指定类型的密钥库对象。static KeyStoregetInstance(String type, Provider provider)返回指定类型的密钥库对象。KeygetKey(String alias, char[] password)返回与给定别名相关联的密钥,使用给定的密码恢复它。ProvidergetProvider()返回此密钥库的提供者。StringgetType()返回此密钥库的类型。booleanisCertificateEntry(String alias)如果给定别名标识的条目是通过调用setCertificateEntry创建的,或者通过调用setEntry与TrustedCertificateEntry创建的条目,则返回true。booleanisKeyEntry(String alias)如果给定别名标识的条目是通过调用创建返回truesetKeyEntry,或者创建通过调用setEntry与PrivateKeyEntry或者SecretKeyEntry。voidload(InputStream stream, char[] password)从给定的输入流加载此KeyStore。voidload(KeyStore.LoadStoreParameter param)使用给定的LoadStoreParameter加载此密钥库。voidsetCertificateEntry(String alias, Certificate cert)将给定的可信证书分配给给定的别名。voidsetEntry(String alias, KeyStore.Entry entry, KeyStore.ProtectionParameter protParam)在指定的别名下保存密钥库Entry。voidsetKeyEntry(String alias, byte[] key, Certificate[] chain)将给定的密钥(已经被保护)分配给给定的别名。voidsetKeyEntry(String alias, Key key, char[] password, Certificate[] chain)将给定的密钥分配给给定的别名,并使用给定的密码进行保护。intsize()检索此密钥库中的条目数。voidstore(OutputStream stream, char[] password)将此密钥库存储到给定的输出流,并使用给定的密码保护其完整性。voidstore(KeyStore.LoadStoreParameter param)使用给定的LoadStoreParameter存储此密钥库。
-
-
-
构造方法详细信息
-
KeyStore
protected KeyStore(KeyStoreSpi keyStoreSpi, Provider provider, String type)
创建给定类型的KeyStore对象,并封装给定的提供者实现(SPI对象)。- 参数
-
keyStoreSpi- 提供者实现。 -
provider- 提供商。 -
type- 密钥库类型。
-
-
方法详细信息
-
getInstance
public static KeyStore getInstance(String type) throws KeyStoreException
返回指定类型的密钥库对象。此方法遍历已注册的安全提供程序列表,从最优选的提供程序开始。 返回从支持指定类型的第一个Provider中封装KeyStoreSpi实现的新KeyStore对象。
请注意,注册提供商的列表可以通过
Security.getProviders()方法检索。- Implementation Note:
-
JDK参考实现另外使用
jdk.security.provider.preferredSecurity属性来确定指定算法的首选提供者顺序。 这可能与Security.getProviders()返回的提供商的顺序不同。 - 参数
-
type- 密钥库的类型。 有关标准密钥库类型的信息,请参阅Java Security Standard Algorithm Names Specification中的KeyStore部分。 - 结果
- 指定类型的密钥库对象
- 异常
-
KeyStoreException- 如果否Provider支持指定类型的KeyStoreSpi实现 -
NullPointerException- 如果type是null - 另请参见:
-
Provider
-
getInstance
public static KeyStore getInstance(String type, String provider) throws KeyStoreException, NoSuchProviderException
返回指定类型的密钥库对象。返回从指定提供程序封装KeyStoreSpi实现的新KeyStore对象。 指定的提供者必须在安全提供程序列表中注册。
请注意,可以通过
Security.getProviders()方法检索注册提供商的列表。- 参数
-
type- 密钥库的类型。 有关标准密钥库类型的信息,请参阅Java Security Standard Algorithm Names Specification中的KeyStore部分。 -
provider- 提供者的名称。 - 结果
- 指定类型的密钥库对象
- 异常
-
IllegalArgumentException- 如果提供商名称为null或为空 -
KeyStoreException- 如果指定类型的KeyStoreSpi实现不能从指定的提供者 -
NoSuchProviderException- 如果指定的提供程序未在安全提供程序列表中注册 -
NullPointerException-如果type为null - 另请参见:
-
Provider
-
getInstance
public static KeyStore getInstance(String type, Provider provider) throws KeyStoreException
返回指定类型的密钥库对象。返回从指定的Provider对象封装KeyStoreSpi实现的新KeyStore对象。 请注意,指定的Provider对象不必在提供者列表中注册。
- 参数
-
type- 密钥库的类型。 有关标准密钥库类型的信息,请参阅Java Security Standard Algorithm Names Specification中的KeyStore部分。 -
provider- 提供商。 - 结果
- 指定类型的密钥库对象
- 异常
-
IllegalArgumentException- 如果指定的提供者是null -
KeyStoreException- 如果指定类型的KeyStoreSpi实现从指定的Provider对象不可用 -
NullPointerException- 如果type是null - 从以下版本开始:
- 1.4
- 另请参见:
-
Provider
-
getDefaultType
public static final String getDefaultType()
返回由keystore.typesecurity属性指定的默认密钥库类型,或者如果没有这样的属性,则返回字符串“jks”(“Java keystore”的缩写)。默认密钥库类型可以由不想使用硬编码密钥库类型的应用程序使用,当调用其中一个
getInstance方法时,如果用户未指定自己的密钥库类型,则希望提供默认的密钥库类型。通过将
keystore.type安全属性的值设置为所需的密钥库类型,可以更改默认密钥库类型。- 结果
-
由
keystore.type安全属性指定的默认密钥仓库类型,如果没有此类属性,则为字符串“jks”。 - 另请参见:
-
security properties
-
getProvider
public final Provider getProvider()
返回此密钥库的提供者。- 结果
- 这个密钥库的提供者。
-
getType
public final String getType()
返回此密钥库的类型。- 结果
- 这个密钥库的类型。
-
getKey
public final Key getKey(String alias, char[] password) throws KeyStoreException, NoSuchAlgorithmException, UnrecoverableKeyException
返回与给定别名相关联的密钥,使用给定的密码恢复它。 密钥必须已经通过调用别名关联到setKeyEntry,或者通过将呼叫setEntry与PrivateKeyEntry或者SecretKeyEntry。- 参数
-
alias- 别名 -
password- 恢复密钥的密码 - 结果
- 请求的密钥,如果给定的别名不存在或不标识与密钥相关的条目,则为null。
- 异常
-
KeyStoreException- 如果密钥库尚未初始化(加载)。 -
NoSuchAlgorithmException- 如果无法找到恢复密钥的算法 -
UnrecoverableKeyException- 如果密钥无法恢复(例如,给定的密码错误)。
-
getCertificateChain
public final Certificate[] getCertificateChain(String alias) throws KeyStoreException
返回与给定别名关联的证书链。 证书链必须已经通过调用setKeyEntry与别名相关联,或通过调用setEntry与PrivateKeyEntry。- 参数
-
alias- 别名 - 结果
- 证书链(以用户的证书首先跟随着零个或多个证书颁发机构排序),如果给定的别名不存在或不包含证书链,则为null
- 异常
-
KeyStoreException- 如果密钥库尚未初始化(加载)。
-
getCertificate
public final Certificate getCertificate(String alias) throws KeyStoreException
返回与给定别名相关联的证书。如果给定的别名标识了通过调用
setCertificateEntry创建的条目,或通过调用setEntry与TrustedCertificateEntry创建的条目,则返回该条目中包含的受信任证书。如果给定的别名标识由
setKeyEntry的调用创建的条目,或通过调用setEntry与PrivateKeyEntry创建的条目,则返回该条目中证书链的第一个元素。- 参数
-
alias- 别名 - 结果
- 证书,如果给定的别名不存在或不包含证书,则为null。
- 异常
-
KeyStoreException- 如果密钥库尚未初始化(加载)。
-
getCreationDate
public final Date getCreationDate(String alias) throws KeyStoreException
返回由给定别名标识的条目的创建日期。- 参数
-
alias- 别名 - 结果
- 此条目的创建日期,如果给定的别名不存在,则为null
- 异常
-
KeyStoreException- 如果密钥库尚未初始化(加载)。
-
setKeyEntry
public final void setKeyEntry(String alias, Key key, char[] password, Certificate[] chain) throws KeyStoreException
将给定的密钥分配给给定的别名,并使用给定的密码进行保护。如果给定的密钥是类型为
java.security.PrivateKey,则必须附有一个证书链,证明相应的公钥。如果给定的别名已经存在,与它相关联的密钥库信息将被给定的密钥(也可能是证书链)覆盖。
- 参数
-
alias- 别名 -
key- 与别名关联的关键 -
password- 密码保护密钥 -
chain- 相应公钥的证书链(仅当给定键为java.security.PrivateKey类型java.security.PrivateKey)。 - 异常
-
KeyStoreException- 如果密钥存储库尚未初始化(加载),则给定的密钥不能被保护,或者由于其他原因导致该操作失败
-
setKeyEntry
public final void setKeyEntry(String alias, byte[] key, Certificate[] chain) throws KeyStoreException
将给定的密钥(已经被保护)分配给给定的别名。如果受保护的密钥是
java.security.PrivateKey型,则必须附有一个证书链,证明相应的公钥。 如果基础密钥库实现类型为jks,则key必须编码为PKCS#8标准中定义的EncryptedPrivateKeyInfo。如果给定的别名已经存在,与它相关联的密钥库信息将被给定的密钥(也可能是证书链)覆盖。
- 参数
-
alias- 别名 -
key- 与别名关联的密钥(以受保护的格式) -
chain- 相应公钥的证书链(仅当受保护的密钥为java.security.PrivateKey类型时才有用)。 - 异常
-
KeyStoreException- 如果密钥库尚未初始化(加载),或者由于其他原因导致此操作失败。
-
setCertificateEntry
public final void setCertificateEntry(String alias, Certificate cert) throws KeyStoreException
将给定的可信证书分配给给定的别名。如果给定的别名标识通过调用创建现有条目
setCertificateEntry,或者创建通过调用setEntry与TrustedCertificateEntry,在现有条目中的可信证书被给定证书重写。- 参数
-
alias- 别名 -
cert- 证书 - 异常
-
KeyStoreException- 如果密钥库尚未初始化,或者给定的别名已经存在,并且不标识包含受信任证书的条目,否则此操作由于某些其他原因而失败。
-
deleteEntry
public final void deleteEntry(String alias) throws KeyStoreException
从此密钥库中删除由给定别名标识的条目。- 参数
-
alias- 别名 - 异常
-
KeyStoreException- 如果密钥库尚未初始化,或者条目无法删除。
-
aliases
public final Enumeration<String> aliases() throws KeyStoreException
列出此密钥库的所有别名。- 结果
- 枚举别名
- 异常
-
KeyStoreException- 如果密钥库尚未初始化(加载)。
-
containsAlias
public final boolean containsAlias(String alias) throws KeyStoreException
检查此密钥库中是否存在给定的别名。- 参数
-
alias- 别名 - 结果
- 如果别名存在则为true,否则为false
- 异常
-
KeyStoreException- 如果密钥库尚未初始化(加载)。
-
size
public final int size() throws KeyStoreException检索此密钥库中的条目数。- 结果
- 此密钥库中的条目数
- 异常
-
KeyStoreException- 如果密钥库尚未初始化(加载)。
-
isKeyEntry
public final boolean isKeyEntry(String alias) throws KeyStoreException
如果由给定别名标识的条目是通过调用setKeyEntry创建的,或通过调用setEntry与PrivateKeyEntry或SecretKeyEntry创建的条目,则返回true。- 参数
-
alias- 要检查的密钥库条目的别名 - 结果
- 如果给定别名标识的条目是与密钥相关的条目,则为true,否则为false。
- 异常
-
KeyStoreException- 如果密钥库尚未初始化(加载)。
-
isCertificateEntry
public final boolean isCertificateEntry(String alias) throws KeyStoreException
如果给定别名标识的条目是通过调用setCertificateEntry创建的,或者通过调用setEntry与TrustedCertificateEntry创建的条目,则返回true。- 参数
-
alias- 要检查密钥库条目的别名 - 结果
- 如果给定别名标识的条目包含受信任的证书,则为true,否则为false。
- 异常
-
KeyStoreException- 如果密钥库尚未初始化(加载)。
-
getCertificateAlias
public final String getCertificateAlias(Certificate cert) throws KeyStoreException
返回其证书与给定证书匹配的第一个密钥库条目的(别名)名称。此方法尝试将给定证书与每个密钥库条目相匹配。 如果考虑的条目是通过调用
setCertificateEntry创建的,或者通过调用setEntry与TrustedCertificateEntry,则将给定的证书与该条目的证书进行比较。如果考虑的条目是通过调用
setKeyEntry创建的,或者通过调用setEntry与PrivateKeyEntry,则将给定的证书与该条目的证书链的第一个元素进行比较。- 参数
-
cert- 证书匹配。 - 结果
- 具有匹配证书的第一个条目的别名,如果此密钥库中没有此类条目,则为null。
- 异常
-
KeyStoreException- 如果密钥库尚未初始化(加载)。
-
store
public final void store(OutputStream stream, char[] password) throws KeyStoreException, IOException, NoSuchAlgorithmException, CertificateException
将此密钥库存储到给定的输出流,并使用给定的密码保护其完整性。- 参数
-
stream- 写入此密钥库的输出流。 -
password- 生成密钥库完整性检查的密码 - 异常
-
KeyStoreException- 如果密钥库尚未初始化(加载)。 -
IOException- 如果数据有I / O问题 -
NoSuchAlgorithmException- 如果NoSuchAlgorithmException适当的数据完整性算法 -
CertificateException- 如果密钥库数据中包含的任何证书无法存储
-
store
public final void store(KeyStore.LoadStoreParameter param) throws KeyStoreException, IOException, NoSuchAlgorithmException, CertificateException
使用给定的LoadStoreParameter存储此密钥库。- 参数
-
param-在LoadStoreParameter指定如何存储密钥库,这可能是null - 异常
-
IllegalArgumentException- 如果给定的LoadStoreParameter输入未被识别 -
KeyStoreException- 如果密钥存储库尚未初始化(加载) -
IOException- 如果数据存在I / O问题 -
NoSuchAlgorithmException- 如果NoSuchAlgorithmException适当的数据完整性算法 -
CertificateException- 如果密钥库数据中包含的任何证书无法存储 - 从以下版本开始:
- 1.5
-
load
public final void load(InputStream stream, char[] password) throws IOException, NoSuchAlgorithmException, CertificateException
从给定的输入流加载此KeyStore。可以提供密码来解锁密钥库(例如,密钥库驻留在硬件令牌设备上),或者检查密钥库数据的完整性。 如果没有为完整性检查提供密码,则不执行完整性检查。
为了创建一个空的密钥库,或者如果密钥库不能从流初始化,请传递
null作为stream参数。请注意,如果此密钥库已经加载,则会从给定的输入流重新初始化并加载该密钥库。
- 参数
-
stream- 加载密钥库的输入流,或null -
password- 用于检查密钥库完整性的密码,用于解锁密钥仓库的密码,或null - 异常
-
IOException- 如果密钥库数据存在I / O或格式问题,如果需要密码但未提供密码,或者给定的密码不正确。 如果错误是由于错误的密码, IOException的IOException应该是一个UnrecoverableKeyException -
NoSuchAlgorithmException- 如果用于检查密钥库完整性的算法无法找到 -
CertificateException- 如果密钥库中的任何证书无法加载
-
load
public final void load(KeyStore.LoadStoreParameter param) throws IOException, NoSuchAlgorithmException, CertificateException
使用给定的LoadStoreParameter加载此密钥库。请注意,如果此KeyStore已经加载,它将从给定的参数重新初始化并重新加载。
- 参数
-
param-所述LoadStoreParameter指定如何加载密钥库,其可以是null - 异常
-
IllegalArgumentException- 如果给定的LoadStoreParameter输入未被识别 -
IOException- 如果存在密钥库数据的I / O或格式问题。 如果错误是由于不正确的ProtectionParameter(如密码错误)的cause的的IOException应该是UnrecoverableKeyException -
NoSuchAlgorithmException- 如果用于检查密钥库的完整性的算法无法找到 -
CertificateException- 如果密钥库中的任何证书无法加载 - 从以下版本开始:
- 1.5
-
getEntry
public final KeyStore.Entry getEntry(String alias, KeyStore.ProtectionParameter protParam) throws NoSuchAlgorithmException, UnrecoverableEntryException, KeyStoreException
使用指定的保护参数获取指定别名的密钥库Entry。- 参数
-
alias- 获取此别名的密钥库Entry -
protParam-ProtectionParameter用于保护Entry,可能是null - 结果
-
Entry为指定的别名,或null如果没有这样的条目 - 异常
-
NullPointerException- 如果alias是null -
NoSuchAlgorithmException- 如果NoSuchAlgorithmException用于恢复条目的算法 -
UnrecoverableEntryException- 如果指定的protParam不足或无效 -
UnrecoverableKeyException- 如果条目是PrivateKeyEntry或SecretKeyEntry,并且指定的protParam不包含恢复密钥所需的信息(例如错误的密码) -
KeyStoreException- 如果密钥库尚未初始化(加载)。 - 从以下版本开始:
- 1.5
- 另请参见:
-
setEntry(String, KeyStore.Entry, KeyStore.ProtectionParameter)
-
setEntry
public final void setEntry(String alias, KeyStore.Entry entry, KeyStore.ProtectionParameter protParam) throws KeyStoreException
在指定的别名下保存密钥库Entry。 保护参数用于保护Entry。如果指定别名的条目已存在,则会被覆盖。
- 参数
-
alias- 将密钥库Entry在此别名下的Entry -
entry- 要保存的Entry -
protParam-ProtectionParameter用于保护Entry,其中可能是null - 异常
-
NullPointerException- 如果是alias或entry是null -
KeyStoreException- 如果密钥库尚未初始化(加载),或者由于其他原因导致此操作失败 - 从以下版本开始:
- 1.5
- 另请参见:
-
getEntry(String, KeyStore.ProtectionParameter)
-
entryInstanceOf
public final boolean entryInstanceOf(String alias, Class<? extends KeyStore.Entry> entryClass) throws KeyStoreException
确定密钥库Entry为指定alias是指定的一个实例或亚类entryClass。- 参数
-
alias- 别名 -
entryClass- 入门课 - 结果
-
如果指定的
alias的密钥库Entry是指定的alias的实例或子类,entryClasstrue,否则为false - 异常
-
NullPointerException- 如果alias或entryClass是null -
KeyStoreException- 如果密钥库尚未初始化(加载) - 从以下版本开始:
- 1.5
-
getInstance
public static final KeyStore getInstance(File file, char[] password) throws KeyStoreException, IOException, NoSuchAlgorithmException, CertificateException
返回相应密钥库类型的加载密钥库对象。 首先,通过探测指定的文件确定密钥库类型。 然后使用该文件中的数据实例化和加载密钥库对象。可以提供密码来解锁密钥库(例如,密钥库驻留在硬件令牌设备上),或者检查密钥库数据的完整性。 如果没有为完整性检查提供密码,则不执行完整性检查。
此方法遍历已注册的安全性列表providers ,从最优选的提供程序开始。 对于由Provider提供的每个
KeyStoreSpi实现,它将调用engineProbe方法来确定它是否支持指定的密钥库。 返回一个新的KeyStore对象,它从支持指定文件的第一个Provider中封装KeyStoreSpi实现。注意,可以通过
Security.getProviders()方法检索注册提供商的列表。- 参数
-
file- 密钥库文件 -
password- 密钥库密码,可能是null - 结果
- 加载了密钥库数据的密钥库对象
- 异常
-
KeyStoreException- 如果没有提供者支持指定密钥库文件的KeyStoreSpi实现。 -
IOException- 如果密钥库数据存在I / O或格式问题,如果需要密码但未提供密码,或者给定的密码不正确。 如果错误是由于错误的密码,cause的IOException应为UnrecoverableKeyException。 -
NoSuchAlgorithmException- 如果用于检查密钥库的完整性的算法无法找到。 -
CertificateException- 如果密钥库中的任何证书无法加载。 -
IllegalArgumentException- 如果文件不存在或不引用正常文件。 -
NullPointerException- 如果文件是null。 -
SecurityException- 如果安全管理器存在,并且其SecurityManager.checkRead(java.io.FileDescriptor)方法拒绝对指定文件的读取访问。 - 从以下版本开始:
- 9
- 另请参见:
-
Provider
-
getInstance
public static final KeyStore getInstance(File file, KeyStore.LoadStoreParameter param) throws KeyStoreException, IOException, NoSuchAlgorithmException, CertificateException
返回相应密钥库类型的加载密钥库对象。 首先,通过探测指定的文件确定密钥库类型。 然后使用该文件中的数据实例化和加载密钥库对象。 可以提供ALoadStoreParameter,其指定如何解锁密钥仓库数据或执行完整性检查。该方法从最优先的提供程序开始,遍历注册安全性列表providers 。 对于由Provider提供的每个
KeyStoreSpi实现,它将调用engineProbe方法来确定它是否支持指定的密钥库。 返回一个新的KeyStore对象,它从支持指定文件的第一个Provider中封装KeyStoreSpi实现。请注意,可以通过
Security.getProviders()方法检索注册提供商的列表。- 参数
-
file- 密钥库文件 -
param-所述LoadStoreParameter指定如何加载密钥库,其可以是null - 结果
- 加载了密钥库数据的密钥库对象
- 异常
-
KeyStoreException- 如果没有提供程序支持指定密钥库文件的KeyStoreSpi实现。 -
IOException- 如果存在密钥库数据的I / O或格式问题。 如果错误是由于ProtectionParameter(例如错误的密码) 造成的,IOException应为UnrecoverableKeyException。 -
NoSuchAlgorithmException- 如果用于检查密钥库的完整性的算法无法找到。 -
CertificateException- 如果密钥库中的任何证书无法加载。 -
IllegalArgumentException- 如果文件不存在或不引用正常文件,或者如果无法识别参数。 -
NullPointerException- 如果文件是null。 -
SecurityException- 如果存在安全管理员,并且其SecurityManager.checkRead(java.io.FileDescriptor)方法拒绝对指定文件的读取访问。 - 从以下版本开始:
- 9
- 另请参见:
-
Provider
-
-