我有一段代码使用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);
}
当我再次重新运行后端代码时,它工作正常
1条答案
按热度按时间7fhtutme1#
请查看PKCS#11规范第5.5节:
此外,在调用C_GetSlotList以进行列表长度预测(空pSlotList参数)时,将检查可通过Cryptoki库访问的插槽集。如果应用程序调用具有非空pSlotList的C_GetSlotList,然后用户添加或删除硬件设备,则仅当再次调用具有空值的C_GetSlotList时,更改的插槽列表才可见和有效
必须重新查询插槽列表。