Поиск по сайту:

Java Keytool Essentials: работа с хранилищами ключей Java


Введение

Java Keytool — это инструмент управления ключами и сертификатами, который используется для управления хранилищами ключей Java и входит в состав Java. Хранилище ключей Java — это контейнер для сертификатов авторизации или сертификатов открытого ключа, который часто используется приложениями на основе Java для шифрования, аутентификации и обслуживания по протоколу HTTPS. Его записи защищены паролем хранилища ключей. Запись хранилища ключей определяется псевдонимом и состоит из ключей и сертификатов, образующих цепочку доверия.

Это руководство в стиле шпаргалки содержит краткий справочник по командам keytool, которые обычно полезны при работе с хранилищами ключей Java. Это включает в себя создание и изменение хранилищ ключей Java, чтобы их можно было использовать с вашими приложениями Java.

Как использовать это руководство:

  • Если вы не знакомы с запросами на подпись сертификата (CSR), прочтите раздел CSR нашей памятки по OpenSSL
  • Это руководство представлено в простом формате шпаргалки и представляет собой автономные фрагменты командной строки.
  • Перейти к любому разделу, имеющему отношение к задаче, которую вы пытаетесь выполнить (Совет: используйте меню Содержание в левом нижнем углу или функцию Найти вашего браузера)
  • Большинство команд представляют собой однострочные команды, которые для ясности были расширены до нескольких строк (с использованием символа \).

Создание и импорт записей хранилища ключей

В этом разделе рассматриваются команды Java Keytool, связанные с созданием пар ключей и сертификатов, а также с импортом сертификатов.

Создание ключей в новом/существующем хранилище ключей

Используйте этот метод, если вы хотите использовать HTTP (HTTP поверх TLS) для защиты вашего Java-приложения. Это создаст новую пару ключей в новом или существующем хранилище ключей Java, которую можно использовать для создания CSR и получения SSL-сертификата из центра сертификации.

Эта команда создает пару 2048-битных ключей RSA под указанным псевдонимом (domain) в указанном файле хранилища ключей (keystore.jks):

keytool -genkeypair \
        -alias domain \
        -keyalg RSA \
        -keystore keystore.jks

Если указанное хранилище ключей еще не существует, оно будет создано после предоставления запрошенной информации. Это запросит пароль хранилища ключей (новый или существующий), за которым следует приглашение отличительного имени (для закрытого ключа), а затем желаемый пароль закрытого ключа.

Создать CSR для существующего закрытого ключа

Используйте этот метод, если вы хотите сгенерировать CSR, который вы можете отправить в ЦС, чтобы запросить выдачу SSL-сертификата, подписанного ЦС. Требуется, чтобы хранилище ключей и псевдоним уже существовали; вы можете использовать предыдущую команду, чтобы убедиться в этом.

Эта команда создает CSR (domain.csr), подписанный закрытым ключом, идентифицированным псевдонимом (domain) в (keystore.jks) хранилище ключей:

keytool -certreq \
        -alias domain \
        -file domain.csr \
        -keystore keystore.jks

После ввода пароля хранилища ключей будет сгенерирован CSR.

Импорт подписанного/корневого/промежуточного сертификата

Используйте этот метод, если вы хотите импортировать подписанный сертификат, например. сертификат, подписанный ЦС, в хранилище ключей; он должен соответствовать закрытому ключу, существующему в указанном псевдониме. Вы также можете использовать эту же команду для импорта корневых или промежуточных сертификатов, которые могут потребоваться вашему ЦС для завершения цепочки доверия. Просто укажите уникальный псевдоним, например root вместо domain, и сертификат, который вы хотите импортировать.

Эта команда импортирует сертификат (domain.crt) в хранилище ключей (keystore.jks) под указанным псевдонимом (domain). Если вы импортируете подписанный сертификат, он должен соответствовать закрытому ключу в указанном псевдониме:

keytool -importcert \
        -trustcacerts -file domain.crt \
        -alias domain \
        -keystore keystore.jks

Вам будет предложено ввести пароль хранилища ключей, а затем подтвердить действие импорта.

Примечание. Вы также можете использовать эту команду для импорта сертификатов ЦС в хранилище доверенных сертификатов Java, которое обычно находится в $JAVA_HOME/jre/lib/security/cacerts при условии, что $JAVA_HOME где установлена ваша JRE или JDK.

Создать самозаверяющий сертификат в новом/существующем хранилище ключей

Используйте эту команду, если вы хотите сгенерировать самозаверяющий сертификат для ваших приложений Java. На самом деле это та же самая команда, которая используется для создания новой пары ключей, но со сроком действия, указанным в днях.

Эта команда создает пару 2048-битных ключей RSA, действительную в течение 365 дней, под указанным псевдонимом (домен) в указанном файле хранилища ключей (keystore.jks ):

keytool -genkey \
        -alias domain \
        -keyalg RSA \
        -validity 365 \
        -keystore keystore.jks

Если указанное хранилище ключей еще не существует, оно будет создано после предоставления запрошенной информации. Это запросит пароль хранилища ключей (новый или существующий), за которым следует приглашение отличительного имени (для закрытого ключа), а затем желаемый пароль закрытого ключа.

Просмотр записей хранилища ключей

В этом разделе рассматривается перечисление содержимого хранилища ключей Java, например, просмотр информации о сертификате или экспорт сертификатов.

Получение списка отпечатков сертификатов хранилища ключей

Эта команда выводит отпечатки SHA всех сертификатов в хранилище ключей (keystore.jks) под их соответствующими псевдонимами:

keytool -list \
        -keystore keystore.jks

Вам будет предложено ввести пароль хранилища ключей. Вы также можете ограничить вывод определенным псевдонимом, используя параметр -alias domain, где \домен – это псевдоним.

Список подробного содержимого хранилища ключей

Эта команда выводит подробную информацию о записях, содержащихся в хранилище ключей (keystore.jks), включая длину цепочки сертификатов, отпечатки сертификатов в цепочке, отличительные имена, серийный номер и дату создания/истечения срока действия, под их соответствующие псевдонимы:

keytool -list -v \
        -keystore keystore.jks

Вам будет предложено ввести пароль хранилища ключей. Вы также можете ограничить вывод определенным псевдонимом, используя параметр -alias domain, где \домен – это псевдоним.

Примечание. Вы также можете использовать эту команду, чтобы просмотреть, какие сертификаты находятся в вашем хранилище доверенных сертификатов Java, которое обычно находится в $JAVA_HOME/jre/lib/security/cacerts при условии, что $JAVA_HOME где установлена ваша JRE или JDK.

Используйте Keytool для просмотра информации о сертификате

Эта команда выводит подробную информацию о файле сертификата (certificate.crt), включая его отпечатки пальцев, отличительные имена владельца и издателя, а также период его действия:

keytool -printcert \
        -file domain.crt

Вам будет предложено ввести пароль хранилища ключей.

Сертификат экспорта

Эта команда экспортирует двоичный сертификат в кодировке DER (domain.der), связанный с псевдонимом (domain), в хранилище ключей (keystore.jks):

keytool -exportcert
        -alias domain
        -file domain.der
        -keystore keystore.jks

Вам будет предложено ввести пароль хранилища ключей. Если вы хотите преобразовать сертификат в кодировке DER в кодировку PEM, следуйте нашей шпаргалке по OpenSSL.

Изменение хранилища ключей

В этом разделе рассматривается изменение записей хранилища ключей Java, например удаление или переименование псевдонимов.

Изменить пароль хранилища ключей

Эта команда используется для изменения пароля хранилища ключей (keystore.jks):

keytool -storepasswd \
        -keystore keystore.jks

Вам будет предложено ввести текущий пароль, а затем новый пароль. Вы также можете указать новый пароль в команде, используя параметр -new newpass, где \newpass — это пароль.

Удалить псевдоним

Эта команда используется для удаления псевдонима (domain) в хранилище ключей (keystore.jks):

keytool -delete \
        -alias domain \
        -keystore keystore.jks

Вам будет предложено ввести пароль хранилища ключей.

Переименовать псевдоним

Эта команда переименует псевдоним (domain) в псевдоним назначения (newdomain) в хранилище ключей (keystore.jks):

keytool -changealias \
        -alias domain \
        -destalias newdomain \
        -keystore keystore.jks

Вам будет предложено ввести пароль хранилища ключей.

Заключение

Это должно охватывать то, как большинство людей используют Java Keytool для управления своими хранилищами ключей Java. У него есть много других применений, которые здесь не описаны, поэтому не стесняйтесь спрашивать или предлагать другие варианты использования в комментариях.

Это руководство основано на версии хранилища ключей, которая поставляется с обновлением 65 Java 1.7.0. Чтобы получить помощь по установке Java в Ubuntu, следуйте этому руководству.