【问题标题】:CKR_USER_NOT_LOGGED_IN when generating key pair using sunPKCS11 provider使用 sunPKCS11 提供程序生成密钥对时的 CKR_USER_NOT_LOGGED_IN
【发布时间】:2019-05-05 18:41:41
【问题描述】:

当尝试使用 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 没有任何改变。

【问题讨论】:

    标签: pkcs#11 hsm sunpkcs11


    【解决方案1】:

    我的问题是提供程序配置中的插槽号错误。选定的插槽被标记为“加速器”,不支持创建“私有对象” - 来自 HSM 文档。

    切换到不同的插槽后,密钥生成和存储到密钥库中工作。

    【讨论】:

      猜你喜欢
      • 2012-08-19
      • 2018-05-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-07-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多