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

原来我不得不为.KeyStore而不是KeyManagerFactory.

这是我在创建 KeyStore 文件时犯的一个错误。我使用Portecle将我的 PKCS#12 密钥转换为 JKS,它将 KeyStore 内的密钥对的密码重置为“密码”,但在第一次复飞时我错过了这个。

因此,使用 Portecle,我能够将整个 KeyStore 中包含的密钥对上的密码重置为我期望的值,然后一切正常。

谢谢布鲁诺

于 2012-08-10T19:34:37.417 回答