首页 > 解决方案 > PKCS#11 为什么我调用 C_GetSlotList 返回没有为 MacOS 应用程序提供令牌的插槽,并为命令行工具返回一个插槽?

问题描述

我面临一些关于 PKCS#11 库的麻烦。我创建了 2 个项目:


unsigned long GetTokenInfos(CK_TOKEN_INFO_PTR pTokenInfo)
{
    CK_RV rv = CKR_OK;
    CK_ULONG ulCount = 0;
    CK_SLOT_ID_PTR pSlotList = NULL_PTR;

    rv = m_pToken->C_GetSlotList(TRUE, NULL_PTR, &ulCount);
    if(rv != CKR_OK){
        return rv;
    }
    if(ulCount <= 0){
        return CKR_TOKEN_NOT_PRESENT;
    }
    pSlotList = (CK_SLOT_ID_PTR)new CK_SLOT_ID [ulCount];
    rv = m_pToken->C_GetSlotList(TRUE, pSlotList, &ulCount);
    if((rv != CKR_OK) || (ulCount <= 0))
    {
        delete [] pSlotList;
        pSlotList = NULL_PTR;
        return CKR_TOKEN_NOT_PRESENT;
    }
    /*Get slot information for the first token*/
    for (unsigned int i = 0; i < ulCount; ++i)
    {
        rv = m_pToken->C_GetTokenInfo(pSlotList[i], pTokenInfo);
        if(rv != CKR_OK)
        {
            delete [] pSlotList;
            pSlotList = NULL_PTR;
            return rv;
        }
        //ShowTokenInfo(pTokenInfo);
    }
    delete [] pSlotList;
    pSlotList = NULL_PTR;
    return CKR_OK;
}

它们都遵循相同的逻辑和编码流程;在计算机上构建和运行。但我遇到了一件奇怪的事情:**Project macOS 应用程序总是返回带有 HSM 令牌的零槽,另一方面,项目命令行工具总是返回一个带有令牌的槽。**

我不知道这个问题。我猜 macOS 应用程序项目需要一些权限或类似的东西,以便与 HSM 令牌/智能卡等硬件进行交互......

有人对这种情况有经验吗?请给我一些建议!谢谢你们!

标签: macossmartcardpkcs#11hsm

解决方案


推荐阅读