Ответ
JKS (Java KeyStore) — это проприетарный формат хранилища, используемый JVM для хранения криптографических ключей и сертификатов. Он защищен паролем.
Основное содержимое:
- PrivateKeyEntry: Приватный ключ и цепочка сертификатов.
- TrustedCertificateEntry: Доверенный сертификат (обычно CA или самоподписанный).
Базовые операции с JKS:
// 1. Загрузка KeyStore из файла
KeyStore keyStore = KeyStore.getInstance("JKS"); // Укажите "JKS" явно в Java 9+
FileInputStream fis = new FileInputStream("keystore.jks");
keyStore.load(fis, "storePassword".toCharArray());
// 2. Получение приватного ключа (требуется пароль для ключа)
Key key = keyStore.getKey("myAlias", "keyPassword".toCharArray());
if (key instanceof PrivateKey) {
PrivateKey privateKey = (PrivateKey) key;
Certificate[] chain = keyStore.getCertificateChain("myAlias");
}
// 3. Получение доверенного сертификата
Certificate cert = keyStore.getCertificate("trustedAlias");
// 4. Создание нового хранилища и сохранение
KeyStore newKeyStore = KeyStore.getInstance("JKS");
newKeyStore.load(null, null); // Инициализация пустого хранилища
newKeyStore.setKeyEntry("alias", privateKey, "keyPass".toCharArray(), chain);
try (FileOutputStream fos = new FileOutputStream("new.jks")) {
newKeyStore.store(fos, "newStorePass".toCharArray());
}
Важные нюансы:
- Устаревание: Начиная с Java 9, JKS считается устаревшим. Oracle рекомендует использовать стандартный формат PKCS12 (
.p12или.pfx). Для этого укажитеKeyStore.getInstance("PKCS12"). - Пароли: Пароль хранилища (
storePassword) и пароль для доступа к приватному ключу (keyPassword) могут быть разными. - Использование: Применяется для настройки SSL/TLS контекстов (
SSLContext), цифровой подписи, шифрования и клиентской аутентификации.