CKR_TEMPLATE_INCOMPLETE X509 证书 C_CreateObject
CKR_TEMPLATE_INCOMPLETE for X509 certificate C_CreateObject
我在创建 X509 证书对象时得到 TEMPLETE_INCOMPLETE。
FILL_ATTR(cert_templ[0], CKA_TOKEN, &_true, sizeof(_true));
FILL_ATTR(cert_templ[1], CKA_VALUE, 内容, 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));
我在这里错过了什么?
这是在 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_SUBJECT
、CKA_ISSUER
和 CKA_SERIAL_NUMBER
属性的正确值。
另请注意,CKA_LABEL
和 CKA_ID
属性通常设置为与相应私钥对象上设置的值相同的值。这样证书对象就得到 "paired" 和私钥对象。
我在创建 X509 证书对象时得到 TEMPLETE_INCOMPLETE。
FILL_ATTR(cert_templ[0], CKA_TOKEN, &_true, sizeof(_true));
FILL_ATTR(cert_templ[1], CKA_VALUE, 内容, 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));
我在这里错过了什么?
这是在 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_SUBJECT
、CKA_ISSUER
和 CKA_SERIAL_NUMBER
属性的正确值。
另请注意,CKA_LABEL
和 CKA_ID
属性通常设置为与相应私钥对象上设置的值相同的值。这样证书对象就得到 "paired" 和私钥对象。