KeyStore получить ключ без пароля - PullRequest
5 голосов
/ 18 марта 2012

Мне нужно знать, возможно ли получить ключ из хранилища ключей без предоставления «storepass».В документации здесь сказано, что "При извлечении информации из хранилища ключей пароль является необязательным; если пароль не задан, целостность полученной информации не может быть проверена и отображается предупреждение"

Однако, когда я пытаюсь получить Ключ без пароля, я получаю "java.lang.IllegalArgumentException: пароль не может быть нулевым" исключение.

Ниже следуеткак я создал KeyStore

keytool -genseckey -alias "myKey" -keystore KEYSTORE.jks -storepass "password" -storetype "JCEKS" -keyalg AES -keysize 128

И я попытался получить его следующим образом

final KeyStore keyStore = KeyStore.getInstance("JCEKS");
keyStore.load(new FileInputStream(new File("C:\\temp\\keytool\\KEYSTORE.jks")), 
  null);
final Key key = keyStore.getKey("myKey", null);

Что выдает следующее исключение

java.lang.IllegalArgumentException: password can't be null
at com.sun.crypto.provider.SunJCE_z.<init>(DashoA13*..)
at com.sun.crypto.provider.JceKeyStore.engineGetKey(DashoA13*..)
at java.security.KeyStore.getKey(KeyStore.java:763)

Полностью ли я неправильно понял документацию?Есть ли другой способ обойти это, так как я не вижу смысла хранить «passpass» в открытом виде в моем коде, где все могут его видеть, что делает пароль бесполезным.

1 Ответ

7 голосов
/ 18 марта 2012

Если storepass (который используется для доступа к закрытому ключу) не предоставлен, он попытается использовать keypass, т. Е. Пароль хранилища ключей, который вы также не предоставите.
Вот почему выполучите исключение.
Вы не можете иметь оба keypass и storepass null
По вашей ссылке:

Для опции -keypass, есливы не указываете эту опцию в командной строке, keytool сначала попытается использовать пароль хранилища ключей для восстановления личного / секретного ключа, а в случае сбоя запросит пароль личного / секретного ключа

...