Существует ли инструмент командной строки для генерации симметричных ключей в хранилище ключей Java? - PullRequest
5 голосов
/ 27 января 2012

Я пишу процедуру обновления ключа для моего приложения. Эта процедура будет выполняться системным администратором каждый год или около того.

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

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

Таким образом, процедура использования другого ключа проста:

  1. создать новый симметричный ключ в хранилище ключей Java с другим псевдонимом
  2. изменить файл конфигурации, чтобы использовать этот новый псевдоним ключа

Но я не знаю ни одного инструмента командной строки, который мог бы создать симметричный ключ в хранилище ключей Java. Утилита java keytool может создавать только пары ключей.

Существует ли инструмент командной строки для генерации симметричных ключей в хранилище ключей Java или мне следует разработать собственный инструмент?

1 Ответ

10 голосов
/ 08 марта 2012

keytool способен генерировать секретный ключ начиная с Java 6 с помощью команды -genseckey .Вот выдержка из документации по Java 6 keytool :

-genseckey {-alias alias} {-keyalg keyalg}
       {-keysize keysize} [-keypass keypass]
       {-storetype storetype} {-keystore keystore}
       [-storepass storepass]
       {-providerClass provider_class_name {-providerArg provider_arg}}
       {-v} {-protected} {-Jjavaoption}

Создает секретный ключ и сохраняет его в новом KeyStore.SecretKeyEntry, указанном псевдоним .

keyalg указывает алгоритм, который будет использоваться для генерации секретного ключа, а keysize указывает размер генерируемого ключа. keypass - пароль, используемый для защиты секретного ключа.Если пароль не указан, пользователю предлагается его ввести.Если вы нажмете RETURN в приглашении, пароль ключа будет установлен на тот же пароль, который использовался для хранилища ключей. keypass должен содержать не менее 6 символов.

Таким образом, следующая команда сгенерирует новый 128-битный ключ AES

keytool -genseckey -alias mykey -keyalg AES -keysize 128 \
    -storetype jceks -keystore mykeystore.jks

Команда keytoolсодержит ошибку опечатки, которая скрывает справочную информацию о -genseckey:

% keytool -help
[...]
-genkeypair  [-v] [-protected]
         [-alias <alias>]
         [-keyalg <keyalg>] [-keysize <taille_clé>]
         [-sigalg <sigalg>] [-dname <nomd>]
         [-validity <joursVal>] [-keypass <mot_passe_clé>]
         [-keystore <keystore>] [-storepass <mot_passe_store>]
         [-storetype <storetype>] [-providername <name>]
         [-providerclass <provider_class_name> [-providerarg <arg>]] ...
         [-providerpath <pathlist>]

-genkeypair  [-v] [-protected]
         [-alias <alias>] [-keypass <keypass>]
         [-keyalg <keyalg>] [-keysize <taille_clé>]
         [-keystore <keystore>] [-storepass <mot_passe_store>]
         [-storetype <storetype>] [-providername <name>]
         [-providerclass <provider_class_name> [-providerarg <arg>]] ...
         [-providerpath <pathlist>] 

Команда -genkeypair появляется дважды.На самом деле второе -genkeypair должно читаться как -genseckey.Вот почему я не заметил команду.

Я столкнулся с этой ошибкой опечатки в Java 1.6.0_26.Я проверил с последней доступной Java 6 (1.6.0_31), и у него та же проблема.Я также проверил последнюю версию Java 7, и проблема с документацией устранена:

% java -version
java version "1.7.0_03"
Java(TM) SE Runtime Environment (build 1.7.0_03-b04)
Java HotSpot(TM) Server VM (build 22.1-b02, mixed mode)
% keytool -help
 [...]
 -genkeypair         Generates a key pair
 -genseckey          Generates a secret key
 [...]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...