我正在使用以下代码从Athena智能卡读取器访问PKCS#11智能卡的内容。
Provider pkcs11Provider = new SunPKCS11(new ByteArrayInputStream (config.getBytes()));
if (Security.getProvider(pkcs11Provider.getName()) != null) {
Security.removeProvider(pkcs11Provider.getName());
}
Security.addProvider(pkcs11Provider);
KeyStore myKeyStore = KeyStore.getInstance ("PKCS11", pkcs11Provider);
myKeyStore.load(null, keystore_password.toCharArray());
return myKeyStore;
问题如下:
根据http://docs.oracle.com/javase/6/docs/technotes/guides/security/p11guide.html的说明,当使用
KeyStore.Builder
类时,使用同一智能卡首次成功加载后,无需输入密码。当然,我不在上面的代码中使用此类。同样的事情适用于KeyStore.getInstance(...)
方法吗?无论先前尝试加载什么,是否都可以通过任何方法使密钥库在输入错误密码时引发异常? 最佳答案
试试这个
((SunPKCS11) pkcs11Provider ).logout();
pkcs11Provider.clear();
如果这样做没有帮助,请在每次登录前用新创建的SunPKCS11对象替换该提供程序