Подтвердить что ты не робот

Как хранить и загружать ключи с помощью класса java.security.KeyStore

После создания секретных ключей, как их сохранить с помощью методов класса Keystore и как загрузить ключи?

4b9b3361

Ответ 1

Хранение:

KeyStore ks = KeyStore.getInstance("JKS");
ks.setKeyEntry("keyAlias", key, passwordForKeyCharArray, certChain);
OutputStream writeStream = new FileOutputStream(filePathToStore);
ks.store(writeStream, keystorePasswordCharArray);
writeStream.close();

Обратите внимание, что certChain может быть нулевым, если вы не передаете PrivateKey

Загрузка:

KeyStore ks = KeyStore.getInstance("JKS");
InputStream readStream = new FileInputStream(filePathToStore);
ks.load(readStream, keystorePasswordCharArray);
Key key = ks.getKey("keyAlias", passwordForKeyCharArray);
readStream.close();

Прочитайте Javadocs

РЕДАКТИРОВАТЬ:

Обратите внимание, что если вы храните SecretKey или используете какую-либо часть поставщика SunJCE (Java Cryptography Extension), вам нужно будет установить тип хранилища ключей в JCEKS.

KeyStore ks = KeyStore.getInstance("JCEKS");

Ответ 2

У меня была ситуация, когда я не знал псевдонима ключа, но я знал, что в хранилище ключей был только один ключ. Я использовал следующий код для загрузки ключа (после загрузки хранилища ключей, как показано выше):

Enumeration<String> aliases = keyStore.aliases();
String alias = aliases.nextElement();
KeyStore.PrivateKeyEntry keyEnt = (KeyStore.PrivateKeyEntry) keyStore.getEntry(alias,
                    new KeyStore.PasswordProtection(keystorePass.toCharArray()));
PrivateKey privateKey = keyEnt.getPrivateKey();

Я добавил пост в свой блог с подробностями о том, как загрузить закрытый ключ, открытый ключ и как их использовать.