0
String keyStorePath = "2keystore.jks";
String keyStoreType = "JKS";
String keyStorePassword = "mypass";

KeyStore keyStore = KeyStore.getInstance(keyStoreType);
InputStream ksis = ClassLoader.getSystemResourceAsStream(keyStorePath);
keyStore.load(ksis, keyStorePassword.toCharArray());
ksis.close();
// Above seems to work fine

KeyManagerFactory kmf =
      KeyManagerFactory.getInstance(KeyManagerFactory.getDefaultAlgorithm());
  kmf.init(keyStore, keyStorePassword.toCharArray());

// Above throws exception:
// UnrecoverableKeyException: Cannot recover key

それでも、keytool を使用すると、次の2keystore.jksようなコンテンツを表示できます。

keytool -list -v -keystore 2keystore.jks | more
Enter keystore password:  mypass
Keystore type: JKS
Keystore provider: SUN

Your keystore contains 3 entries

Alias name:
...

このキーストアをにロードしようとしたときに何が問題になる可能性がありますKeyManagerFactoryか?

ありがとう

4

1 に答える 1

1

ではなく に別のパスワードを指定する必要があることがわかりましKeyStoreKeyManagerFactory

これは、KeyStore ファイルの作成時に私が犯した間違いです。Portecleを使用して PKCS#12 キーを JKS に変換し、KeyStore 内のキーペアのパスワードを「password」にリセットしましたが、最初の回避策でこれを見逃しました。

そのため、Portecle を使用して、KeyStore 全体に含まれるキー ペアのパスワードを期待どおりの値にリセットすることができ、その後はすべて正常に機能しました。

ありがとうブルーノ

于 2012-08-10T19:34:37.417 に答える