无效的 ASN.1 对象标识符编码错误

标签 go asn.1 der

我正在尝试使用 encoding/asn1 创建 DER 文件,但我不断收到无效的对象标识符运行时错误。 asn1.ObjectIdentifier 只是一个 []int,所以我不确定什么是无效的。

package main

import (
    "encoding/asn1"
    "fmt"
    "log"
)

type algorithm struct {
    Algo asn1.ObjectIdentifier
    Null asn1.RawValue
}

func main() {
    var myCert algorithm
    myCert.Algo = asn1.ObjectIdentifier{42, 134, 72, 134}
    myCert.Null = asn1.NullRawValue

    mdata, err := asn1.Marshal(myCert)
    if err != nil {
        log.Fatalln(err)
    }

    fmt.Println(mdata)
}

程序退出并出现以下错误: “asn1:结构错误:无效的对象标识符”

Playground 示例 here

最佳答案

对象标识符不是直截了当的。

只有 3 个顶级弧(构成对象标识符的整数)。 换句话说,第一个弧(在您的示例中为 42)只能是 0、1 或 2

如果你的第一个弧是0或者1,那么第二个弧一定要小于40

注意:对象标识符值的编码规则使用此限制来打包前 2 个弧

关于无效的 ASN.1 对象标识符编码错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50538867/

相关文章:

unit-testing - 如何为一小时后函数返回时间编写单元测试

java - 从 DER 格式的 String base64 编码创建 PrivateKey 和 PublicKey

c - 从 GSM-TCAP asn1 文件生成 C 代码时出错

c - 如何在 ASN.1 生成的 C 代码中添加消息可选部分

ASN.1 自动标签和可扩展性隐含属性

从 DER ASN.1 到 XMLDSIG P1363 的 PHP DSA 签名转换

php - 如何从RSA的公开指数和模数生成DER/PEM证书?

go - Cron Job 不会使用 TimeZone 触发

go - 填充缓冲 channel 直到变满或持续时间过去

docker - Go测试失败时停止docker容器服务