KeyStore类定义了服务提供者接口(SPI)。该类中的所有抽象方法必须由每个希望为特定密钥库类型提供实现的加密服务提供者来实现。
- 自版本:
- 1.2
- 参见:
-
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionabstract Enumeration<String> 列出此密钥库的所有别名。abstract booleanengineContainsAlias(String alias) 检查此密钥库中是否存在给定的别名。abstract voidengineDeleteEntry(String alias) 从此密钥库中删除由给定别名标识的条目。booleanengineEntryInstanceOf(String alias, Class<? extends KeyStore.Entry> entryClass) 确定指定别名的密钥库Entry是否是指定的entryClass的实例或子类。engineGetAttributes(String alias) 检索与给定别名关联的属性。abstract CertificateengineGetCertificate(String alias) 返回与给定别名关联的证书。abstract String返回与给定证书匹配的第一个密钥库条目(别名)的名称。abstract Certificate[]engineGetCertificateChain(String alias) 返回与给定别名关联的证书链。abstract DateengineGetCreationDate(String alias) 返回由给定别名标识的条目的创建日期。engineGetEntry(String alias, KeyStore.ProtectionParameter protParam) 获取具有指定保护参数的指定别名的KeyStore.Entry。abstract KeyengineGetKey(String alias, char[] password) 使用给定密码检索与给定别名关联的密钥。abstract booleanengineIsCertificateEntry(String alias) 如果由给定别名标识的条目是通过调用setCertificateEntry创建的,或者是通过使用TrustedCertificateEntry调用setEntry创建的,则返回true。abstract booleanengineIsKeyEntry(String alias) 如果由给定别名标识的条目是通过调用setKeyEntry创建的,或者是通过使用PrivateKeyEntry或SecretKeyEntry调用setEntry创建的,则返回true。abstract voidengineLoad(InputStream stream, char[] password) 从给定的输入流加载密钥库。void使用给定的KeyStore.LoadStoreParameter加载密钥库。booleanengineProbe(InputStream stream) 探测指定输入流,以确定它是否包含此实现支持的密钥库。abstract voidengineSetCertificateEntry(String alias, Certificate cert) 将给定的证书分配给给定别名。voidengineSetEntry(String alias, KeyStore.Entry entry, KeyStore.ProtectionParameter protParam) 在指定别名下保存KeyStore.Entry。abstract voidengineSetKeyEntry(String alias, byte[] key, Certificate[] chain) 将已经受保护的给定密钥分配给给定别名。abstract voidengineSetKeyEntry(String alias, Key key, char[] password, Certificate[] chain) 将给定密钥使用给定密码保护并分配给给定别名。abstract int检索此密钥库中的条目数。abstract voidengineStore(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[]),以及一个nullInputStream。如果
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
-