验证公共CA颁发的客户端证书

时间:2019-04-08 03:22:06

标签: go certificate x509 pem

我对x509验证功能有疑问

根据此示例,https://golang.org/src/crypto/x509/example_test.go

    const rootPEM = `-----BEGIN CERTIFICATE-----
                     too long... skipped
                     -----END CERTIFICATE-----`

    const certPEM = `-----BEGIN CERTIFICATE-----
                     too long... skipped
                     -----END CERTIFICATE-----`

    roots := x509.NewCertPool()
    ok := roots.AppendCertsFromPEM([]byte(rootPEM))
    if !ok {
        panic("failed to parse root certificate")
    }

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

    opts := x509.VerifyOptions{
        DNSName: "mail.google.com",
        Roots:   roots,
    }

    if _, err := cert.Verify(opts); err != nil {
        panic("failed to verify certificate: " + err.Error())
    }

我们可以使用签署证书的CA的根证书来验证客户端证书。但我假设此示例使用的是自签名证书,因为它需要提供我生成的根证书才能识别证书。

但是,如果客户端证书由Godaddy或Symantec这样的公共证书颁发机构签名怎么办?

我仍然需要提前在NewCertPool中提供根证书吗?否则该库的作用类似于浏览器,该浏览器一开始就已经安装了根证书,而您无需导入或执行任何操作。 如果不是,那么我可以一次从公共CA导入所有根证书吗?还是我必须手动一个接一个地导入它们?

非常感谢您耐心阅读我的问题,感谢您提供任何答案或建议!

0 个答案:

没有答案