从PEM解析和打印X.509属性

时间:2016-04-15 13:45:55

标签: go x509 pem

我正在寻找一个简单的例子来解析go中的X.509 PEM并将值转储到stdout。任何人都可以提供一个例子吗?

1 个答案:

答案 0 :(得分:2)

您希望使用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)
}