У меня есть следующий вопрос по хранилищам ключей Java и keytool. Я предполагаю, что в хранилище ключей может быть более 1 сертификата. Как я и пытался, с помощью keytool я могу создать хранилище ключей, и для доступа к этому хранилищу ключей мне нужно установить пароль. Также для доступа к каждой записи сертификата мне нужно установить пароль. Обязательно ли иметь один и тот же пароль для хранилища ключей и записей? Если нет (и я думаю, что это разумно предположить), то почему следующий код:
char[] pwd = new char[]{'s','e','c','r','e','t'};
KeyStore ks = KeyStore.getInstance(KeyStore.getDefaultType());
ks.load(new FileInputStream("myPersonal.keystore"), pwd);
kmf.init(ks, pwd);//fails here with exception
дает мне следующее исключение?
Exception in thread "main" java.security.UnrecoverableKeyException: Cannot recover key
at sun.security.provider.KeyProtector.recover(Unknown Source)
at sun.security.provider.JavaKeyStore.engineGetKey(Unknown Source)
at sun.security.provider.JavaKeyStore$JKS.engineGetKey(Unknown Source)
at java.security.KeyStore.getKey(Unknown Source)
secret
- это пароль для доступа к хранилищу ключей myPersonal.keystore
, который я создал с помощью keytool. В нем 2 записи для сертификатов, 1 DSA и 1 RSA. У каждого свой пароль от хранилища ключей (и друг друга). Теперь код правильный, потому что, если я использую хранилище ключей с единственной записью сертификата, имеющей тот же пароль, что и хранилище ключей, не возникает никаких исключений, и программа работает нормально.
Итак, в чем проблема? У меня не должно быть разных паролей? У меня не должно быть много сертификатов? Или что?