Module java.base
Package java.security

Class KeyStoreSpi

java.lang.Object
java.security.KeyStoreSpi

public abstract class KeyStoreSpi extends Object
此类为KeyStore类定义了服务提供者接口SPI)。该类中的所有抽象方法必须由每个希望为特定密钥库类型提供实现的加密服务提供者来实现。
自版本:
1.2
参见:
  • Constructor Details

    • KeyStoreSpi

      public KeyStoreSpi()
      子类调用的构造函数。
  • Method Details

    • engineGetKey

      public abstract Key engineGetKey(String alias, char[] password) throws NoSuchAlgorithmException, UnrecoverableKeyException
      使用给定密码检索与给定别名关联的密钥。必须通过调用setKeyEntry或使用PrivateKeyEntrySecretKeyEntry调用setEntry将密钥与别名关联。
      参数:
      alias - 别名
      password - 用于恢复密钥的密码
      返回:
      请求的密钥,如果给定别名不存在或不标识与密钥相关的条目,则返回null
      抛出:
      NoSuchAlgorithmException - 如果找不到用于恢复密钥的算法
      UnrecoverableKeyException - 如果无法恢复密钥(例如,提供的密码错误)。
    • engineGetCertificateChain

      public abstract Certificate[] engineGetCertificateChain(String alias)
      返回与给定别名关联的证书链。证书链必须通过调用setKeyEntry或使用PrivateKeyEntry调用setEntry与别名关联。
      参数:
      alias - 别名
      返回:
      证书链(用户证书在前,根证书颁发机构在后的顺序),如果给定别名不存在或不包含证书链,则返回null
    • engineGetCertificate

      public abstract Certificate engineGetCertificate(String alias)
      返回与给定别名关联的证书。

      如果给定别名标识通过调用setCertificateEntry创建的条目,或者通过使用TrustedCertificateEntry调用setEntry创建的条目,则返回该条目中包含的受信任证书。

      如果给定别名标识通过调用setKeyEntry创建的条目,或者通过使用PrivateKeyEntry调用setEntry创建的条目,则返回该条目中证书链的第一个元素(如果存在链)。

      参数:
      alias - 别名
      返回:
      证书,如果给定别名不存在或不包含证书,则返回null
    • engineGetCreationDate

      public abstract Date engineGetCreationDate(String alias)
      返回由给定别名标识的条目的创建日期。
      参数:
      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

      public abstract void engineDeleteEntry(String alias) throws KeyStoreException
      从此密钥库中删除由给定别名标识的条目。
      参数:
      alias - 别名
      抛出:
      KeyStoreException - 如果无法移除条目。
    • engineAliases

      public abstract Enumeration<String> engineAliases()
      列出此密钥库的所有别名。
      返回:
      别名的枚举
    • engineContainsAlias

      public abstract boolean engineContainsAlias(String alias)
      检查此密钥库中是否存在给定的别名。
      参数:
      alias - 别名
      返回:
      如果别名存在,则返回true,否则返回false
    • engineSize

      public abstract int engineSize()
      检索此密钥库中的条目数。
      返回:
      此密钥库中的条目数
    • engineIsKeyEntry

      public abstract boolean engineIsKeyEntry(String alias)
      如果由给定别名标识的条目是通过调用setKeyEntry创建的,或者通过使用PrivateKeyEntrySecretKeyEntry调用setEntry创建的,则返回true
      参数:
      alias - 要检查的密钥库条目的别名
      返回:
      如果由给定别名标识的条目是与密钥相关的,则返回true,否则返回false
    • engineIsCertificateEntry

      public abstract boolean engineIsCertificateEntry(String alias)
      如果由给定别名标识的条目是通过调用setCertificateEntry创建的,或者通过使用TrustedCertificateEntry调用setEntry创建的,则返回true
      参数:
      alias - 要检查的密钥库条目的别名
      返回:
      如果由给定别名标识的条目包含受信任证书,则返回true,否则返回false
    • engineGetCertificateAlias

      public abstract String engineGetCertificateAlias(Certificate cert)
      返回与给定证书匹配的第一个密钥库条目的(别名)名称。

      此方法尝试将给定证书与每个密钥库条目进行匹配。如果正在考虑的条目是通过调用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

      使用给定的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或格式问题,如果需要密码但未提供,或者提供的密码不正确。如果错误是由于密码错误,则IOExceptioncause应为UnrecoverableKeyException
      NoSuchAlgorithmException - 如果用于检查密钥库完整性的算法无法找到
      CertificateException - 如果无法加载密钥库中的任何证书
    • engineLoad

      使用给定的KeyStore.LoadStoreParameter加载密钥库。

      请注意,如果此KeyStore已经加载,则会重新初始化并从给定参数重新加载。

      实现要求:
      默认实现会检查KeyStore.LoadStoreParameter以提取其密码,并将其传递给engineLoad(InputStream, char[]),以及一个nullInputStream

      如果KeyStore.LoadStoreParameternull,则密码参数也将为null。否则,KeyStore.LoadStoreParameterKeyStore.ProtectionParameter必须是KeyStore.PasswordProtection或支持PasswordCallbackKeyStore.CallbackHandlerProtection,以便提取密码参数。如果KeyStore.ProtectionParameter既不是这两个类中的一个,则会抛出NoSuchAlgorithmException

      参数:
      param - 指定如何加载密钥库的KeyStore.LoadStoreParameter,可以为null
      抛出:
      IllegalArgumentException - 如果无法识别给定的KeyStore.LoadStoreParameter输入
      IOException - 如果密钥库数据存在I/O或格式问题。如果错误是由于不正确的ProtectionParameter(例如,密码错误),则IOExceptioncause应为UnrecoverableKeyException
      NoSuchAlgorithmException - 如果用于检查密钥库完整性的算法无法找到
      CertificateException - 如果无法加载密钥库中的任何证书
      自从:
      1.5
    • engineGetAttributes

      public Set<KeyStore.Entry.Attribute> engineGetAttributes(String alias)
      检索与给定别名关联的属性。
      实现要求:
      默认实现返回一个空的Set。支持属性的KeyStoreSpi实现应该覆盖此方法。
      参数:
      alias - 别名
      返回:
      一个不可修改的属性Set。如果给定别名不存在或与别名关联的属性不存在,则此集合为空。对于包含受保护属性的PrivateKeyEntrySecretKeyEntry条目,此集合也可能为空。这些受保护属性应该填充到由engineGetEntry(java.lang.String, java.security.KeyStore.ProtectionParameter)返回的结果中,并且可以通过调用KeyStore.Entry.getAttributes()方法检索。
      自从:
      18
    • engineGetEntry

      使用指定的保护参数为指定别名获取KeyStore.Entry
      参数:
      alias - 获取此别名的KeyStore.Entry
      protParam - 用于保护EntryProtectionParameter,可以为null
      返回:
      指定别名的KeyStore.Entry,如果没有这样的条目则返回null
      抛出:
      KeyStoreException - 如果操作失败
      NoSuchAlgorithmException - 如果找不到用于恢复条目的算法
      UnrecoverableEntryException - 如果指定的protParam不足或无效
      UnrecoverableKeyException - 如果条目是PrivateKeyEntrySecretKeyEntry,并且指定的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 - 用于保护EntryProtectionParameter,可以为null
      抛出:
      KeyStoreException - 如果此操作失败
      自从:
      1.5
    • engineEntryInstanceOf

      public boolean engineEntryInstanceOf(String alias, Class<? extends KeyStore.Entry> entryClass)
      确定指定alias的密钥库Entry是否是指定entryClass的实例或子类。
      参数:
      alias - 别名
      entryClass - 条目类
      返回:
      如果指定alias的密钥库Entry是指定entryClass的实例或子类,则返回true,否则返回false
      自从:
      1.5
    • engineProbe

      public boolean engineProbe(InputStream stream) throws IOException
      探测指定输入流,以确定它是否包含此实现支持的密钥库。
      实现要求:
      默认情况下,此方法返回false。密钥库实现应该重写此方法,直接查看数据流或使用其他内容检测机制。
      参数:
      stream - 要探测的密钥库数据
      返回:
      如果支持密钥库数据,则返回true,否则返回false
      抛出:
      IOException - 如果密钥库数据存在I/O问题。
      NullPointerException - 如果stream为null
      自 JDK 版本:
      9