我正在尝试在运行 IBM JDK 8(power linux)的应用程序中加载使用 SunJCE 提供程序的 JCKES 密钥库。
为了使我的应用程序能够加载密钥库,我已完成以下步骤:
请告诉我加载密钥库还需要哪些更改。
这是试图加载密钥库的代码:
File file = new File(keystorelocation);
KeyStore ks = KeyStore.getInstance("JCEKS");
FileInputStream is = new FileInputStream(file);
ks.load(is, password);
然而,我的应用程序启动失败并出现错误:
Exception in thread "main" java.lang.IllegalAccessError: Class com/sun/crypto/provider/SunJCE illegally accessing "package private" member of class sun/security/provider/SunEntries
at com.sun.crypto.provider.SunJCE.putEntries(SunJCE.java:128)
at com.sun.crypto.provider.SunJCE.<init>(SunJCE.java:111)
at java.lang.J9VMInternals.newInstanceImpl(Native Method)
at java.lang.Class.newInstance(Class.java:2038)
at sun.security.jca.ProviderConfig$2.run(ProviderConfig.java:233)
at sun.security.jca.ProviderConfig$2.run(ProviderConfig.java:218)
at java.security.AccessController.doPrivileged(AccessController.java:682)
如果我从 java.security 文件中删除 SunJCE 提供程序条目,应用程序会成功启动,但在尝试加载密钥库时出现以下错误:
Invalid secret key format
at com.ibm.crypto.provider.JceKeyStore.engineLoad(Unknown Source)
at java.security.KeyStore.load(KeyStore.java:1456)
如果我不在 IBM JDK 中添加任何 Sun jar,我在尝试加载密钥库时会遇到以下错误:
java.io.IOException: com.sun.crypto.provider.SealedObjectForKeyProtector
at com.ibm.crypto.provider.JceKeyStore.engineLoad(Unknown Source)
at java.security.KeyStore.load(KeyStore.java:1456)
谢谢!
嗨,你能解决这个错误吗?