1. Обзор
В предыдущем уроке мы показали, как преобразовать хранилище ключей Java (JKS) в формат PEM . В этом руководстве мы собираемся преобразовать формат PEM в стандартный формат Java KeyStore (JKS). Java KeyStore — это контейнер, в котором хранятся сертификаты с соответствующими закрытыми ключами.
Мы будем использовать комбинацию команд keytool
и openssl
для преобразования из PEM в JKS. Команда keytool
поставляется с JDK (Java Development Kit) и используется для преобразования из PEM в PKCS12. Вторую команду openssl
необходимо скачать , и ее роль заключается в преобразовании из PKCS12 в JKS.
2. Форматы файлов
JKS — это специфичный для Java формат файла, который был форматом по умолчанию для KeyStore до Java 8 . Начиная с Java 9, PKCS#12 является форматом KeyStore по умолчанию . Несмотря на JKS, PKCS#12 является стандартизированным и независимым от языка форматом для хранения зашифрованных данных. Формат PKCS#12 также известен как PKCS12 или PFX.
PEM (Privacy Enhanced Mail) также является форматом контейнера сертификатов. Файлы PEM закодированы в Base64. Это гарантирует, что данные останутся неповрежденными во время перевода между различными системами.
Кроме того, файл PEM может содержать один или несколько экземпляров, каждый из которых разделен простым текстовым заголовком и нижним колонтитулом:
-----BEGIN CERTIFICATE-----
// base64 encoded
-----END CERTIFICATE-----
3. Преобразование PEM в формат JKS
Теперь мы выполним шаги по преобразованию всех сертификатов и закрытых ключей из формата PEM в формат JKS.
В качестве примера мы собираемся создать самозаверяющий сертификат.
3.1. Создание файла PEM
Мы начнем с создания двух файлов, key.pem
и cert.pem
, используя openssl
:
openssl req -newkey rsa:2048 -x509 -keyout key.pem -out cert.pem -days 365
Инструмент предложит нам ввести парольную фразу PEM и другую информацию.
После того, как мы ответили на все запросы, инструмент openssl
выводит два файла:
key.pem
(закрытый ключ)cert.pem
(общедоступный сертификат)
Мы будем использовать эти файлы для создания нашего самозаверяющего сертификата .
3.2. Создание сертификата PKCS12
В большинстве случаев сертификат имеет формат стандарта шифрования с открытым ключом №12 (PKCS12). Реже мы используем формат Java KeyStore (JKS).
Преобразуем PEM в формат PKCS12 :
openssl pkcs12 -export -in cert.pem -inkey key.pem -out certificate.p12 -name "certificate"
Во время выполнения команды нам будет предложено ввести парольную фразу, которую мы создали ранее для key.pem
:
Enter pass phrase for key.pem:
И затем мы увидим приглашение с запросом нового пароля для certificate.p12
:
Enter Export Password:
После этого у нас будет хранилище ключей certificate.p12
, хранящееся в формате PCKS12.
3.3. PKCS#12 в JKS
Последний шаг — преобразование из формата PKCS12 в формат JKS:
keytool -importkeystore -srckeystore certificate.p12 -srcstoretype pkcs12 -destkeystore cert.jks
По мере выполнения команды будет запрашиваться новый пароль для файла cert.jks
:
Enter destination keystore password:
И он запросит у нас пароль certificate.p12 , который мы создали ранее:
Enter source keystore password:
Затем мы должны увидеть окончательный вывод:
Entry for alias certificate successfully imported.
Import command completed: 1 entries successfully imported, 0 entries failed or cancelled
Результатом является хранилище ключей cert.jks
, хранящееся в формате JKS.
4. Вывод
В этой статье мы описали шаги по преобразованию файла PEM в формат JKS с помощью промежуточного формата PKCS12.
В качестве вспомогательных инструментов мы использовали команды keytool
и openssl
.