Add certificate to java keystore

Криптография в Java. Утилита Keytool

Привет, Хабр! Представляю вашему вниманию перевод 10 статьи «Java Keytool» автора Jakob Jenkov из серии статей для начинающих, желающих освоить основы криптографии в Java.

Оглавление:

Утилита Keytool

Java Keytool — это инструмент командной строки, который может генерировать пары открытый ключ / закрытый ключ и сохранять их в хранилище ключей. Исполняемый файл утилиты распространяется вместе с Java SDK (или JRE), поэтому, если у вас установлен SDK, значит она у вас также будет предустановлена.
Исполняемый файл называется keytool . Чтобы выполнить его, откройте командную строку (cmd, console, shell и т.д.). и измените текущий каталог на каталог bin в каталоге установки Java SDK. Введите keytool , а затем нажмите клавишу Enter . Вы должны увидеть что-то похожее на это:

C:\Program Files\Java\jdk1.8.0_111\bin>keytool Key and Certificate Management Tool Commands: -certreq Generates a certificate request -changealias Changes an entry's alias -delete Deletes an entry -exportcert Exports certificate -genkeypair Generates a key pair -genseckey Generates a secret key -gencert Generates certificate from a certificate request -importcert Imports a certificate or a certificate chain -importpass Imports a password -importkeystore Imports one or all entries from another keystore -keypasswd Changes the key password of an entry -list Lists entries in a keystore -printcert Prints the content of a certificate -printcertreq Prints the content of a certificate request -printcrl Prints the content of a CRL file -storepasswd Changes the store password of a keystore Use "keytool -command_name -help" for usage of command_name C:\Program Files\Java\jdk1.8.0_111\bin>

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

Читайте также:  Beautifulsoup python findall href

Скрипты Keytool

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

Генерация ключевой пары

Генерация ключевой пары (открытый ключ / закрытый ключ) является одной из наиболее распространенных задач, для которых используется утилита Keytool . Сгенерированная пара ключей вставляется в файл KeyStore как пара ключей с собственной подписью. Вот общий формат командной строки для генерации пары ключей:

-genkeypair -alias alias -keyalg keyalg -keysize keysize -sigalg sigalg -dname dname -keypass keypass -validity valDays -storetype storetype -keystore keystore -storepass storepass -providerClass provider_class_name -providerArg provider_arg -v -protected -Jjavaoption

Аргументы объяснены в разделе Аргументы Keytool. Не все эти аргументы нужны и многие являются не обязательными. Утилита сообщит вам, если вы пропустили обязательный аргумент. Вот пример команды, которая импортирует сертификат в KeyStore. Не забудьте удалить разрывы строк при вводе команды в командной строке.

"C:\\Program Files\Java\jdk1.8.0_111\bin\keytool" -importcert -alias testkey -keypass 123456 -storetype JKS -keystore keystore2.jks -file cert.cert -rfc -storepass abcdef

Список записей хранилища

Чтобы вывести список записей в хранилище ключей, вы можете использовать команду list . Ниже представлен формат для команды list . Разрывы строк предназначены только для упрощения чтения. Удалите разрывы строк перед выполнением команды:

-list -alias alias -storetype storetype -keystore keystore -storepass storepass -providerName provider_name -providerClass provider_class_name -providerArg provider_arg -v -rfc -protected -Jjavaoption

Вот пример команды list . Не забудьте удалить разрывы строк!

"C:\\Program Files\Java\jdk1.8.0_111\bin\keytool" -list -storetype JKS -keystore keystore.jks -storepass abcdef

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

Keystore type: JKS Keystore provider: SUN Your keystore contains 1 entry testkey, 19-Dec-2017, PrivateKeyEntry, Certificate fingerprint (SHA1): 4F:4C:E2:C5:DA:36:E6:A9:93:6F:10:36:9E:E5:E8:5A:6E:F2:11:16

Если вы включите аргумент alias в команду list , в список попадет только запись, соответствующая данному псевдониму. Вот пример команды list с аргументом alias :

"C:\\Program Files\Java\jdk1.8.0_111\bin\keytool" -list -alias testkey -storetype JKS -keystore keystore.jks -storepass abcdef

Результат выполнения вышеупомянутой команды:

testkey, 15-Dec-2017, PrivateKeyEntry, Certificate fingerprint (SHA1): 71:B0:6E:F1:E9:5A:E7:F5:5E:78:71:DC:08:80:47:E9:5F:F8:6D:25

Удаление записи хранилища ключей

Так же в в утилите keytool имеется команда, которая может удалить запись из хранилища ключей: delete . Вот формат этой команды:

-delete -alias alias -storetype storetype -keystore keystore -storepass storepass -providerName provider_name -providerClass provider_class_name -providerArg provider_arg -v -protected -Jjavaoption

Вот пример вызова команды delete . Не забудьте удалить разрывы строк перед запуском!

"C:\\Program Files\Java\jdk1.8.0_111\bin\keytool" -delete -alias testkey -storetype JKS -keystore keystore.jks -storepass abcdef

Эта команда удаляет запись хранилища с псевдонимом testkey хранящегося в файле keystore.jks .

Генерация запроса на сертификат

Утилита keytool может генерировать запрос сертификата с помощью команды certreq . Запрос сертификата — это запрос к центру сертификации (ЦС) на создание публичного сертификата для вашей организации. После создания запроса на сертификат он должен быть отправлен в центр сертификации, в котором вы хотите создать сертификат (например, Verisign, Thawte или какой-либо другой центр сертификации). Прежде чем вы сможете сгенерировать запрос сертификата для личного ключа и пары открытых ключей, вы должны сгенерировать этот закрытый ключ и пару открытых ключей в хранилище ключей (или импортировать его). Как это сделать можно посмотреть в соответсвтующей главе. Вот формат команды для генерации запроса сертификата. Не забудьте удалить все разрывы строк при использовании этой команды:

-certreq -alias alias -sigalg sigalg -file certreq_file -keypass keypass -storetype storetype -keystore keystore -storepass storepass -providerName provider_name -providerClass provider_class_name -providerArg provider_arg -v -protected -Jjavaoption

Вот пример команды -certreq :

"C:\\Program Files\Java\jdk1.8.0_111\bin\keytool" -certreq -alias testkey -keypass 123456 -storetype JKS -keystore keystore.jks -storepass abcdef -file certreq.certreq

Эта команда сгенерирует запрос сертификата для ключа, сохраненного с псевдонимом testkey в файле keystore.jks , и запишет запрос сертификата в файл с именем certreq.certreq .

Аргументы утилиты keytool

Ниже приведен список аргументов, которые принимают различные команды keytool . Помните, что не все команды принимают все эти аргументы. Посмотрите на конкретную команду, чтобы увидеть, какие аргументы она принимает.

  • -alias Псевдоним записи в хранилище ключей. Помните, псевдоним
    может указывать только на один ключ.
  • -keyalg Название алгоритма, используемого для генерации ключа. Обычно используется RSA.
  • -keysize Размер ключа в битах. Обычно размеры ключа кратны. Кроме того, различные алгоритмы могут поддерживать только определенные предварительно заданные размеры ключей.
  • -sigalg Алгоритм подписи, используемый для подписи пары ключей.
  • -dname Уникальное имя из стандарта X.500. Это имя будет связано с
    псевдонимом для этой пары ключей в хранилище ключей, также
    используется в качестве полей «эмитент» и «субъект» в самозаверяющем
    сертификате.
  • -keypass Пароль ключевой пары, необходимый для
    доступа к этой конкретной паре ключей в хранилище ключей.
  • -validity Количество дней, в течение которых сертификат,
    приложенный к паре ключей, должен быть действительным.
  • -storetype Формат файла, в котором должно быть сохранено хранилище ключей. По умолчанию используется JKS. Другим вариантом является формат PKCS11.
  • -keystore Имя файла хранилища для хранения сгенерированной пары
    ключей. Если файл не существует, он будет создан.
  • -file Имя файла для чтения или записи сертификата или запроса сертификата.
  • -storepass Пароль от хранилища ключей, всем, кто захочет работать
    с ним, понадобится этот пароль. Отличие storepass от keypass в
    том что первый предоставляет доступ к хранилищу, а второй к отдельной
    паре ключей. Вам понадобятся оба пароля для доступа к любому ключу,
    хранящемуся в хранилище.
  • -rfc Если включить этот флаг, то утилита будет использовать текстовый формат, а не двоичный формат, например для экспорта или импорта сертификатов. Значение -rfc
    относится к стандарту RFC 1421.
  • -providerName Имя провайдера криптографического API, который вы хотите использовать при создании пары ключей. Имя провайдера должно быть указано в файлах свойств безопасности Java.
  • -providerClass Имя корневого класса провайдера криптографического API, который вы хотите использовать. Используется когда имя провайдера не указано в файлах свойств безопасности Java.
  • -providerArg Аргументы, передаваемые собственному криптографическому провайдеру при инициализации (если это необходимо провайдеру).
  • -v Сокращенное от verbose, утилита Keytool будет выводить много дополнительной информации в командную строку в удобочитаемом формате.
  • -protected Определяет, должен ли пароль хранилища ключей предоставляться каким-либо внешним механизмом, например, аппаратный токен. Допустимые значения: true и false.
  • -Jjavaoption Строка опций для Java VM которая генерирует пару ключей и создает хранилище.

Источник

Оцените статью