Java Keystore

2025 年 3 月 30 日 | 阅读 4 分钟

Java Keystore 是一个包含证书的文件。这些证书用于 Java 代码中。KeyStore 及其中的证书用于从 Java 代码建立安全连接。存储的证书可以有几种格式。Java Keystore 由 KeyStore(java.security.KeyStore) 类表示。

例如 - 如果我们想通过 HTTP 调用 API,服务器会提供一个包含公钥的证书,我们的代码必须决定是否信任该证书。

KeyStore 存储以下类型的数据 -

  • 私钥
  • 公钥和证书
  • 对称密钥

Java KeyStore 的方法

方法描述
枚举aliases()它返回此 Keystore 的所有别名。
boolean containsAlias(String alias)它检查给定的别名是否存在于 KeyStore 中。
void deleteEntry(String alias)它删除 KeyStore 中提供的别名。
boolean entryInstanceOf(String alias, Class<? extends KeyStore.Entry> entryClass)它确定给定别名的 KeyStore 条目是否是给定 entryClass 的子类或实例。
Certificate getCertificate(String alias)它返回与给定别名关联的证书。
String getCertificateAlias(Certificate cert)它返回与提供的证书匹配的第一个密钥库条目的名称。
Certificate[] getCertificateChain(String alias)它返回与给定别名关联的证书链。
Date getCreationDate(String alias)它返回与指定别名关联的条目创建的日期。
static String getDefaultType()它返回 Java 安全属性文件中指定的 KeyStore 的默认类型。如果找不到该属性,则返回字符串 "jks"。
KeyStore.Entry getEntry(String alias, KeyStore.ProtectionParameter protParam)它返回与给定别名关联的 KeyStore 条目,并带有指定的保护参数。
static KeyStore getInstance(String type)它返回指定类型的 Keystore 对象。
static KeyStore(String type, Provider provider)它返回指定类型的 Keystore 对象。
static KeyStore(String type, String provider)它返回指定类型的 Keystore 对象。
Key getKey(String alias, char[] password)它返回与给定别名关联的密钥,并且密码用于恢复它。
Provider getProvider()它返回 Keystore 的提供者。
String getType()它返回密钥库的类型。
boolean isCertificateEntry(String alias)如果与别名关联的条目是通过 setCertificateEntry 方法创建的,或者通过带有 TrustedCertificateEntry 的 setEntry 方法创建的,则返回 true。
boolean isKeyEntry(String alias)如果与别名关联的条目是通过 setKeyEntry 方法创建的,或者通过带有 PrivateKeyEntry 或 SecretKeyEntry 的 setEntry 方法创建的,则返回 true。
void load(InputStream stream, char[] password)它从给定的输入流加载此 KeyStore。
void load(KeyStore.LoadStoreParameter param)它从给定的 LoadStoreParameter 加载此 KeyStore。
void setEntry(String alias, KeyStore.Entry entry, KeyStore.ProtectionParameter protParam)它将 Keystore 条目分配给别名。
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)它用于使用给定的 LoadStoeParameter 存储给定的 Keystore。
void store(OutputStream stream, char[] password)它用于将 Keystore 存储在给定的输出流中,并使用给定的密码进行保护。
void setCertificateEntry(String alias, Certificate cert)它将证书映射到给定的别名。

如何创建 KeyStore?

我们可以通过调用其 getInstance() 方法来初始化 KeyStore 实例来创建 KeyStore。

这会创建一个具有默认类型的 KeyStore。我们可以通过将不同的参数传递给 getInstance() 方法来创建其他类型的 KeyStore。

如何加载 KeyStore?

要使用 KeyStore 实例,我们首先需要加载它。KeyStore 通常存储在磁盘或其他类型的存储中。

要加载 Keystore,我们使用 KeyStore load() 方法。load 包含两个参数:

  • 一个 InputStream,指示从何处加载 KeyStore 数据。
  • 一个 char 数组,存储 KeyStore 的密码。

如何从 KeyStore 获取密钥?

要从 Keystore 实例获取密钥,我们使用 getEntry() 方法。KeyStore 的每个密钥都映射有一个别名,该别名标识密钥并受密钥密码保护。要访问任何密钥,我们必须提供两个参数,即密钥别名和密码。

如何在 KeyStore 中设置密钥?

您可以使用 setEntry 方法在 KeyStore 中设置密钥。此方法接受密码、别名和秘密密钥条目。以下代码用于在 KeyStore 中设置密钥。

如何存储 KeyStore?

我们可以将 Keystore 存储在磁盘或数据库中以供以后检索。为此,我们使用 store() 方法。


下一个主题Java 教程