gpt4 book ai didi

go - 检查 SSL 自签名证书的有效性

转载 作者:行者123 更新时间:2023-12-01 19:49:19 25 4
gpt4 key购买 nike

我已经通过下一个命令生成了自签名证书:

/bin/bash -c 'openssl req -x509 -newkey rsa:4096 -keyout key.pem -out cert.pem -days 5 -nodes

并查看证书,有效期为5天。

我需要编写脚本来检查此证书的到期日期,但不幸的是它无法验证它。能否请您穿上正确的衣服?

我的程序:

package main

import (
"crypto/x509"
"encoding/pem"
"fmt"
)

func main() {
const certPEM = `
-----BEGIN CERTIFICATE-----
...
-----END 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: "test.com",
}
if _, err := cert.Verify(opts); err != nil {
panic("failed to verify certificate: " + err.Error())
}
fmt.Println("correct")
}

下一个错误:

panic: failed to verify certificate: x509: certificate signed byunknown authority

最佳答案

由于是自签名证书,您可以将证书作为根证书之一来验证:

  // Create the cert pool
roots := x509.NewCertPool()
ok := roots.AppendCertsFromPEM([]byte(certPEM))
if !ok {
panic("failed to parse root certificate")
}

...

// Use the pool in the verify options:
opts := x509.VerifyOptions{
DNSName: "test.com",
Roots: roots,
}

...

如果不传递池,Go 将使用系统池,这肯定行不通。通过添加证书本身,可以构建到受信任根的有效路径。它还将验证证书的其余部分(名称和有效时间范围)。

这在 Certificate.Verify 的文档中有更详细的解释。 .

关于go - 检查 SSL 自签名证书的有效性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63317763/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com