Привет, Хабр! Представляю вашему вниманию перевод 10 статьи "Java Keytool" автора Jakob Jenkov из серии статей для начинающих, желающих освоить основы криптографии в Java. Java Keytool — это инструмент командной строки, который может генерировать пары открытый ключ / закрытый ключ и сохранять их в хранилище ключей. Исполняемый файл утилиты распространяется вместе с Java SDK (или JRE), поэтому, если у вас установлен SDK, значит она у вас также будет предустановлена.
Исполняемый файл называется keytool. Чтобы выполнить его, откройте командную строку (cmd, console, shell и т.д.). и измените текущий каталог на каталог bin в каталоге установки Java SDK. Введите keytool, а затем нажмите клавишу Enter. Вы должны увидеть что-то похожее на это: Как видите, утилита keytool поддерживает набор команд для работы с ключами, сертификатами и хранилищами ключей. В этом руководстве будут рассмотрены наиболее часто используемые из этих команд. Команды утилиты Keytool принимают много аргументов, правильность установки которых может быть трудно запомнить. Поэтому рекомендуется создать несколько скриптов CMD или Shell с последовательностью команд Keytool. Эти сценарии упрощают повторное выполнение команд, а также позволяют вернуться назад и посмотреть, как было создано хранилище ключей. Генерация ключевой пары (открытый ключ / закрытый ключ) является одной из наиболее распространенных задач, для которых используется утилита Keytool. Сгенерированная пара ключей вставляется в файл KeyStore как пара ключей с собственной подписью. Вот общий формат командной строки для генерации пары ключей: Аргументы объяснены в разделе Аргументы Keytool. Не все эти аргументы нужны и многие являются не обязательными. Утилита сообщит вам, если вы пропустили обязательный аргумент. Вот пример команды, которая импортирует сертификат в KeyStore. Не забудьте удалить разрывы строк при вводе команды в командной строке. Чтобы вывести список записей в хранилище ключей, вы можете использовать команду list. Ниже представлен формат для команды list. Разрывы строк предназначены только для упрощения чтения. Удалите разрывы строк перед выполнением команды: Вот пример команды list. Не забудьте удалить разрывы строк! Эта команда выведет список всех записей в данном хранилище ключей. Результат выполнения будет выглядеть примерно так: Если вы включите аргумент alias в команду list, в список попадет только запись, соответствующая данному псевдониму. Вот пример команды list с аргументом alias: Результат выполнения вышеупомянутой команды:  Так же в в утилите keytool имеется команда, которая может удалить запись из хранилища ключей: delete. Вот формат этой команды: Вот пример вызова команды delete. Не забудьте удалить разрывы строк перед запуском! Эта команда удаляет запись хранилища с псевдонимом testkey хранящегося в файле keystore.jks. Утилита keytool может генерировать запрос сертификата с помощью команды certreq. Запрос сертификата — это запрос к центру сертификации (ЦС) на создание публичного сертификата для вашей организации. После создания запроса на сертификат он должен быть отправлен в центр сертификации, в котором вы хотите создать сертификат (например, Verisign, Thawte или какой-либо другой центр сертификации). Прежде чем вы сможете сгенерировать запрос сертификата для личного ключа и пары открытых ключей, вы должны сгенерировать этот закрытый ключ и пару открытых ключей в хранилище ключей (или импортировать его). Как это сделать можно посмотреть в соответсвтующей главе. Вот формат команды для генерации запроса сертификата. Не забудьте удалить все разрывы строк при использовании этой команды: Вот пример команды -certreq: Эта команда сгенерирует запрос сертификата для ключа, сохраненного с псевдонимом testkey в файле keystore.jks, и запишет запрос сертификата в файл с именем certreq.certreq. Ниже приведен список аргументов, которые принимают различные команды keytool. Помните, что не все команды принимают все эти аргументы. Посмотрите на конкретную команду, чтобы увидеть, какие аргументы она принимает. Программист