У меня есть следующий вопрос о java keystores и keytool. Я полагаю, что хранилище ключей может иметь более одного сертификата. Как я уже пытался, через keytool я могу создать хранилище ключей, и для доступа к этому хранилищу ключей я должен установить пароль. Также для доступа к каждой записи сертификата я должен установить пароль. Обязательно ли иметь один и тот же пароль для хранилища ключей и записей? Если нет (и я думаю, что это разумно предположить так) почему следующий код:java keystore and password settings
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. У каждого есть другой пароль с хранилищем ключей (и друг с другом). Теперь код правильный, потому что, если я использую хранилище ключей с одной записью сертификата, имеющей тот же пароль, что и хранилище ключей, нет никакого исключения, и программа работает нормально.
Так в чем проблема? У меня не должно быть разных паролей? У меня не должно быть много сертификатов? Или что?
Итак, вы говорите, что это неявное требование? Есть ли причина, чтобы заставить это ограничение в KeyManagerFactory? Я предполагаю, что в реальных сценариях общий случай заключается в использовании разных паролей. – Cratylus
Это неявно, как для определения API KeyManagerFactory , Я бы предположил, что API был создан для обработки простейшего сценария, который состоит в том, что все ключи имеют одинаковый пароль. KeyManagerFactory - это простой механизм, который охватывает то, что может быть более распространенным подходом (я еще не проверял). API KeyStore позволяют вам получать доступ к различным ключам с разными паролями, что позволяет расширить функциональность для более сложных сценариев. Что касается обоснования определения API ... трудно сказать. –
Это работает. Цените помощь! – Bai