Основы Java Keytool: работа с Java Keystore

Java Keytool – это инструмент Java для управления ключами, сертификатами и хранилищами ключей. Java Keystore (или JKS) – это хранилище сертификатов открытых ключей и авторизации, которое часто используется приложениями на основе Java для шифрования, аутентификации и установки соединений HTTPS. Все его записи защищены паролем хранилища ключей. Запись хранилища ключей идентифицируется псевдонимом и содержит надежные ключи и сертификаты.

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

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

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

Создание ключей

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Если заданного хранилища ключей не существует, команда создаст его, получив необходимые данные (это пароль хранилища, Distinguished Name (дл закрытого ключа) и пароль закрытого ключа).

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

В данном разделе речь пойдет о содержимом Java Keystore, а именно о просмотре информации сертификата и экспортировании сертификатов.

Проверка контрольной суммы сертификата

Данная команда выводит список контрольных сумм всех сертификатов хранилища (keystore.jks) с соответствующими псевдонимами.

keytool -list \
-keystore keystore.jks

При этом будет запрошен пароль хранилища. Кроме того, можно ограничить вывод до определенного псевдонима с помощью опции -alias domain (где domain  – нужный псевдоним).

Подробное содержание хранилища

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

keytool -list -v \
-keystore keystore.jks

На данном этапе нужно ввести пароль хранилища ключей. Опять же, с помощью опции -alias domain (где domain – это псевдоним) можно ограничить вывод до определенного псевдонима.

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

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

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

keytool -printcert \
-file domain.crt

При этом нужно ввести пароль хранилища.

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

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

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

Укажите пароль хранилища ключей.

Редактирование хранилища ключей

Данный раздел охватывает редактирование  записей Java Keystore (например, удаление и изменение псевдонимов).

Изменение пароля хранилища

При помощи этой команды можно изменить пароль хранилища (keystore.jks):

keytool -storepasswd \
-keystore keystore.jks

Укажите текущий пароль хранилища ключей, а затем новый пароль. Задать новый пароль можно и при помощи самой команды, внеся в нее опцию -new newpass, где newpass – новый пароль.

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

Данная команда удалит псевдоним domain из хранилища keystore.jks:

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

Укажите пароль хранилища.

Изменение псевдонима

При помощи данной команды можно изменить псевдоним (например, domain на newdomain):

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

Итоги

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

Данное руководство основано на версии хранилища ключей, которое поставляется с Java 1.7.0. чтобы установить Java, читайте данную статью.

Tags: , , , , , , , , , ,

Добавить комментарий