尝试使用来自密钥库的别名读取密钥时出现UnrecoverableKeyException

时间:2017-01-13 10:23:47

标签: websphere-liberty

我在IBM Websphere下面的第4行代码中遇到以下错误 Liberty Profile 16.0.0

InputStream keystoreStream = EncryptionUtility.class.getResourceAsStream(keyStoreLocation);         
KeyStore keystore = KeyStore.getInstance("JCEKS");
keystore.load(keystoreStream, storePass.toCharArray());
Key key = keystore.getKey(alias, keyPass.toCharArray());

导致以下异常:

Caused by: java.security.UnrecoverableKeyException: com.ibm.crypto.provider.AESSecretKey
at com.sun.crypto.provider.KeyProtector.unseal(KeyProtector.java:358)
at com.sun.crypto.provider.JceKeyStore.engineGetKey(JceKeyStore.java:133)
at java.security.KeyStore.getKey(KeyStore.java:804)
at com.comdata.base.helper.EncryptionUtility.initSymmetricKey(EncryptionUtility.java:134)

为什么会发生这种情况?是否需要为加密配置任何内容?

我在JDK 7中查看了keyProtector.java的代码,并且ClassNotFoundException触发了UnrecoverableKeyException com.ibm.crypto.provider.AESSecretKey

我们是否需要通过installUtility安装任何功能?

1 个答案:

答案 0 :(得分:0)

  

为什么会发生这种情况?是否需要为加密配置任何内容?

未找到的类(com.ibm.crypto.provider.AESSecretKey)来自IBM JDK。

看起来您的密钥库是使用IBM JDK创建的,因此其中包含一个使用IBM JDK中的AESSecretKey的密钥。

在运行时,您的Liberty服务器可能正在使用非IBM JDK,其中不包含此IBM JDK特定类。

  

我们是否需要通过installUtility安装任何功能?

不。缺少的类应该由JDK提供,而不是Liberty功能。