如何检查CA颁发的PEM证书的有效性

时间:2017-08-30 21:32:03

标签: go x509

我有证书(PEM),我想检查证书是否有效并由CA签名。我已经拥有CA证书(PEM)。使用标准crypto/x509包来检查Go中的证书的简单但安全的方法是什么?

1 个答案:

答案 0 :(得分:6)

您需要使用Certificate.Verify()。有一个例子可以说明你想要在文档中做什么:

https://golang.org/pkg/crypto/x509/#example_Certificate_Verify

func verifyCert(rootPEM, certPEM string, name string) error {
    roots := x509.NewCertPool()
    ok := roots.AppendCertsFromPEM([]byte(rootPEM))
    if !ok {
        return fmt.Errorf("failed to parse root certificate")
    }

    block, _ := pem.Decode([]byte(certPEM))
    if block == nil {
        return fmt.Errorf("failed to parse certificate PEM")
    }
    cert, err := x509.ParseCertificate(block.Bytes)
    if err != nil {
        return fmt.Errorf("failed to parse certificate: %v", err.Error())
    }

    opts := x509.VerifyOptions{
        DNSName: name,
        Roots:   roots,
    }

    if _, err := cert.Verify(opts); err != nil {
        return fmt.Errorf("failed to verify certificate: %v", err.Error())
    }

    return nil
}

免责声明:我将其重新组织为一个函数并删除了错误处理的恐慌。此代码与官方文档中的示例相同。