如何检查CA签发的PEM证书的有效性
How to check validity of PEM certificate issued by CA
我有证书 (PEM),我想检查证书是否有效并由 CA 签名。我已经拥有 CA 证书 (PEM)。使用标准 crypto/x509
包在 Go 中检查证书的简单但安全的方法是什么?
您需要使用 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
}
免责声明: 我将其重新组织为一个函数,并删除了用于错误处理的恐慌。代码与官方文档中的示例没有其他变化。
我有证书 (PEM),我想检查证书是否有效并由 CA 签名。我已经拥有 CA 证书 (PEM)。使用标准 crypto/x509
包在 Go 中检查证书的简单但安全的方法是什么?
您需要使用 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
}
免责声明: 我将其重新组织为一个函数,并删除了用于错误处理的恐慌。代码与官方文档中的示例没有其他变化。