首页 > 解决方案 > PKCS11 类异常中的 C_FindObjectsInit(..)

问题描述

为了签署数据,我使用了 signserver 开源代码。我正在探索一个遗留代码,它在这个地方给出错误:

Module.getPKCS11Module().C_FindObjectsInit(session.getSessionHandle(), attributes,true);

Module类来自哪里iaikpkcs11Wrapper.jar (package: iaik.pkcs.pkcs11) 当我进一步导航时,PKCS11界面具有void C_FindObjectsInit(long var1, CK_ATTRIBUTE[] var3, boolean var4) 上面提到的这种方法。

此外,attributes参数的构造如下:

        CK_ATTRIBUTE[] attributes = new CK_ATTRIBUTEKeyStoreContainerBase[2];

        attributes[0] = new CK_ATTRIBUTE();
        attributes[0].type = PKCS11Constants.CKA_CLASS;
        attributes[0].pValue = new Long(PKCS11Constants.CKO_SECRET_KEY);
                
        
        attributes[1] = new CK_ATTRIBUTE();
        attributes[1].type = PKCS11Constants.CKA_ID;
        attributes[1].pValue = id; //id is byteArray. For this param's value the error is causing

我的问题是,我是否需要存储任何类型的密钥/证书从哪里C_FindObjectsInit(..)读取或匹配,因为它说它找不到任何密钥?此方法在哪里搜索密钥或如何解决此问题?顺便说一句,我已经阅读了C_FindObjectsInit-JavaDoc并且无法正确理解这一行,这就是我在这里的原因:

pTemplate - 要匹配的对象属性值和搜索模板中的属性数(PKCS#11 参数:CK_ATTRIBUTE_PTR pTemplate, CK_ULONG ulCount)


[这听起来可能很奇怪,但我真的很空白,卡了几天]

标签: javapkcs#11

解决方案


PKCS#11 规范不强制我们使用一些严格组合的数据。
但在大多数实现中,我看到它是二进制编码的 OID 字段。
还要按顺序检查 0(空)字节。


推荐阅读