首页 >后端开发 >Golang >使用自签名 TLS 证书时如何解决'x509:证书由未知颁发机构签名”错误?

使用自签名 TLS 证书时如何解决'x509:证书由未知颁发机构签名”错误?

Patricia Arquette
Patricia Arquette原创
2024-12-09 21:30:11363浏览

How to Resolve the

使用自签名证书设置 TLS

在使用自签名服务器证书建立 TLS 连接时,用户经常会遇到“x509: 证书由未知权限”错误。当客户端无法将自签名证书识别为可信机构时,就会出现此问题。

要解决此错误,问题出在证书生成过程中。提供的代码片段创建一个自签名证书,但忽略设置“IsCA:true”标志。此标志将证书指定为证书颁发机构 (CA),使其能够签署其他证书。

更正后的代码应类似于以下内容:

生成证书:

func generateCertificate() {
    key, err := ecdsa.GenerateKey(elliptic.P256(), rand.Reader)
    if err != nil {
        log.Fatal(err)
    }

    subject := x509.Certificate{
        SerialNumber: big.NewInt(42),
        Subject: pkix.Name{
            Organization: []string{"My Organization"},
        },
    }

    template := x509.Certificate{
        SerialNumber: big.NewInt(43),
        Subject:      subject.Subject,
        KeyUsage: x509.KeyUsageCertSign,
        IsCA:        true, // Setting IsCA to true designates the certificate as a CA
        ExtKeyUsage: []x509.ExtKeyUsage{x509.ExtKeyUsageServerAuth},
    }

    cert, err := x509.CreateCertificate(rand.Reader, &template, &template, &key.PublicKey, key)
    if err != nil {
        log.Fatal(err)
    }

    // Save the certificate and key to pem files
}

客户配置:

func clientSetup() (*tls.Config, error) {
    cert, err := ioutil.ReadFile("./cert.pem")
    if err != nil {
        return nil, err
    }

    certpool := x509.NewCertPool()
    certpool.AppendCertsFromPEM(cert)

    config := &tls.Config{
        RootCAs:    certpool,
        InsecureSkipVerify: true, //!!! Skip certificate verification for testing purposes only
    }

    return config, nil
}

注意:对于生产环境,应启用证书验证,以确保服务器的真实性。

以上是使用自签名 TLS 证书时如何解决'x509:证书由未知颁发机构签名”错误?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn