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
相关产品推荐
相关产品推荐

