Сообщение keystore (The system cannot find the file specified)
относится к этой строке:
new java.io.FileInputStream("keystore");
Похоже, что следовало использовать File f
?Нечто похожее на то, как обрабатывается FileOutputStream
чуть ниже, хорошо работает:
try (FileInputStream fis = new FileInputStream(f)) {
keyStore.load(fis, "password".toCharArray());
}
Для справки, там еще одна ошибка, ожидающая там.Попытка сохранить симметричный ключ AES в хранилище ключей JKS приводит к этой ошибке:
java.security.KeyStoreException: Cannot store non-PrivateKeys
at sun.security.provider.JavaKeyStore.engineSetKeyEntry(JavaKeyStore.java:258)
at sun.security.provider.JavaKeyStore$JKS.engineSetKeyEntry(JavaKeyStore.java:56)
at java.security.KeyStoreSpi.engineSetEntry(KeyStoreSpi.java:550)
at sun.security.provider.KeyStoreDelegator.engineSetEntry(KeyStoreDelegator.java:179)
at sun.security.provider.JavaKeyStore$DualFormatJKS.engineSetEntry(JavaKeyStore.java:70)
at java.security.KeyStore.setEntry(KeyStore.java:1557)
at KeystoreTest.main(KeystoreTest.java:44)
Это связано с тем, что тип хранилища JKS поддерживает только открытый / закрытый ключи - также здесь .
С новым хранилищем ключей JCEKS ваш пример кода работал нормально:
File f = new File("keystore.jceks");
KeyStore keyStore = KeyStore.getInstance("JCEKS");