1

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

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

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

请让我知道加载密钥库还需要进行哪些更改。

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

    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)

谢谢!

4

0 回答 0