CKR_TEMPLATE_INCOMPLETE用于X509证书C_CreateObject

时间:2018-01-06 00:34:26

标签: pkcs#11

我在创建X509证书对象时获得TEMPLETE_INCOMPLETE。

FILL_ATTR(cert_templ [0],CKA_TOKEN,& _true,sizeof(_true));

FILL_ATTR(cert_templ [1],CKA_VALUE,contents,contents_len);

FILL_ATTR(cert_templ [2],CKA_CLASS,& clazz,sizeof(clazz));

FILL_ATTR(cert_templ [3],CKA_CERTIFICATE_TYPE,& cert_type,sizeof(cert_type));

FILL_ATTR(cert_templ [4],CKA_PRIVATE,& _false,sizeof(_false));

我在这里缺少什么?

1 个答案:

答案 0 :(得分:0)

这是证书对象创建的最小属性模板,适用于Pkcs11Admin应用程序:

var certificateAttributes = new List<ObjectAttribute>()
{
    new ObjectAttribute(CKA.CKA_CLASS, CKO.CKO_CERTIFICATE),
    new ObjectAttribute(CKA.CKA_TOKEN, true),
    new ObjectAttribute(CKA.CKA_PRIVATE, false),
    new ObjectAttribute(CKA.CKA_MODIFIABLE, true),
    new ObjectAttribute(CKA.CKA_LABEL, privKeyAttributes[0].GetValueAsString()),
    new ObjectAttribute(CKA.CKA_CERTIFICATE_TYPE, CKC.CKC_X_509),
    new ObjectAttribute(CKA.CKA_SUBJECT, x509Certificate.SubjectDN.GetDerEncoded()),
    new ObjectAttribute(CKA.CKA_ID, privKeyAttributes[1].GetValueAsByteArray()),
    new ObjectAttribute(CKA.CKA_ISSUER, x509Certificate.IssuerDN.GetDerEncoded()),
    new ObjectAttribute(CKA.CKA_SERIAL_NUMBER, new DerInteger(x509Certificate.SerialNumber).GetDerEncoded()),
    new ObjectAttribute(CKA.CKA_VALUE, x509Certificate.GetEncoded())
};

它是用C#编写的,但我相信你能够阅读并理解它。

请注意,您很可能需要解析证书才能获得CKA_SUBJECTCKA_ISSUERCKA_SERIAL_NUMBER属性的正确值。

另请注意,CKA_LABELCKA_ID属性通常设置为与相应私钥对象上设置的值相同的值。这种方式证书对象与私钥对象“配对”。