尝试使用 sun PKCS11 提供程序生成 rsa 密钥对时,方法generateKeyPair()
抛出ProviderException: sun.security.pkcs11.wrapper.PKCS11Exception: CKR_USER_NOT_LOGGED_IN
我的代码如下所示:
Provider prov = ... // initialize provider
KeyStore ks = KeyStore.getInstance("PKCS11", prov);
ks.load(null, "pass".toCharArray());
KeyPairGenerator keyGen = KeyPairGenerator.getInstance("RSA", prov);
keyGen.initialize(2048);
KeyPair kp = keyGen.generateKeyPair(); // exception thrown here
我尝试AuthProvider
在提供程序初始化后立即使用,如下所示:
AuthProvider aprov = (AuthProvider) prov;
aprov.login(null, callbacks -> {
log.error("@@@ Inside callbacks {}", callbacks.length);
});
aprov.setCallbackHandler(callbacks -> {
log.error("@@@ Inside setCallBackHandler {}", callbacks.length);
});
但我没有看到任何日志输出,所以这意味着 lambdas 没有被执行。
最终目标是生成 RSA 密钥对并通过 PKCS11 将其存储在密钥库 (HSM) 中。
我尝试了 openjdk 8 和 oracle jdk 8。此外,当列出密钥库中的别名时,我得到一个空列表,但我知道有一个条目。添加-Djava.security.debug=sunpkcs11
没有任何改变。