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

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

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

Задача: Наибольшая подстрока без повторений

Для заданной строки s, найдите длину наибольшей подстроки без повторяющихся символов. Подстрока — это непрерывная непустая последовательность символов внутри строки...

ANDROMEDA 42

1. Введение

Java KeyStore — это контейнер сертификатов безопасности, которые мы можем использовать при написании кода Java. Хранилища ключей Java содержат один или несколько сертификатов с соответствующими закрытыми ключами и создаются с помощью keytool , который поставляется с JDK.

В этом руководстве мы преобразуем хранилище ключей Java в формат PEM (Privacy-Enhanced Mail), используя комбинацию keytool и openssl. Шаги будут включать использование keytool для преобразования JKS в хранилище ключей PKCS#12, а затем openssl для преобразования хранилища ключей PKCS#12 в файл PEM.

keytool доступен с JDK, и мы можем загрузить openssl с веб-сайта OpenSSL.

2. Форматы файлов

Хранилища ключей Java хранятся в формате файла JKS. Это собственный формат, специально предназначенный для использования в программах Java. Хранилища ключей PKCS#12 не являются проприетарными и становятся все более популярными — начиная с Java 9 PKCS#12 используется в качестве формата хранилища ключей по умолчанию вместо JKS.

Файлы PEM также являются контейнерами сертификатов — они кодируют двоичные данные с использованием Base64, что позволяет легче передавать содержимое через разные системы. Файл PEM может содержать несколько экземпляров, каждый из которых соответствует двум правилам:

  • Однострочный заголовок
-----BEGIN <label>-----
  • Нижний колонтитул в одну строку
-----END <label>-----

<label> указывает тип закодированного сообщения, общие значения CERTIFICATE и PRIVATE KEY .

3. Преобразование всего JKS в формат PEM

Давайте теперь выполним шаги по преобразованию всех сертификатов и закрытых ключей из JKS в формат PEM.

3.1. Создание хранилища ключей Java

Мы начнем с создания JKS с одной парой ключей RSA:

keytool -genkey -keyalg RSA -v -keystore keystore.jks -alias first-key-pair

Мы введем пароль KeyStore в приглашении и введем информацию о паре ключей.

Для этого примера мы также создадим вторую пару ключей:

keytool -genkey -keyalg RSA -v -keystore keystore.jks -alias second-key-pair

3.2. JKS в PKCS#12

Первым шагом в процессе преобразования является преобразование JKS в PKCS#12 с помощью keytool :

keytool -importkeystore -srckeystore keystore.jks \
-destkeystore keystore.p12 \
-srcstoretype jks \
-deststoretype pkcs12

Опять же, мы ответим на запросы пароля — один запросит пароль исходного JKS, а другой попросит нас создать пароль для результирующего хранилища ключей PKCS#12.

Давайте проверим результат выполнения этой команды:

Entry for alias first-key-pair successfully imported.
Entry for alias second-key-pair successfully imported.
Import command completed: 2 entries successfully imported, 0 entries failed or cancelled

Результатом является keystore.p12 KeyStore, хранящийся в формате PKCS#12.

3.3. PKCS#12 в PEM

Отсюда мы будем использовать openssl для кодирования keystore.p12 в файл PEM:

openssl pkcs12 -in keystore.p12 -out keystore.pem

Инструмент запросит у нас пароль хранилища ключей PKCS#12 и парольную фразу PEM для каждого псевдонима. Парольная фраза PEM используется для шифрования полученного закрытого ключа.

Если мы не хотим шифровать полученный закрытый ключ, вместо этого мы должны использовать:

openssl pkcs12 -nodes -in keystore.p12 -out keystore.pem

keystore.pem будет содержать все ключи и сертификаты из KeyStore. В этом примере он содержит закрытый ключ и сертификат как для псевдонимов первой пары ключей, так и для второй пары ключей .

4. Преобразование одного сертификата из JKS в PEM

Мы можем экспортировать один сертификат открытого ключа из JKS в формат PEM, используя только keytool :

keytool -exportcert -alias first-key-pair -keystore keystore.jks -rfc -file first-key-pair-cert.pem

После ввода пароля JKS в командной строке мы увидим вывод этой команды:

Certificate stored in file <first-key-pair-cert.pem>

5. Вывод

Мы успешно преобразовали весь JKS в формат PEM, используя keytool , openssl и промежуточный этап формата PKCS#12. Мы также рассмотрели преобразование одного сертификата открытого ключа только с помощью keytool .