如何在 cryptoki 中重命名容器名称

How to rename container name in cryptoki

我写了一些代码,将 public 的密钥对和私钥写入令牌。我从密钥对创建 pkcs10,然后从中生成证书文件。证书文件将被插入到令牌中。这一切 运行 都成功了,但是 CAPI 或 Internet Explorer 无法读取证书。如果我插入一个 p12 文件,它 运行 毫不费力。我怀疑 CKA_LABEL 和 CKA_ID 是这里的罪魁祸首。在 p12 中,所有内容都使用相同的名称约定。来自容器、public 密钥、私钥和证书。但是在我的方法中,容器名称看起来像是自动生成的。如何将其转换为与 CKA_ID 相同?下面是我生成保存在容器中的密钥对的代码。

rv = g_pFunctionList->C_GenerateKeyPair(hSession,
        &ck_gen_ecc,
        tPubKey, sizeof(tPubKey) / sizeof(CK_ATTRIBUTE),
        tPrvKey, sizeof(tPrvKey) / sizeof(CK_ATTRIBUTE),
        &pkcs11_hPubKey, &pkcs11_hPrvKey); 

它保存在容器名称如

cont_4440xxxxxxxx

如何像CKA_ID一样更改容器名称?有人可以帮忙吗?

如果您的 cryptoki 库允许,您可以通过调用 C_SetAttributeValue 函数设置它们的新属性来重命名所有对象。

在您的情况下,它可能如下所示:

        CK_ATTRIBUTE atAttr[2];

        atAttr[0].type = CKA_LABEL;
        atAttr[0].pValue = pLabelValue;    // <-- pass here new Label value pointer
        atAttr[0].ulValueLen = ulLabelLen; // <-- pass here new Label length

        atAttr[1].type = CKA_ID;
        atAttr[1].pValue = pIDValue;    // <-- pass here new ID value pointer
        atAttr[1].ulValueLen = ulIDLen; // <-- pass here new ID length

        rv = g_pFunctionList->C_SetAttributeValue(hSession, pkcs11_hPubKey, atAttr, 2);
        rv = g_pFunctionList->C_SetAttributeValue(hSession, pkcs11_hPrvKey, atAttr, 2);