java-хранилище ключей и настройки пароля

У меня есть следующий вопрос по хранилищам ключей 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. У каждого свой пароль от хранилища ключей (и друг друга). Теперь код правильный, потому что, если я использую хранилище ключей с единственной записью сертификата, имеющей тот же пароль, что и хранилище ключей, не возникает никаких исключений, и программа работает нормально.

Итак, в чем проблема? У меня не должно быть разных паролей? У меня не должно быть много сертификатов? Или что?

8
задан David Newcomb 27 March 2014 в 09:23
поделиться