Provider p = new SunPKCS11(configName);
char[]pin = "****".toCharArray();
KeyStore ks = KeyStore.getInstance("PKCS11", p);
ks.load(null, this.pin);
if (-1 == Security.addProvider(this.p)) {
throw new RuntimeException("Could not add security provider");
}
如何重新加载密钥?每次运行代码时,我都得到一个KeyStore对象的相同实例,所以键相同。
答案 0 :(得分:0)
在这里,我看到您没有加载任何密钥库,例如,没有JSK文件。请参见下面的示例代码
File f = new File(kStoreName);
if(f.exists() && !f.isDirectory()){
try(FileInputStream fis = new FileInputStream(f.getAbsolutePath())){
ks.load(fis, storePassword.toCharArray());
}
}
答案 1 :(得分:0)
基本上,Sun Provider实现会缓存Provider
实例。因此,您正在应用程序中获取实例。解决此问题的一种方法是手动完成PKCS11提供程序。您可以在其他答案here中找到它。
将属性添加到您的提供程序实例p
:
p.setProperty("pkcs11LibraryPath", library);
然后在获取密钥之前手动确定PKCS
提供程序:
PKCS11 pkcs11 = PKCS11.getInstance(((sun.security.pkcs11.SunPKCS11) provider).getProperty("pkcs11LibraryPath"), null, null, true);
pkcs11.C_Finalize(PKCS11Constants.NULL_PTR);