本文概述
Java KeyStore是包含证书的文件。这些证书在Java代码中使用。 KeyStore及其中的证书用于与Java代码建立安全连接。存储的证书可以采用多种格式。 Java KeyStore由KeyStore(java.security.KeyStore)类表示。
例如-如果我们希望通过HTTP进行API调用, 则服务器向我们提供包含公钥的证书, 并且我们的代码必须确定它是否信任该证书。
KeyStore存储以下类型的数据-
- 私钥
- 公钥和证书
- 秘密钥匙
Java KeyStore的方法
方法 | 描述 |
---|---|
Enumeration
|
它返回此密钥库的所有别名。 |
boolean containsAlias(String alias) | 它检查给定的别名是否存在于KeyStore中。 |
void deleteEntry(String alias) | 它将删除从KeyStore提供的别名。 |
boolean entryInstanceOf(字符串别名, Class <?扩展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(字符串别名, 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() | 它返回密钥库的提供者。 |
String getType() | 它返回密钥库的类型。 |
boolean isCertificateEntry(String alias) | 如果与别名关联的条目是由setCertificateEntry方法创建的, 或者由setEntry方法与TrustedCertificateEntry创建的, 则返回true。 |
boolean isKeyEntry(String alias) | 如果与别名关联的条目是由setKeyEntry方法创建的, 或者由setEntry方法使用PrivateKeyEntry或SecretKeyEntry创建的, 则返回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) | 它为别名分配密钥库条目。 |
void setKeyEntry(String alias, byte[] key, Certificate[] chain) | 它将给定的密钥分配给别名。此处的密钥已受到保护。 |
void setKeyEntry(String alias, Key key, char[] password, Certificate[] chain) | 它将给定的密钥分配给别名, 并使用密码对其进行保护。 |
int size() | 它提供了密钥库中的条目数。 |
void store(KeyStore.LoadStoreParameter param) | 它用于使用给定的LoadStoeParameter存储给定的Keystore。 |
void store(OutputStream stream, char[] password) | 它用于将密钥库存储在给定的输出流中, 并使用给定的密码对其进行保护。 |
void setCertificateEntry(String alias, Certificate cert) | 它将证书映射到给定的别名。 |
如何创建密钥库?
我们可以通过调用KeyStore的getInstance()方法来初始化其实例来创建KeyStore。
KeyStore keystore = KeyStore.getInstance(KeyStore.getDefaultType());
这将创建具有默认类型的KeyStore。我们可以通过简单地将不同的参数传递给getInstance()方法来创建其他类型的KeyStore。
KeyStore keyStore = KeyStore.getInstance("PKCS12");
如何加载密钥库?
要使用KeyStore实例, 我们首先需要加载它。 KeyStore通常存储在磁盘或任何其他类型的存储中。
要加载密钥库, 我们使用KeyStore load()方法。负载包含两个参数:
- 一个InputStream, 它指示必须从何处加载KeyStore数据。
- 一个char数组, 用于存储KeyStore的密码。
char[] keyStorePassword = "123abc".toCharArray();
try(InputStream keyStoreData = new FileInputStream("keystore.ks")){ //keystore.ks //is the file from where we want to load the file
keyStore.load(keyStoreData, keyStorePassword);
}
如何从KeyStore获取密钥?
要从Keystore实例获取密钥, 我们使用getEntry()方法。密钥库的每个密钥都映射有一个别名, 该别名可标识密钥并受密钥密码保护。要访问任何密钥, 我们必须提供两个参数, 即密钥别名和密码。
char[] keyPassword = "abc123".toCharArray();
KeyStore.ProtectionParameter entryPassword =
new KeyStore.PasswordProtection(keyPassword);
KeyStore.Entry keyEntry = keyStore.getEntry("keyAlias", entryPassword);
如何在KeyStore中设置密钥?
你可以使用setEntry方法在KeyStore中设置密钥。此方法采用密码, 别名和密钥输入。以下代码用于在KeyStore中设置密钥。
SecretKey secretKey = getSecretKey();
KeyStore.SecretKeyEntry secretKeyEntry = new KeyStore.SecretKeyEntry(secretKey);
keyStore.setEntry("keyAlias2", secretKeyEntry, entryPassword);
如何存储密钥库?
我们可以将密钥库存储在磁盘或数据库中, 以供以后检索。为此, 我们使用store()方法。
char[] keyStorePassword = "123abc".toCharArray();
try (FileOutputStream keyStoreOutputStream = new FileOutputStream("data/keystore.ks")) {
keyStore.store(keyStoreOutputStream, keyStorePassword);
}
评论前必须登录!
注册