我想在PKCS11密钥库中测试我的密钥。但是当外部进程在商店中添加或删除密钥时,似乎我的密钥库不会更新。
我第二次打印别名时不包含插入其间的新别名。
如何正确重新加载密钥库?
public class KeyStoreTest {
public static void main(String[] args) throws KeyStoreException,
NoSuchAlgorithmException, CertificateException, IOException, LoginException{
// initialize keystore
InputStream is = CheckUploadScript.class.getResourceAsStream("pkcs11-hsm.config");
AuthProvider provider = new sun.security.pkcs11.SunPKCS11(is);
KeyStore ks = KeyStore.getInstance("PKCS11", provider);
ks.load(null, "0000".toCharArray());
// print all aliases
Enumeration<String> aliases = ks.aliases();
for (String key : Collections.list(aliases))
System.out.println("alias: " + key);
// upload or delete keys with external tool here
// print all aliases again (does not change)
ks.load(null, "0000".toCharArray());
aliases = ks.aliases();
for (String key : Collections.list(aliases))
System.out.println("alias: " + key);
}
}
修改
我按照PKCS11参考中的说明操作: http://docs.oracle.com/javase/7/docs/technotes/guides/security/p11guide.html
char[] pin = ...;
KeyStore ks = KeyStore.getInstance("PKCS11");
ks.load(null, pin);
根据我的理解,当使用PKCS11密钥库时,安全提供程序会处理密钥的存储和加载。因此,在加载密钥库时,我不必指定InputStream。
答案 0 :(得分:0)
尝试明确加载
KeyStore keyStore = KeyStore.getInstance("PKCS11", provider);
keyStore.load(trustStore, trustStorePassword);
trustStore.close();
答案 1 :(得分:0)
对于PKCS11信任库,KeyStore.getInstance的InputStream参数必须(可能应该)为null。它没有被使用,所以没有文件可以关闭。