我有一个用于数字签名的小程序。我的问题是初始化密钥库,但在关闭浏览器之前,它一直处于打开状态。每次我想签名时,我该如何询问密码?
这是初始化代码:
/* Se obtiene el proveedor del contenedor de claves */
pkcs11config = "name=Athenanlibrary=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);
有人能告诉我怎么修吗?非常感谢。
PKCS#11提供程序只会在需要PIN时请求PIN。并且只有在为正在使用的令牌密钥设置了CKA_ALWAYS_AUTHENTICATE
标志的情况下,才需要每次操作。为了允许输入用户PIN,必须根据PKCS#11提供程序文档实现回调处理程序。
PKCS#11在所有会话之间共享登录状态,因此您调用providerPKCS11.logout();
就足够了,并且您应该从所有PKCS#11会话中注销-签名操作应该失败。使用正确的PIN重新加载KeyStore
将使您在所有会话中再次登录-签名操作应成功。向用户显示GUI并要求他在每次签名操作之前输入PIN取决于您。