- Команды Java Keytool
- Команды Java Keytool для создания и импорта
- Команды Java Keytool для проверки
- Другие команды Java Keytool
- Основы Java Keytool: работа с Java Keystore
- Создание и импортирование записей
- Создание ключей
- Создание CSR для существующего закрытого ключа
- Импортирование подписанного/Root/промежуточного сертификата
- Создание самоподписанного сертификата в новом/существующем хранилище
- Просмотр записей хранилища ключей
- Проверка контрольной суммы сертификата
- Подробное содержание хранилища
- Использование Keytool для просмотра информации о сертификате
- Экспортирование сертификатов
- Редактирование хранилища ключей
- Изменение пароля хранилища
- Удаление псевдонима
- Изменение псевдонима
- Итоги
Команды Java Keytool
Java Keytool — это утилита для управления ключами и сертификатами. Она позволяет пользователям управлять своими собственными парами открытых/закрытых ключей и сертификатами . Она также позволяет пользователям кэшировать сертификаты. Java Keytool хранит ключи и сертификаты в так называемом хранилище ключей. По умолчанию хранилище ключей Java реализовано в виде файла. Он защищает закрытые ключи паролем. Хранилище ключей Keytool содержит закрытый ключ и любые сертификаты, необходимые для завершения цепочки доверия и установления надежности основного сертификата.
Каждый сертификат в хранилище ключей Java связан с уникальным псевдонимом. При создании хранилища ключей Java вы сначала создадите файл .jks, который изначально будет содержать только закрытый ключ. Затем вы сгенерируете CSR, и на его основе будет сгенерирован сертификат. Затем вы импортируете сертификат в хранилище ключей, включая все корневые сертификаты. Java Keytool также имеет несколько других функций, которые позволяют просматривать сведения о сертификате или перечислять сертификаты, содержащиеся в хранилище ключей, или экспортировать сертификаты.
Эти команды позволяют создать новый файл хранилища ключей Java Keytool, создать CSR и импортировать сертификаты. Любые корневые или промежуточные сертификаты необходимо будет импортировать перед импортом основного сертификата для вашего домена.
Команды Java Keytool для создания и импорта
Эти команды позволяют создать новый файл хранилища ключей Java Keytool, создать CSR и импортировать сертификаты. Любые корневые или промежуточные сертификаты необходимо будет импортировать перед импортом основного сертификата для вашего домена.
Создайте хранилище ключей Java и пару ключей
keytool -genkey -alias kuzevanov.ru -keyalg RSA -keystore /etc/pki/java/cacerts -keysize 2048
Создайте запрос на подпись сертификата (CSR) для существующего хранилища ключей Java
keytool -certreq -alias kuzevanov.ru -keystore /etc/pki/java/cacerts -file file_cert.csr
Импорт корневого или промежуточного сертификата ЦС в существующее хранилище ключей Java
keytool -import -trustcacerts -alias root -file name_cert.crt -keystore /etc/pki/java/cacerts
Импорт подписанного первичного сертификата в существующее хранилище ключей Java
keytool -import -trustcacerts -alias kuzevanov.ru -file name_sert.crt -keystore /etc/pki/java/cacerts
Создайте хранилище ключей и самозаверяющий сертификат
keytool -genkey -keyalg RSA -alias selfsigned -keystore /etc/pki/java/cacerts -storepass password -validity 360 -keysize 2048
Команды Java Keytool для проверки
Если вам нужно проверить информацию в сертификате или хранилище ключей Java, используйте эти команды.
Проверить автономный сертификат
keytool -printcert -v -file name_sert.crt
Проверьте, какие сертификаты находятся в хранилище ключей Java
keytool -list -v -keystore /etc/pki/java/cacerts
Проверьте конкретную запись хранилища ключей, используя псевдоним
keytool -list -v -keystore /etc/pki/java/cacerts -alias kuzevanov.ru
Другие команды Java Keytool
Удалить сертификат из хранилища ключей Java Keytool
keytool -delete -alias kuzevanov.ru -keystore /etc/pki/java/cacerts
Изменить пароль хранилища ключей Java
keytool -storepasswd -new new_storepass -keystore /etc/pki/java/cacerts
Экспорт сертификата из хранилища ключей
keytool -export -alias kuzevanov.ru -file name_sert.crt -keystore /etc/pki/java/cacerts
Получение списка доверенных сертификатов ЦС
keytool -list -v -keystore $JAVA_HOME/jre/lib/security/cacerts
Импорт нового ЦС в доверенные сертификаты
keytool -import -trustcacerts -file /path/to/ca/ca.pem -alias CA_ALIAS -keystore $JAVA_HOME/jre/lib/security/cacerts
Основы 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, читайте данную статью.