始终要求KeyStore PKCS11引脚

时间:2014-04-15 18:43:05

标签: java passwords keystore smartcard pkcs#11

我有一个数字签名小程序。我的问题是初始化密钥库,但在关闭浏览器之前它一直处于打开状态。每次我想签名时如何询问引脚?

这是初始化代码:

/* Se obtiene el proveedor del contenedor de claves */
pkcs11config = "name=Athena\nlibrary=C:\\Windows\\system32\\asepkcs.dll";
byte[] pkcs11configBytes1 = pkcs11config.getBytes();
ByteArrayInputStream configStream1 = new ByteArrayInputStream(pkcs11configBytes1);
BouncyCastleProvider providerBC = new BouncyCastleProvider();

Security.addProvider(providerBC);
//Cargo el proveedor de la CIPE
providerPKCS11 = new SunPKCS11(configStream1);
Security.addProvider(providerPKCS11);
ks = KeyStore.getInstance("PKCS11", providerPKCS11);
ks.load(null, null); 

谁能告诉我如何修复它?谢谢。

2 个答案:

答案 0 :(得分:2)

PKCS#11提供商仅在需要时才会要求提供PIN码。如果为正在使用的令牌密钥设置了CKA_ALWAYS_AUTHENTICATE标志,则只需要按操作。要允许输入用户PIN,必须根据PKCS#11 provider documentation实现回调处理程序。

答案 1 :(得分:1)

PKCS#11在所有会话之间共享登录状态,因此它应该足以让您调用providerPKCS11.logout();并且您应该从所有PKCS#11会话中注销 - 签名操作应该失败。使用正确的PIN重新加载KeyStore会在所有会话中再次登录 - 签名操作应该会成功。在每次签名操作之前向用户显示GUI并要求他输入PIN。