我正在尝试解密存储在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()
答案 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);