Основы Java Keytool: работа с хранилищами Java

Вступление

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

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

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

  • Если вы не знакомы с запросами на подпись сертификата (CSR), прочитайте раздел CSR нашего https://www.digitalocean.com/community/tutorials/openssl-essentials-working-with-ssl-certificates-private-keys-and -csrs / [шпаргалка OpenSSL]

  • Это руководство представлено в простом формате в виде шпаргалки - отдельные фрагменты командной строки

  • Перейдите к любому разделу, который имеет отношение к задаче, которую вы пытаетесь выполнить (подсказка: используйте меню Contents слева внизу или функцию Find вашего браузера)

  • Большинство команд являются однострочными, которые были расширены до нескольких строк (с помощью символа + \ +) для ясности

Создание и импорт записей Keystore

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

Генерация ключей в новом / существующем хранилище ключей

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

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

keytool -genkeypair \
       -alias  \
       -keyalg RSA \
       -keystore

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

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

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

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

keytool -certreq \
       -alias  \
       -file  \
       -keystore

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

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

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

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

keytool -importcert \
       -trustcacerts -file  \
       -alias  \
       -keystore

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

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

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

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

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

keytool -genkey \
       -alias  \
       -keyalg RSA \
       -validity  \
       -keystore

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

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

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

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

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

keytool -list \
       -keystore

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

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

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

keytool -list -v \
       -keystore

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

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

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

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

keytool -printcert \
       -file

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

Экспортный сертификат

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

keytool -exportcert
       -alias
       -file
       -keystore

Вам будет предложено ввести пароль хранилища ключей. Если вы хотите преобразовать DER-кодированный сертификат в PEM-кодировку, следуйте нашим https://www.digitalocean.com/community/tutorials/openssl-essentials-working-with-ssl-certificates-private-keys-and-csrs # convert-certificate-format [шпаргалка OpenSSL].

Модификация Keystore

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

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

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

keytool -storepasswd \
       -keystore

Вам будет предложено ввести текущий пароль, а затем новый пароль. Вы также можете указать новый пароль в команде, используя опцию + -new newpass +, где «newpass» - пароль.

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

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

keytool -delete \
       -alias domain \
       -keystore

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

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

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

keytool -changealias \
       -alias  \
       -destalias  \
       -keystore

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

Заключение

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

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