Java密钥库keystore

本文概述

  • Java KeyStore的方法
  • 如何创建密钥库?
  • 如何加载密钥库?
  • 如何从KeyStore获取密钥?
  • 如何在KeyStore中设置密钥?
  • 如何存储密钥库?
Java KeyStore是包含证书的文件。这些证书在Java代码中使用。 KeyStore及其中的证书用于与Java代码建立安全连接。存储的证书可以采用多种格式。 Java KeyStore由KeyStore(java.security.KeyStore)类表示。
例如-如果我们希望通过HTTP进行API调用, 则服务器向我们提供包含公钥的证书, 并且我们的代码必须确定它是否信任该证书。
KeyStore存储以下类型的数据-
  • 私钥
  • 公钥和证书
  • 秘密钥匙
Java KeyStore的方法
方法 描述
Enumeration aliases() 它返回此密钥库的所有别名。
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 = http://www.srcmini.com/new FileInputStream("keystore.ks")){//keystore.ks//is the file from where we want to load the filekeyStore.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);

如何存储密钥库?【Java密钥库keystore】我们可以将密钥库存储在磁盘或数据库中, 以供以后检索。为此, 我们使用store()方法。
char[] keyStorePassword = "123abc".toCharArray(); try (FileOutputStream keyStoreOutputStream = new FileOutputStream("data/keystore.ks")) {keyStore.store(keyStoreOutputStream, keyStorePassword); }

    推荐阅读