gpt4 book ai didi

java - pkcs11 工具在 java 中生成的 key 未加载到 pkcs11 keystore 中

转载 作者:行者123 更新时间:2023-11-30 10:19:03 24 4
gpt4 key购买 nike

当 key 由 pkcs11-tool 生成时,我在尝试从 java pkcs11 keystore 获取私钥时看到空指针异常。如果 key 是使用 keytool 生成的,则此方法可以正常工作。我也可以列出来自 pkcs11-tool 的 key ,但不能来自 keytool。除了 keytool 之外,导入或生成 key 的正确方法是什么,以便它们对 java pkcs11 keystore 可见?

生成 key :

pkcs11-tool --module /usr/lib/x86_64-linux-gnu/softhsm/libsofthsm2.so -l --pin <pin> --keypairgen --key-type rsa:2048 --label jtest

从 java 加载和访问 key (代码片段):

    String configName = "/tmp/pkcs11.cfg";
Provider p = new SunPKCS11(configName);
Security.addProvider(p);

char[] pin = "<pin>".toCharArray();
KeyStore keyStore = KeyStore.getInstance("PKCS11", p);
keyStore.load(null, pin);
PrivateKeyEntry privateKeyEntry =
(PrivateKeyEntry)keyStore.getEntry("jtest", null);
PrivateKey privateKey = privateKeyEntry.getPrivateKey();

在尝试获取上面的私钥时看到异常。

最佳答案

Keytool 在生成 key 条目时会自动生成一个自签名证书,而 PKCS#11 允许在没有相应证书的情况下创建 key 对。

Java keystore API 会简单地忽略没有证书的 key 对条目。这就是为什么 keytool -list ... 不显示使用 pkcs11-tool 创建的条目。如果你看一下 Oracle PKCS#11 guide尤其是限制,它说:

Once a private key and certificate have been matched (and its certificate chain built), the information is stored in a private key entry with the CKA_LABEL value from end entity certificate as the KeyStore alias.

...

Any private key or certificate object not part of a private key entry or trusted certificate entry is ignored.

因此,当您调用 keyStore.getEntry("jtest", null); 时,它找不到匹配的 key 条目,这会导致下一行中的 NPE。

关于java - pkcs11 工具在 java 中生成的 key 未加载到 pkcs11 keystore 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48896395/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com