成功尝试输入密码后,PKCS#11密钥库不验证密码

时间:2013-06-12 23:28:00

标签: java keystore pkcs#11

我正在使用以下代码从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;

问题如下:

  1. 我输入了错误的密码。
  2. 代码抛出异常(如预期的那样)。
  3. 我输入正确的密码。
  4. 代码不会抛出异常(如预期的那样)。
  5. 我输入了错误的密码。
  6. 代码抛出异常(意外)。
  7. 根据http://docs.oracle.com/javase/6/docs/technotes/guides/security/p11guide.html,当使用KeyStore.Builder类时,在使用同一智能卡首次成功加载后,不会要求输入密码。当然,我在上面的代码中没有使用这个类。同样适用于KeyStore.getInstance(...)方法吗?有什么方法可以在输入错误密码时使密钥库抛出异常,而不管先前的加载尝试是什么?

1 个答案:

答案 0 :(得分:4)

试试这个

((SunPKCS11) pkcs11Provider ).logout();
pkcs11Provider.clear();

如果这没有用,那么在每次登录之前用新创建的SunPKCS11对象替换提供程序