Java 使用nCipherKM解密HSM密钥时出错
我正在尝试解密存储在Securestorage文件中的数据库密码。我正在使用nCipherKM HSM安全提供程序,用于解密的密钥加密密钥存储在密钥存储(文件夹)中。当我试图通过传递密钥库密码来加载HSM密钥存储时,它无法加载密钥存储,出现以下异常。不确定此错误的根本原因是什么 代码段:Java 使用nCipherKM解密HSM密钥时出错,java,encryption,hsm,Java,Encryption,Hsm,我正在尝试解密存储在Securestorage文件中的数据库密码。我正在使用nCipherKM HSM安全提供程序,用于解密的密钥加密密钥存储在密钥存储(文件夹)中。当我试图通过传递密钥库密码来加载HSM密钥存储时,它无法加载密钥存储,出现以下异常。不确定此错误的根本原因是什么 代码段: java.security.provider hsm_provider = (java.security.provider)Class.forName("com.ncipher.provider.km.nCip
java.security.provider hsm_provider = (java.security.provider)Class.forName("com.ncipher.provider.km.nCipherKM").newInstance();
java.security.Security.addProvider(hsm_provider);
myKeyStore = KeyStore.getInstance(KeyStore.getDefaulttype,"nCipherKM");
myKeyStore .load(new FileInputStream(KeyStorePath),pwdOfKeyStore);
例外情况:
java.io.IOException:提供了密码,但所有密钥都是
模块受保护。在
com.ncipher.provider.km.KMKeyStore.engineLoad()
注意:将此答案发布到一个老问题,希望能帮助遇到同样问题的其他人 根本原因可能是创建密钥库时使用了保护模块密钥的选项。这并不意味着密码短语是可选的,而是意味着它是被禁止的 要修复此问题,请使用下面的代码
java.security.provider hsm_provider = (java.security.provider)Class.forName("com.ncipher.provider.km.nCipherKM").newInstance();
java.security.Security.addProvider(hsm_provider);
myKeyStore = KeyStore.getInstance(KeyStore.getDefaulttype,"nCipherKM");
myKeyStore .load(new FileInputStream(KeyStorePath),null);
注意:如果试图从密钥库提取私钥,也应传入null,如下所示:
PrivateKey privateKey = (PrivateKey)keystore.getKey(KEYSTORE_ALIAS, null);