Java 如何正确重新加载PKCS11密钥库
我想在PKCS11密钥库中测试我的密钥。但是,当外部进程在存储区中添加或删除密钥时,我的密钥库似乎没有更新 第二次打印别名时,不包括插入其间的新别名 如何正确地重新加载密钥库Java 如何正确重新加载PKCS11密钥库,java,keystore,pkcs#11,Java,Keystore,Pkcs#11,我想在PKCS11密钥库中测试我的密钥。但是,当外部进程在存储区中添加或删除密钥时,我的密钥库似乎没有更新 第二次打印别名时,不包括插入其间的新别名 如何正确地重新加载密钥库 public class KeyStoreTest { public static void main(String[] args) throws KeyStoreException, NoSuchAlgorithmException, CertificateException, IOExcep
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密钥库时,安全提供程序负责密钥的存储和加载。因此,在加载密钥库时,我不必指定InputStream。尝试显式加载它
keystorekeystore=KeyStore.getInstance(“PKCS11”,提供者);
加载(信任库、信任库密码);
trustStore.close()代码>对于PKCS11信任库,KeyStore.getInstance的InputStream参数必须(可能应该)为null。它没有被使用,因此没有要关闭的文件。很抱歉,如果密钥存储库是用ks.load(null,“0000.tocharray())新初始化的,那么另一个进程如何修改密钥存储库代码>并且从未存储到磁盘?在我看来,密钥库只存在于堆中。我使用一个HSM模拟器,它将密钥存储在磁盘的某个地方。HSM模拟器提供命令行工具来操作密钥库。我还可以使用上述实现存储新密钥ks.setEntry
,这些密钥可以通过命令行工具立即使用。只有当我加载java中的密钥库并使用命令行工具上载新密钥时,java中的密钥库才不会获取新密钥。
char[] pin = ...;
KeyStore ks = KeyStore.getInstance("PKCS11");
ks.load(null, pin);