Я знаю, что такое цепочка сертификатов. В java при работе с объектами KeyStore мы можем добавлять сертификаты и закрытые ключи в объект хранилища ключей.
для этого делаем:
KeyStore sourceKeystore = KeyStore.getInstance("jks");
try (InputStream stream = new BufferedInputStream(Files.newInputStream(sourceKeystorePath))) {
sourceKeystore.load(stream, sourceKeystorePassword);
}
KeyStore destKeystore = KeyStore.getInstance("jks");
destKeystore.load(null, destKeystorePassword);
Enumeration<String> aliasList = sourceKeystore.aliases();
while (aliasList.hasMoreElements()) {
String alias = aliasList.nextElement();
destKeystore.setCertificateEntry(alias, sourceKeystore.getCertificate(alias));
if(sourceKeystore.isKeyEntry(alias)) {
System.out.println(alias + " : is private key");
Key key = sourceKeystore.getKey(alias, "secret".toCharArray());
Certificate[] chain = new Certificate[1];
chain[0] = sourceKeystore.getCertificate(alias);
destKeystore.setKeyEntry(alias, key, "secret".toCharArray(), chain);
}
}
try (OutputStream stream = new BufferedOutputStream(Files.newOutputStream(destKeystorePath))) {
destKeystore.store(stream, destKeystorePassword);
}
Что я хочу понять, так это destKeystore.setKeyEntry()
. Когда я даю цепочку сертификатов в качестве параметра, могу ли я указать такой массив сертификатов?
- [рутцерт, интерсерт, основной сертификат]
- [основной сертификат, интерсерт, корневой сертификат]
- [основной сертификат]
Первый вопрос: что означают эти различные способы установки цепочки?
Второй вопрос: Также если у меня есть файл JKS. Как найти это точное значение цепочки сертификатов и в каком порядке цепочка сертификатов была установлена для закрытого ключа в этом хранилище ключей? в основном я имею в виду, что я хочу узнать, какой параметр Certificate[] был передан в KeyStore.setKeyEntry() в этом файле JKS