尝试使用密钥库中的别名读取密钥时发生 UnrecoverableKeyException
UnrecoverableKeyException on trying to read key using alias from keystore
我在 IBM Websphere 下面代码的第 4 行收到以下错误
自由配置文件 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)
知道为什么会这样吗?是否需要为密码配置任何内容?
我翻了一下JDK7中keyProtector.java的代码发现UnrecoverableKeyException是由ClassNotFoundException触发的
com.ibm.crypto.provider.AESSecretKey
我们需要通过 installUtility 安装任何功能吗?
Any ideas why this is happening? Is anything need to be configured for cryptography?
未找到 class (com.ibm.crypto.provider.AESSecretKey
) 来自 IBM JDK。
看起来您的密钥库是使用 IBM JDK 创建的,因此其中打包了一个使用 IBM JDK 的 AESSecretKey
的密钥。
在运行时,您的 Liberty 服务器可能正在使用 non-IBM JDK,其中不会包含此 IBM JDK 特定的 class。
Do we need to install any feature via installUtility?
没有。缺少的 class 应该由 JDK 提供,而不是 Liberty 功能。
我在 IBM Websphere 下面代码的第 4 行收到以下错误 自由配置文件 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)
知道为什么会这样吗?是否需要为密码配置任何内容?
我翻了一下JDK7中keyProtector.java的代码发现UnrecoverableKeyException是由ClassNotFoundException触发的 com.ibm.crypto.provider.AESSecretKey
我们需要通过 installUtility 安装任何功能吗?
Any ideas why this is happening? Is anything need to be configured for cryptography?
未找到 class (com.ibm.crypto.provider.AESSecretKey
) 来自 IBM JDK。
看起来您的密钥库是使用 IBM JDK 创建的,因此其中打包了一个使用 IBM JDK 的 AESSecretKey
的密钥。
在运行时,您的 Liberty 服务器可能正在使用 non-IBM JDK,其中不会包含此 IBM JDK 特定的 class。
Do we need to install any feature via installUtility?
没有。缺少的 class 应该由 JDK 提供,而不是 Liberty 功能。