我在创建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));
我在这里缺少什么?
答案 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_SUBJECT
,CKA_ISSUER
和CKA_SERIAL_NUMBER
属性的正确值。
另请注意,CKA_LABEL
和CKA_ID
属性通常设置为与相应私钥对象上设置的值相同的值。这种方式证书对象与私钥对象“配对”。