Spring Boot PKCS11无法识别运行时在softhsm中创建的新插槽

hivapdat  于 2022-11-23  发布在  Spring
关注(0)|答案(1)|浏览(108)

我有一段代码使用java将密钥和证书导入hsm。问题是当我运行java后端来执行该api时,使用之前创建的插槽是可以的。但是这里的问题是,当我在那时创建新的插槽并尝试执行该插槽的api时,我收到了显示插槽id未找到的消息。
如何在不重新运行代码的情况下获得结果?

public void importCertAndPk(String pin, String slotId, String alias, InputStream p12File) {
    Provider p = getProvider(slotId);
    // Load the key store
    KeyStore ks = getKeyStore(p, pin);
    BouncyCastleProvider provider = new BouncyCastleProvider();
    // Get pk and cert from p12 file
    KeyStore pkcs12KeyStore = KeyStore.getInstance("pkcs12", provider.getName());
    pkcs12KeyStore.load(p12File, System.getenv("P12_PASS").toCharArray());
    String pkcs12Alias = pkcs12KeyStore.aliases().nextElement();
    PrivateKey pk = (PrivateKey) pkcs12KeyStore.getKey(pkcs12Alias, null);
    Certificate[] chain = pkcs12KeyStore.getCertificateChain(pkcs12Alias);
    ks.setKeyEntry(alias, pk, pin.toCharArray(), chain);
}

当我再次重新运行后端代码时,它工作正常

7fhtutme

7fhtutme1#

请查看PKCS#11规范第5.5节:
此外,在调用C_GetSlotList以进行列表长度预测(空pSlotList参数)时,将检查可通过Cryptoki库访问的插槽集。如果应用程序调用具有非空pSlotList的C_GetSlotList,然后用户添加或删除硬件设备,则仅当再次调用具有空值的C_GetSlotList时,更改的插槽列表才可见和有效
必须重新查询插槽列表。

相关问题