猿问

如何使用 OID 读取密钥信息和密钥签名等扩展值

var cert *x509.Certificate

cert, err := x509.ParseCertificate(myCertificate)

从这里我需要以字节为单位检索扩展值。我有用于此的 OID。我能够找到用于向证书添加扩展的代码。但不检索它。任何人都可以分享如何做到这一点的示例代码吗?


更新:


现在,我可以得到扩展


var extensions []pkix.Extension

var cert *x509.Certificate

byteValue, _ := base64.StdEncoding.DecodeString(myCert)

cert, err := x509.ParseCertificate(byteValue)

if err != nil {

    fmt.Println("Error in parsing certificate")

}

extensions = cert.Extensions

checkId := []int{2, 5, 6, 135, 3, 2, 41}

for _, ext := range extensions {

    if reflect.DeepEqual(ext.Id, checkId) {

        fmt.Println("true")

    }

}

}


但是深度相等返回 false(存在特定的 oid),我需要检索该特定扩展的值。谁能建议一些步骤来做到这一点?


红糖糍粑
浏览 143回答 1
1回答

慕桂英4014372

reflect.DeepEqual 不起作用,因为类型不同。检查 OID 的常规方法是使用asn1.ObjectIdentifier,如下所示:checkID := asn1.ObjectIdentifier{2, 5, 6, 135, 3, 2, 41}for _, ext := range extensions {    if ext.Id.Equal(checkId) {        fmt.Println("true")    }}如果它不存在,请不要忘记检查ExtraExtensions。
随时随地看视频慕课网APP

相关分类

Go
我要回答