在 IBM JDK 上使用 SunJCE 提供程序加载 JCKES 密钥库

问题描述 投票:0回答:1

我正在尝试在运行 IBM JDK 8(power linux)的应用程序中加载使用 SunJCE 提供程序的 JCKES 密钥库。

为了使我的应用程序能够加载密钥库,我已完成以下步骤:

  • 从 oracle jdk 的 rt.jar 中提取 sun 包,使用提取的包创建 sun.jar 并在 IBM JDK lib ext 文件夹中添加 sun.jar。
  • 将 sunjce_provider jar 从 oracle JDK 复制到 IBM JDK lib ext 文件夹。
  • Sun jars 取自安装在 windows 上的 oracle JDK。
  • 在 IBM JDK 的 java.security 文件中添加 com.sun.crypto.provider.SunJCE provider。

请告诉我加载密钥库还需要哪些更改。

这是试图加载密钥库的代码:

    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)

谢谢!

java keystore jce ibm-jdk
1个回答
-4
投票

嗨,你能解决这个错误吗?

© www.soinside.com 2019 - 2024. All rights reserved.