KeyStore
类定义了服务提供者接口(SPI)。该类中的所有抽象方法必须由每个希望为特定密钥库类型提供实现的加密服务提供者来实现。
- 自版本:
- 1.2
- 参见:
-
Constructor Summary
-
Method Summary
Modifier and TypeMethodDescriptionabstract Enumeration
<String> 列出此密钥库的所有别名。abstract boolean
engineContainsAlias
(String alias) 检查此密钥库中是否存在给定的别名。abstract void
engineDeleteEntry
(String alias) 从此密钥库中删除由给定别名标识的条目。boolean
engineEntryInstanceOf
(String alias, Class<? extends KeyStore.Entry> entryClass) 确定指定别名的密钥库Entry
是否是指定的entryClass
的实例或子类。engineGetAttributes
(String alias) 检索与给定别名关联的属性。abstract Certificate
engineGetCertificate
(String alias) 返回与给定别名关联的证书。abstract String
返回与给定证书匹配的第一个密钥库条目(别名)的名称。abstract Certificate[]
engineGetCertificateChain
(String alias) 返回与给定别名关联的证书链。abstract Date
engineGetCreationDate
(String alias) 返回由给定别名标识的条目的创建日期。engineGetEntry
(String alias, KeyStore.ProtectionParameter protParam) 获取具有指定保护参数的指定别名的KeyStore.Entry
。abstract Key
engineGetKey
(String alias, char[] password) 使用给定密码检索与给定别名关联的密钥。abstract boolean
engineIsCertificateEntry
(String alias) 如果由给定别名标识的条目是通过调用setCertificateEntry
创建的,或者是通过使用TrustedCertificateEntry
调用setEntry
创建的,则返回true
。abstract boolean
engineIsKeyEntry
(String alias) 如果由给定别名标识的条目是通过调用setKeyEntry
创建的,或者是通过使用PrivateKeyEntry
或SecretKeyEntry
调用setEntry
创建的,则返回true
。abstract void
engineLoad
(InputStream stream, char[] password) 从给定的输入流加载密钥库。void
使用给定的KeyStore.LoadStoreParameter
加载密钥库。boolean
engineProbe
(InputStream stream) 探测指定输入流,以确定它是否包含此实现支持的密钥库。abstract void
engineSetCertificateEntry
(String alias, Certificate cert) 将给定的证书分配给给定别名。void
engineSetEntry
(String alias, KeyStore.Entry entry, KeyStore.ProtectionParameter protParam) 在指定别名下保存KeyStore.Entry
。abstract void
engineSetKeyEntry
(String alias, byte[] key, Certificate[] chain) 将已经受保护的给定密钥分配给给定别名。abstract void
engineSetKeyEntry
(String alias, Key key, char[] password, Certificate[] chain) 将给定密钥使用给定密码保护并分配给给定别名。abstract int
检索此密钥库中的条目数。abstract void
engineStore
(OutputStream stream, char[] password) 将此密钥库存储到给定输出流中,并使用给定密码保护其完整性。void
使用给定的KeyStore.LoadStoreParameter
存储此密钥库。
-
Constructor Details
-
KeyStoreSpi
public KeyStoreSpi()子类调用的构造函数。
-
-
Method Details
-
engineGetKey
public abstract Key engineGetKey(String alias, char[] password) throws NoSuchAlgorithmException, UnrecoverableKeyException 使用给定密码检索与给定别名关联的密钥。必须通过调用setKeyEntry
或使用PrivateKeyEntry
或SecretKeyEntry
调用setEntry
将密钥与别名关联。- 参数:
-
alias
- 别名 -
password
- 用于恢复密钥的密码 - 返回:
-
请求的密钥,如果给定别名不存在或不标识与密钥相关的条目,则返回
null
。 - 抛出:
-
NoSuchAlgorithmException
- 如果找不到用于恢复密钥的算法 -
UnrecoverableKeyException
- 如果无法恢复密钥(例如,提供的密码错误)。
-
engineGetCertificateChain
返回与给定别名关联的证书链。证书链必须通过调用setKeyEntry
或使用PrivateKeyEntry
调用setEntry
与别名关联。- 参数:
-
alias
- 别名 - 返回:
-
证书链(用户证书在前,根证书颁发机构在后的顺序),如果给定别名不存在或不包含证书链,则返回
null
。
-
engineGetCertificate
返回与给定别名关联的证书。如果给定别名标识通过调用
setCertificateEntry
创建的条目,或者通过使用TrustedCertificateEntry
调用setEntry
创建的条目,则返回该条目中包含的受信任证书。如果给定别名标识通过调用
setKeyEntry
创建的条目,或者通过使用PrivateKeyEntry
调用setEntry
创建的条目,则返回该条目中证书链的第一个元素(如果存在链)。- 参数:
-
alias
- 别名 - 返回:
-
证书,如果给定别名不存在或不包含证书,则返回
null
。
-
engineGetCreationDate
返回由给定别名标识的条目的创建日期。- 参数:
-
alias
- 别名 - 返回:
-
此条目的创建日期,如果给定别名不存在,则返回
null
。
-
engineSetKeyEntry
public abstract void engineSetKeyEntry(String alias, Key key, char[] password, Certificate[] chain) throws KeyStoreException 将给定密钥使用给定密码保护并分配给给定别名。如果给定密钥是
java.security.PrivateKey
类型,则必须附带证书链,证明相应的公钥。如果给定别名已存在,则与其关联的密钥(以及可能的证书链)将被给定密钥覆盖。
- 参数:
-
alias
- 别名 -
key
- 与别名关联的密钥 -
password
- 保护密钥的密码 -
chain
- 相应公钥的证书链(仅当给定密钥为java.security.PrivateKey
类型时才需要)。 - 抛出:
-
KeyStoreException
- 如果无法保护给定密钥,或此操作由于其他原因失败
-
engineSetKeyEntry
public abstract void engineSetKeyEntry(String alias, byte[] key, Certificate[] chain) throws KeyStoreException 将已经受保护的给定密钥分配给给定别名。如果受保护的密钥是
java.security.PrivateKey
类型,则必须附带证书链,证明相应的公钥。如果给定别名已存在,则与其关联的密钥(以及可能的证书链)将被给定密钥覆盖。
- 参数:
-
alias
- 别名 -
key
- 与别名关联的(受保护格式的)密钥 -
chain
- 相应公钥的证书链(仅当受保护密钥为java.security.PrivateKey
类型时才有用)。 - 抛出:
-
KeyStoreException
- 如果此操作失败。
-
engineSetCertificateEntry
public abstract void engineSetCertificateEntry(String alias, Certificate cert) throws KeyStoreException 将给定证书分配给给定别名。如果给定别名标识通过调用
setCertificateEntry
创建的现有条目,或者通过使用TrustedCertificateEntry
调用setEntry
创建的条目,则现有条目中的受信任证书将被给定证书覆盖。- 参数:
-
alias
- 别名 -
cert
- 证书 - 抛出:
-
KeyStoreException
- 如果给定别名已存在且不标识包含受信任证书的条目,或此操作由于其他原因失败。
-
engineDeleteEntry
从此密钥库中删除由给定别名标识的条目。- 参数:
-
alias
- 别名 - 抛出:
-
KeyStoreException
- 如果无法移除条目。
-
engineAliases
列出此密钥库的所有别名。- 返回:
- 别名的枚举
-
engineContainsAlias
检查此密钥库中是否存在给定的别名。- 参数:
-
alias
- 别名 - 返回:
-
如果别名存在,则返回
true
,否则返回false
-
engineSize
public abstract int engineSize()检索此密钥库中的条目数。- 返回:
- 此密钥库中的条目数
-
engineIsKeyEntry
如果由给定别名标识的条目是通过调用setKeyEntry
创建的,或者通过使用PrivateKeyEntry
或SecretKeyEntry
调用setEntry
创建的,则返回true
。- 参数:
-
alias
- 要检查的密钥库条目的别名 - 返回:
-
如果由给定别名标识的条目是与密钥相关的,则返回
true
,否则返回false
。
-
engineIsCertificateEntry
如果由给定别名标识的条目是通过调用setCertificateEntry
创建的,或者通过使用TrustedCertificateEntry
调用setEntry
创建的,则返回true
。- 参数:
-
alias
- 要检查的密钥库条目的别名 - 返回:
-
如果由给定别名标识的条目包含受信任证书,则返回
true
,否则返回false
。
-
engineGetCertificateAlias
返回与给定证书匹配的第一个密钥库条目的(别名)名称。此方法尝试将给定证书与每个密钥库条目进行匹配。如果正在考虑的条目是通过调用
setCertificateEntry
创建的,或者通过调用setEntry
创建的,使用TrustedCertificateEntry
,则将给定证书与该条目的证书进行比较。如果正在考虑的条目是通过调用
setKeyEntry
创建的,或者通过调用setEntry
创建的,使用PrivateKeyEntry
,则将给定证书与该条目的证书链的第一个元素进行比较。- 参数:
-
cert
- 要匹配的证书。 - 返回:
-
与匹配证书的第一个条目的别名,如果在此密钥库中不存在这样的条目,则返回
null
。
-
engineStore
public abstract void engineStore(OutputStream stream, char[] password) throws IOException, NoSuchAlgorithmException, CertificateException 将此密钥库存储到给定的输出流中,并使用给定密码保护其完整性。- 参数:
-
stream
- 写入此密钥库的输出流。 -
password
- 用于生成密钥库完整性检查的密码。如果密钥库不支持或不需要完整性检查,则可以为null
。 - 抛出:
-
IOException
- 如果数据存在I/O问题 -
NoSuchAlgorithmException
- 如果找不到适当的数据完整性算法 -
CertificateException
- 如果密钥库数据中包含的任何证书无法存储
-
engineStore
public void engineStore(KeyStore.LoadStoreParameter param) throws IOException, NoSuchAlgorithmException, CertificateException 使用给定的KeyStore.LoadStoreParameter
存储此密钥库。- 实现要求:
-
默认实现会抛出一个
UnsupportedOperationException
。 - 参数:
-
param
- 指定如何存储密钥库的KeyStore.LoadStoreParameter
,可以为null
- 抛出:
-
IllegalArgumentException
- 如果给定的KeyStore.LoadStoreParameter
输入无法识别 -
IOException
- 如果数据存在I/O问题 -
NoSuchAlgorithmException
- 如果找不到适当的数据完整性算法 -
CertificateException
- 如果密钥库数据中包含的任何证书无法存储 -
UnsupportedOperationException
- 如果实现不支持此操作 - 自从:
- 1.5
-
engineLoad
public abstract void engineLoad(InputStream stream, char[] password) throws IOException, NoSuchAlgorithmException, CertificateException 从给定的输入流加载密钥库。可以提供密码以解锁密钥库(例如,密钥库位于硬件令牌设备上),或者检查密钥库数据的完整性。如果未为完整性检查提供密码,则不执行完整性检查。
- 参数:
-
stream
- 加载密钥库的输入流,或者为null
-
password
- 用于检查密钥库完整性的密码,用于解锁密钥库的密码,或者为null
- 抛出:
-
IOException
- 如果密钥库数据存在I/O或格式问题,如果需要密码但未提供,或者提供的密码不正确。如果错误是由于密码错误,则IOException
的cause
应为UnrecoverableKeyException
-
NoSuchAlgorithmException
- 如果用于检查密钥库完整性的算法无法找到 -
CertificateException
- 如果无法加载密钥库中的任何证书
-
engineLoad
public void engineLoad(KeyStore.LoadStoreParameter param) throws IOException, NoSuchAlgorithmException, CertificateException 使用给定的KeyStore.LoadStoreParameter
加载密钥库。请注意,如果此KeyStore已经加载,则会重新初始化并从给定参数重新加载。
- 实现要求:
-
默认实现会检查
KeyStore.LoadStoreParameter
以提取其密码,并将其传递给engineLoad(InputStream, char[])
,以及一个null
InputStream
。如果
KeyStore.LoadStoreParameter
为null
,则密码参数也将为null
。否则,KeyStore.LoadStoreParameter
的KeyStore.ProtectionParameter
必须是KeyStore.PasswordProtection
或支持PasswordCallback
的KeyStore.CallbackHandlerProtection
,以便提取密码参数。如果KeyStore.ProtectionParameter
既不是这两个类中的一个,则会抛出NoSuchAlgorithmException
。 - 参数:
-
param
- 指定如何加载密钥库的KeyStore.LoadStoreParameter
,可以为null
- 抛出:
-
IllegalArgumentException
- 如果无法识别给定的KeyStore.LoadStoreParameter
输入 -
IOException
- 如果密钥库数据存在I/O或格式问题。如果错误是由于不正确的ProtectionParameter
(例如,密码错误),则IOException
的cause
应为UnrecoverableKeyException
-
NoSuchAlgorithmException
- 如果用于检查密钥库完整性的算法无法找到 -
CertificateException
- 如果无法加载密钥库中的任何证书 - 自从:
- 1.5
-
engineGetAttributes
检索与给定别名关联的属性。- 实现要求:
-
默认实现返回一个空的
Set
。支持属性的KeyStoreSpi
实现应该覆盖此方法。 - 参数:
-
alias
- 别名 - 返回:
-
一个不可修改的属性
Set
。如果给定别名不存在或与别名关联的属性不存在,则此集合为空。对于包含受保护属性的PrivateKeyEntry
或SecretKeyEntry
条目,此集合也可能为空。这些受保护属性应该填充到由engineGetEntry(java.lang.String, java.security.KeyStore.ProtectionParameter)
返回的结果中,并且可以通过调用KeyStore.Entry.getAttributes()
方法检索。 - 自从:
- 18
-
engineGetEntry
public KeyStore.Entry engineGetEntry(String alias, KeyStore.ProtectionParameter protParam) throws KeyStoreException, NoSuchAlgorithmException, UnrecoverableEntryException 使用指定的保护参数为指定别名获取KeyStore.Entry
。- 参数:
-
alias
- 获取此别名的KeyStore.Entry
-
protParam
- 用于保护Entry
的ProtectionParameter
,可以为null
- 返回:
-
指定别名的
KeyStore.Entry
,如果没有这样的条目则返回null
- 抛出:
-
KeyStoreException
- 如果操作失败 -
NoSuchAlgorithmException
- 如果找不到用于恢复条目的算法 -
UnrecoverableEntryException
- 如果指定的protParam
不足或无效 -
UnrecoverableKeyException
- 如果条目是PrivateKeyEntry
或SecretKeyEntry
,并且指定的protParam
不包含恢复密钥所需的信息(例如,密码错误) - 自从:
- 1.5
-
engineSetEntry
public void engineSetEntry(String alias, KeyStore.Entry entry, KeyStore.ProtectionParameter protParam) throws KeyStoreException 将KeyStore.Entry
保存在指定别名下。指定的保护参数用于保护Entry
。如果指定别名已存在条目,则会被覆盖。
- 参数:
-
alias
- 在此别名下保存KeyStore.Entry
-
entry
- 要保存的Entry
-
protParam
- 用于保护Entry
的ProtectionParameter
,可以为null
- 抛出:
-
KeyStoreException
- 如果此操作失败 - 自从:
- 1.5
-
engineEntryInstanceOf
确定指定alias
的密钥库Entry
是否是指定entryClass
的实例或子类。- 参数:
-
alias
- 别名 -
entryClass
- 条目类 - 返回:
-
如果指定
alias
的密钥库Entry
是指定entryClass
的实例或子类,则返回true
,否则返回false
- 自从:
- 1.5
-
engineProbe
探测指定输入流,以确定它是否包含此实现支持的密钥库。- 实现要求:
-
默认情况下,此方法返回
false
。密钥库实现应该重写此方法,直接查看数据流或使用其他内容检测机制。 - 参数:
-
stream
- 要探测的密钥库数据 - 返回:
-
如果支持密钥库数据,则返回
true
,否则返回false
- 抛出:
-
IOException
- 如果密钥库数据存在I/O问题。 -
NullPointerException
- 如果stream为null
。 - 自 JDK 版本:
- 9
-