gpt4 book ai didi

go - 如何通过模板获取PKCS11公钥

转载 作者:IT王子 更新时间:2023-10-29 00:40:05 25 4
gpt4 key购买 nike

我有一个 GO 应用程序,它通过软件 token 中的 opencryptoki (pkcs11) 将其证书存储到 HSM。但这不是围棋题,我认为更像是一般的 pkcs11 题。

我这样设置我的证书和私钥:

    certTemplate := []*pkcs11.Attribute{
pkcs11.NewAttribute(pkcs11.CKA_CLASS, pkcs11.CKO_CERTIFICATE),
pkcs11.NewAttribute(pkcs11.CKA_CERTIFICATE_TYPE, pkcs11.CKC_X_509),
pkcs11.NewAttribute(pkcs11.CKA_TOKEN, true),
pkcs11.NewAttribute(pkcs11.CKA_VALUE, certBytes),
pkcs11.NewAttribute(pkcs11.CKA_SUBJECT, template.SubjectKeyId),
pkcs11.NewAttribute(pkcs11.CKA_ID, pkcs11KeyID),
}

privateKeyTemplate := []*pkcs11.Attribute{
pkcs11.NewAttribute(pkcs11.CKA_CLASS, pkcs11.CKO_PRIVATE_KEY),
pkcs11.NewAttribute(pkcs11.CKA_KEY_TYPE, pkcs11.CKK_ECDSA),
pkcs11.NewAttribute(pkcs11.CKA_TOKEN, true),
pkcs11.NewAttribute(pkcs11.CKA_ID, pkcs11KeyID),
pkcs11.NewAttribute(pkcs11.CKA_EC_PARAMS, []byte{0x06, 0x08, 0x2a, 0x86, 0x48, 0xce, 0x3d, 0x03, 0x01, 0x07}),
pkcs11.NewAttribute(pkcs11.CKA_VALUE, ecdsaPrivKeyD),
}

ctx.CreateObject(session, certTemplate)
ctx.CreateObject(session, privateKeyTemplate)

这非常有效。我也可以通过

findTemplate := []*pkcs11.Attribute{
pkcs11.NewAttribute(pkcs11.CKA_TOKEN, true),
pkcs11.NewAttribute(pkcs11.CKA_CLASS, pkcs11.CKO_CERTIFICATE),
pkcs11.NewAttribute(pkcs11.CKA_CERTIFICATE_TYPE, pkcs11.CKC_X_509),
}

ctx.FindObjectsInit(session, findTemplate);
objs, b, err := ctx.FindObjects(session, numSlots)

但如我所料,我无法获得我的公钥

findTemplate := []*pkcs11.Attribute{
pkcs11.NewAttribute(pkcs11.CKA_TOKEN, true),
pkcs11.NewAttribute(pkcs11.CKA_ID, pkcs11KeyID),
pkcs11.NewAttribute(pkcs11.CKA_CLASS, pkcs11.CKO_PUBLIC_KEY),
}
ctx.FindObjectsInit(session, findTemplate);
obj, _, err := ctx.FindObjects(session, 1)

没有错误,只是 hsm 存储中没有 key 。

最佳答案

虽然公钥是证书的一部分,但 CKO_PUBLIC_KEY 对象可能无法单独使用,而且证书也没有 CKA_PUBLIC 属性。

要获取公钥,您必须检索证书的 CKA_VALUE 并使用您最喜欢的 X.509v3 证书解析器解析它。结果无疑将返回编码的公钥值或公钥作为您最喜欢的运行时中的结构。

关于go - 如何通过模板获取PKCS11公钥,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47890275/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com