You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Entrust HSM密钥库生成失败问题求助

问题描述

我正在配置Entrust HSM Connect与JCE/JCA Provider,已完成官方指南中“Application Interfaces”前的所有步骤。执行..InstallationTest显示nCipher已正确安装且处于第一位,但执行以下keytool命令生成密钥库时出现错误:

java --module-path /opt/nfast/java/classes sun.security.tools.keytool.Main -genkey -storetype nCipher.sworld -keyalg RSA -sigalg SHA1withRSA -storepass <KeyStore_passphrase> -keystore <KeyStore_path>

错误信息:

Exception in thread "main" java.lang.IllegalAccessError: class com.ncipher.nfast.NFKeyModuleObjectTracker (in module com.ncipher.provider.km.nCipherKM) cannot access class java.beans.PropertyChangeSupport (in module java.desktop) because module com.ncipher.provider.km.nCipherKM does not read module java.desktop
        at com.ncipher.provider.km.nCipherKM/com.ncipher.nfast.NFKeyModuleObjectTracker.<init>(NFKeyModuleObjectTracker.java:48)
        at com.ncipher.provider.km.nCipherKM/com.ncipher.nfast.NFKeyModuleObjectTracker.<clinit>(NFKeyModuleObjectTracker.java:23)
        at com.ncipher.provider.km.nCipherKM/com.ncipher.nfast.NFKeyModuleObject.notifyLoaded(NFKeyModuleObject.java:31)
        at com.ncipher.provider.km.nCipherKM/com.ncipher.nfast.NFKeyModuleObject.<init>(NFKeyModuleObject.java:26)
        at com.ncipher.provider.km.nCipherKM/com.ncipher.km.nfkm.Key.setKeyIDs(Key.java:1557)
        at com.ncipher.provider.km.nCipherKM/com.ncipher.km.nfkm.KeyGenerator._generateKey(KeyGenerator.java:1428)
        at com.ncipher.provider.km.nCipherKM/com.ncipher.km.nfkm.KeyGenerator.generateUnrecordedKey(KeyGenerator.java:964)
        at com.ncipher.provider.km.nCipherKM/com.ncipher.provider.km.nCipherKM.generateKey(nCipherKM.java:728)
        at com.ncipher.provider.km.nCipherKM/com.ncipher.provider.km.KMHmacSHA1KeyGenerator.engineGenerateKey(KMHmacSHA1KeyGenerator.java:58)
        at com.ncipher.provider.km.nCipherKM/com.ncipher.provider.km.KMKeyStore.engineLoad(KMKeyStore.java:692)
        at java.base/java.security.KeyStore.load(KeyStore.java:1479)
        at java.base/sun.security.tools.keytool.Main.doCommands(Main.java:987)
        at java.base/sun.security.tools.keytool.Main.run(Main.java:412)
        at java.base/sun.security.tools.keytool.Main.main(Main.java:405)

我使用的是Amazon Corretto Java版本,怀疑是否因此导致问题,但Corretto通常与Oracle版本兼容。请问该如何解决此错误?

解决方案

这个错误和Corretto无关,是JDK9+模块系统的权限限制导致的——nCipher的模块没有声明读取java.desktop模块的权限,但它的代码需要访问该模块中的java.beans.PropertyChangeSupport类。解决方法如下:

  • 临时修复(修改命令):
    在原keytool命令中添加模块权限参数,允许nCipher模块读取java.desktop模块:

    java --module-path /opt/nfast/java/classes \
    --add-reads com.ncipher.provider.km.nCipherKM=java.desktop \
    sun.security.tools.keytool.Main -genkey -storetype nCipher.sworld -keyalg RSA -sigalg SHA1withRSA -storepass <KeyStore_passphrase> -keystore <KeyStore_path>
    

    如果上述命令仍报错,再添加开放具体包的参数:

    java --module-path /opt/nfast/java/classes \
    --add-reads com.ncipher.provider.km.nCipherKM=java.desktop \
    --add-exports java.desktop/java.beans=com.ncipher.provider.km.nCipherKM \
    sun.security.tools.keytool.Main -genkey -storetype nCipher.sworld -keyalg RSA -sigalg SHA1withRSA -storepass <KeyStore_passphrase> -keystore <KeyStore_path>
    
  • 长期解决方案:
    检查Entrust HSM Connect的版本是否适配JDK9+模块系统,若当前版本较旧,升级到最新兼容版本。新版本的nCipher模块通常会在模块描述文件中正确声明所需的模块依赖,无需手动添加参数。

内容的提问来源于stack exchange,提问作者Sinnedkid

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.15 05:36:23