【问题标题】:Parsing and printing X.509 attributes from PEM从 PEM 解析和打印 X.509 属性
【发布时间】:2016-04-15 13:45:55
【问题描述】:

我正在寻找一个简单的示例,用于在 go 中解析 X.509 PEM 并将值转储到标准输出。任何人都可以提供一个例子吗?

【问题讨论】:

    标签: go x509 pem


    【解决方案1】:

    您想使用 encoding.pem 解码 pem 文件,这将为您提供可以使用 crypto/x509 包解码的 DER 块。

    例如:

    certPEMBlock, err := ioutil.ReadFile(certFile)
    if err != nil {
        log.Fatal(err)
    }
    
    var blocks [][]byte
    for {
        var certDERBlock *pem.Block
        certDERBlock, certPEMBlock = pem.Decode(certPEMBlock)
        if certDERBlock == nil {
            break
        }
    
        if certDERBlock.Type == "CERTIFICATE" {
            blocks = append(blocks, certDERBlock.Bytes)
        }
    }
    
    for _, block := range blocks {
        cert, err := x509.ParseCertificate(block)
        if err != nil {
            log.Println(err)
            continue
        }
    
        fmt.Println("Certificate:")
        fmt.Printf("\tSubject: %+v\n", cert.Subject)
        fmt.Printf("\tDNS Names: %+v\n", cert.DNSNames)
        fmt.Printf("\tEmailAddresses: %+v\n", cert.EmailAddresses)
        fmt.Printf("\tIPAddresses: %+v\n", cert.IPAddresses)
    }
    

    【讨论】:

    • 非常感谢您 - 所有示例都包含许多我不需要的东西,因此我无法从树上看到木头。
    • 其实还有一个问题。如果我需要从扩展中的 OIDS 获取可读值。例如` 扩展:[{Id:2.5.29.19 关键:真值:[48 6 1 1 255 2 1 0]} {Id:2.5.29.15 关键:真值:[3 2 1 6]} {Id:2.5.29.14严重:错误值:[4 20 130 58 82 76 175 51 150 249 100 78 198 192 222 152 125 138 116 43 190 57]} {Id:2.5.29.35 严重:错误值:[48 22 128 20 1453 119 17 157 107 253 81 197 19 136 6 147 96 30 135 125 249 52 15]}]`有没有简单的方法得到它们?
    • @user1513388:我不确定你的意思。你已经有了它们;它们被解码为pkix.Extension
    • ID 和扩展名将作为 ID 和值返回。例如{Id:2.5.29.19 关键:true 值:[48 6 1 1 255 2 1 0]}
    • @user1513388:我不确定将 OID 与名称匹配的简单方法,但您可以从 x509 源中复制定义的值(在 x509.go 中搜索“oidExtension”)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-10-19
    • 2015-05-16
    • 2017-07-30
    • 2021-11-17
    • 1970-01-01
    • 2021-02-12
    • 2010-12-17
    相关资源
    最近更新 更多