所有类


java.security
类 KeyStore

java.lang.Object
  继承者 java.security.KeyStore

public class KeyStore
   
   
   
   
   
extends Object

此类表示密钥和证书的存储设施。

KeyStore 管理不同类型的项。每种类型的项都实现 KeyStore.Entry 接口。提供了三种基本的 KeyStore.Entry 实现:

  • KeyStore.PrivateKeyEntry

    此类型的项保存一个加密的 PrivateKey,可以选择以受保护格式存储该私钥来防止未授权访问。它也随附一个相应公钥的证书链。

    给定项使用私钥和证书链进行自验证 (self-authentication)。应用此验证的包括软件发布组织,它们将 JAR 文件签名为发布和/或许可软件的一部分。

  • KeyStore.SecretKeyEntry

    此类型的项保存一个加密的 SecretKey,可以选择以受保护格式存储该密钥来防止未授权访问。

  • KeyStore.TrustedCertificateEntry

    此类型的项包含一个属于另一方的单个公钥 Certificate。它被称为可信证书,因为 keystore 的所有者相信证书中的公钥确实属于由该证书的 subject(所有者)所标识的身份。

    此类型的项可以用来验证其他方。

keystore 中的每一项都用“别名”字符串标识。对于私钥和与它们相关的证书链,这些字符串用来区分实体验证自身可以采用的不同方式。例如,实体可以使用不同的证书授权或不同的公钥算法来验证本身。

在此没有指定 keystore 是否是持久性的,也没有指定 keystore 是持久性时所使用的机制。这允许使用各种技术保护敏感的(例如,私有的或秘密的)密钥。一种选择是使用智能卡或其他集成加密引擎 (SafeKeyper),也可以使用诸如文件之类的更加简单的机制(以各种格式)。

请求 KeyStore 对象的典型方式包括使用默认类型和提供一个特定的 keystore 类型。

  • 根据默认类型:
        KeyStore ks = KeyStore.getInstance(KeyStore.getDefaultType());
     
    系统将返回默认类型的 keystore 实现。

  • 提供特定的 keystore 类型:
          KeyStore ks = KeyStore.getInstance("JKS");
     
    系统将返回环境中可用的指定 keystore 类型的首选实现。

必须先加载 keystore 才能对其进行访问。

    KeyStore ks = KeyStore.getInstance(KeyStore.getDefaultType());

    // get user password and file input stream
    char[] password = getPassword();
    java.io.FileInputStream fis =
        new java.io.FileInputStream("keyStoreName");
    ks.load(fis, password);
    fis.close();
 
要使用上述 load 方法创建一个空 keystore,传递 null 作为 InputStream 的参数。

一旦加载了 keystore,就能够从 keystore 读取现有项,或向 keystore 写入新项:

    // get my private key
    KeyStore.PrivateKeyEntry pkEntry = (KeyStore.PrivateKeyEntry)
        ks.getEntry("privateKeyAlias", password);
    PrivateKey myPrivateKey = pkEntry.getPrivateKey();

    // save my secret key
    javax.crypto.SecretKey mySecretKey;
    KeyStore.SecretKeyEntry skEntry =
        new KeyStore.SecretKeyEntry(mySecretKey);
    ks.setEntry("secretKeyAlias", skEntry, password);

    // store away the keystore
    java.io.FileOutputStream fos =
        new java.io.FileOutputStream("newKeyStoreName");
    ks.store(fos, password);
    fos.close();
 
注意,可以使用相同的密码加载 keystore、保护私钥项、保护秘密密钥项以及存储 keystore(如以上示例代码所示),也可以使用不同的密码或其他保护参数。

从以下版本开始:
1.2
另请参见:
PrivateKey, SecretKey, Certificate

嵌套类摘要
static class KeyStore.Builder
          将被实例化的 KeyStore 对象的描述。
static class KeyStore.CallbackHandlerProtection
          封装 CallbackHandler 的 ProtectionParameter。
static interface KeyStore.Entry
          用于 KeyStore 项类型的标记接口。
static interface KeyStore.LoadStoreParameter
          用于 KeyStore loadstore 参数的标记接口。
static class KeyStore.PasswordProtection
          ProtectionParameter 的一个基于密码的实现。
static class KeyStore.PrivateKeyEntry
          保存 PrivateKey 和相应证书链的 KeyStore 项。
static interface KeyStore.ProtectionParameter
          用于 keystore 保护参数的标记接口。
static class KeyStore.SecretKeyEntry
          保存 SecretKeyKeyStore 项。
static class KeyStore.TrustedCertificateEntry
          保存可信的 CertificateKeyStore 项。
 
构造方法摘要
protected KeyStore(KeyStoreSpi keyStoreSpi, Provider provider, String type)
          创建给定类型的 KeyStore 对象,并在其中封装给定的 provider 实现(SPI 对象)。
 
方法摘要
 Enumeration<String> aliases()
          列出此 keystore 的所有别名。
 boolean containsAlias(String alias)
          检查给定别名是否存在于在此 keystore 中。
 void deleteEntry(String alias)
          删除由此 keystore 中给定的别名标识的项。
 boolean entryInstanceOf(String alias, Class<? extends KeyStore.Entry> entryClass)
          确定指定 alias 的 keystore Entry 是否是指定 entryClass 的实例或子类。
 Certificate getCertificate(String alias)
          返回与给定别名相关联的证书。
 String getCertificateAlias(Certificate cert)
          返回其证书和给定证书匹配的第一个 keystore 项的别名。
 Certificate[] getCertificateChain(String alias)
          返回与给定别名相关联的证书链。
 Date getCreationDate(String alias)
          返回给定别名标识的项的创建日期。
static String getDefaultType()
          返回 Java 安全属性文件中指定的默认 keystore 类型,如果不存在此类属性则返回 "jks"("Java keystore" 的首字母缩写)。
 KeyStore.Entry getEntry(String alias, KeyStore.ProtectionParameter protParam)
          使用指定保护参数获取指定别名的 keystore Entry
static KeyStore getInstance(String type)
          生成给定类型的 keystore 对象。
static KeyStore getInstance(String type, Provider provider)
          生成指定 provider 中指定 keystore 类型的 keystore 对象。
static KeyStore getInstance(String type, String provider)
          生成指定 provider 中指定 keystore 类型的 keystore 对象。
 Key getKey(String alias, char[] password)
          返回与给定别名相关联的密钥,使用给定密码来恢复它。
 Provider getProvider()
          返回此 keystore 的 provider。
 String getType()
          返回此 keystore 的类型。
 boolean isCertificateEntry(String alias)
          如果给定别名标识的项是通过调用 setCertificateEntry 或者调用使用 TrustedCertificateEntry 作为参数的 setEntry 来创建的,则返回 true。
 boolean isKeyEntry(String alias)
          如果给定别名标识的项是通过调用 setKeyEntry 或者调用使用 PrivateKeyEntrySecretKeyEntry 作为参数的 setEntry 创建的,则返回 true。
 void load(InputStream stream, char[] password)
          从指定的输入流中加载此 KeyStore。
 void load(KeyStore.LoadStoreParameter param)
          使用给定的 LoadStoreParameter 加载此 keystore。
 void setCertificateEntry(String alias, Certificate cert)
          将给定可信证书分配给给定别名。
 void setEntry(String alias, KeyStore.Entry entry, KeyStore.ProtectionParameter protParam)
          用指定别名保存 keystore Entry
 void setKeyEntry(String alias, byte[] key, Certificate[] chain)
          将给定密钥(已经被保护)分配给给定别名。
 void setKeyEntry(String alias, Key key, char[] password, Certificate[] chain)
          将给定的密钥分配给给定的别名,用给定的密码保护它。
 int size()
          检索此 keystore 中项的数目。
 void store(KeyStore.LoadStoreParameter param)
          使用给定的 LoadStoreParameter 存储此 keystore。
 void store(OutputStream stream, char[] password)
          将此 keystore 存储到给定输出流中,并用给定的密码保护其完整性。
 
从类 java.lang.Object 继承的方法
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

构造方法详细信息

KeyStore

protected KeyStore(KeyStoreSpi keyStoreSpi,
                   Provider provider,
                   String type)
创建给定类型的 KeyStore 对象,并在其中封装给定的 provider 实现(SPI 对象)。

参数:
keyStoreSpi - provider 实现
provider - provider
type - keystore 类型。
方法详细信息

getInstance

public static KeyStore getInstance(String type)
                            throws KeyStoreException
生成给定类型的 keystore 对象。

如果默认的 provider 包提供了给定类型的 keystore 实现,则返回包含该实现的 KeyStore 实例。如果默认包中不存在请求的 keystore 类型,则搜索其他的包。

参数:
type - keystore 的类型。有关标准 keystore 类型的信息,请参阅 Java Cryptography Architecture API Specification & Reference 中的附录 A。
返回:
指定类型的 keystore 对象。
抛出:
KeyStoreException - 如果默认 provider 包或任何其他搜索过的 provider 包中不存在请求的 keystore 类型。

getInstance

public static KeyStore getInstance(String type,
                                   String provider)
                            throws KeyStoreException,
                                   NoSuchProviderException
生成指定 provider 中指定 keystore 类型的 keystore 对象。

参数:
type - keystore 的类型。有关标准 keystore 类型的信息,请参阅 Java Cryptography Architecture API Specification & Reference 中的附录 A。
provider - provider 的名称。
返回:
指定类型的 keystore 对象,类型由指定的 provider 提供。
抛出:
KeyStoreException - 如果请求的 keystore 类型不能从 provider 中得到。
NoSuchProviderException - 如果尚未配置 provider。
IllegalArgumentException - 如果 provider 的名称为 null 或空。
另请参见:
Provider

getInstance

public static KeyStore getInstance(String type,
                                   Provider provider)
                            throws KeyStoreException
生成指定 provider 中指定 keystore 类型的 keystore 对象。注:不必注册 provider

参数:
type - keystore 的类型。有关标准 keystore 类型的信息,请参阅 Java Cryptography Architecture API Specification & Reference 中的附录 A。
provider - provider。
返回:
指定类型的 keystore 对象,类型由指定的 provider 提供。
抛出:
KeyStoreException - 如果请求的 keystore 类型不能从 provider 中得到。
IllegalArgumentException - 如果 provider 为 null。
从以下版本开始:
1.4
另请参见:
Provider

getDefaultType

public static final String getDefaultType()
返回 Java 安全属性文件中指定的默认 keystore 类型,如果不存在此类属性则返回 "jks"("Java keystore" 的首字母缩写)。Java 安全属性文件位于名为 <JAVA_HOME>/lib/security/java.security 的文件中,其中 <JAVA_HOME> 指的是安装 JDK 的目录。

对于调用某个 getInstance 方法时不想使用硬编码 keystore 类型,以及在用户未指定所用 keystore 类型的情况下希望提供默认 keystore 类型的应用程序而言,可以使用默认的 keystore 类型。

通过将 "keystore.type" 安全属性(在 Java 安全属性文件中)的值设置为所需的 keystore 类型可以更改默认的 keystore 类型。

返回:
Java 安全属性文件中指定的默认 keystore 类型,如果不存在此类属性,则返回字符串 "jks"。

getProvider

public final Provider getProvider()
返回此 keystore 的 provider。

返回:
此 keystore 的 provider。

getType

public final String getType()
返回此 keystore 的类型。

返回:
此 keystore 的类型。

getKey

public final Key getKey(String alias,
                        char[] password)
                 throws KeyStoreException,
                        NoSuchAlgorithmException,
                        UnrecoverableKeyException
返回与给定别名相关联的密钥,使用给定密码来恢复它。必须已经通过调用 setKeyEntry 或者调用使用 PrivateKeyEntrySecretKeyEntry 作为参数的 setEntry 将密钥与别名建立了关联。

参数:
alias - 别名
password - 恢复密钥所用的密码
返回:
请求的密钥,如果给定别名不存在或不标识与密钥相关的项,则返回 null。
抛出:
KeyStoreException - 如果 keystore 尚未被初始化(加载)。
NoSuchAlgorithmException - 如果不能找到恢复密钥的算法
UnrecoverableKeyException - 如果不能恢复密钥(例如,给定的密码错误)。

微信小程序

微信扫一扫体验

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部