使用nCipherKM解密HSM密钥时出错

时间:2015-06-03 10:48:09

标签: java encryption hsm

我正在尝试解密存储在Securestorage文件中的数据库密码。我使用的是nCipherKM HSM安全提供程序,用于解密的密钥加密密钥存储在密钥库(文件夹)中。当我尝试通过传递密钥库密码来加载HSM密钥库时,它无法使用以下异常加载密钥库。不确定此错误的根本原因是什么。

代码段:

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()

1 个答案:

答案 0 :(得分:1)

注意:将此答案发布到一个旧问题上,以期帮助遇到同样问题的其他人。

根本原因可能是密钥库是使用选项来创建的,以保护模块的密钥。这并不意味着密码是可选的,这意味着它是被禁止的。

要修复,请使用以下代码

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);