英文:
How to read extension values like key info and key signature with 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("解析证书时出错")
}
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存在),我需要获取该特定扩展的值。有人可以提供一些步骤吗?
英文:
var cert *x509.Certificate
cert, err := x509.ParseCertificate(myCertificate)
From this I need to retrieve extension values in bytes. I have the OID to be used for that. I am able to find code for adding extensions to a certificate. But not retrieving it. Can anyone share a sample code on how to do that?
Update:
Now, I am able to get the extensions
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")
}
}
}
But the deep equal return false (the particular oid is present), I need to retrieve the value of that particular extension. Can anyone suggest some steps to do that?
答案1
得分: 1
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
。
英文:
reflect.DeepEqual does not work because the types are different. The normal way to check OIDs is using the asn1.ObjectIdentifier as follows:
checkID := asn1.ObjectIdentifier{2, 5, 6, 135, 3, 2, 41}
for _, ext := range extensions {
if ext.Id.Equal(checkId) {
fmt.Println("true")
}
}
If it isn't there, don't forget to check ExtraExtensions
.
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论