Перейти к основному содержимому

Преобразование файла PEM в формат хранилища ключей Java

· 3 мин. чтения

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 .