我想在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。
发布于 2016-02-26 23:04:37
对于PKCS11信任库,KeyStore.getInstance的InputStream参数必须(也许应该)为null。它不被使用,所以没有文件要关闭。
发布于 2015-02-26 10:12:55
尝试显式加载它
KeyStore keyStore = KeyStore.getInstance("PKCS11", provider); keyStore.load(trustStore, trustStorePassword); trustStore.close();
https://stackoverflow.com/questions/28607384
复制相似问题