首页 >后端开发 >Golang >Golang中遇到SSL错误时如何验证HTTPS证书?

Golang中遇到SSL错误时如何验证HTTPS证书?

Patricia Arquette
Patricia Arquette原创
2024-12-07 22:38:16320浏览

How to Verify HTTPS Certificates in Golang When Encountering SSL Errors?

使用 Golang 验证 HTTPS 证书

使用自定义证书向服务器发出 HTTPS 请求时,必须验证其真实性以确保安全通信。

在一种此类场景中,在单独端口上运行的应用程序在尝试访问 HTTPS 上托管的 REST API 时遇到 SSL 错误。此错误的原因是无法识别的证书颁发机构。

要解决此问题,在 HTTPS 请求期间将证书颁发机构添加到传输至关重要。以下代码片段演示了如何实现此目的:

package main

import (
    "crypto/tls"
    "io/ioutil"
    "log"
    "net/http"
    "crypto/x509"
)

func main() {
    // Read the root CA certificate from file
    caCert, err := ioutil.ReadFile("rootCA.crt")
    if err != nil {
        log.Fatal(err)
    }

    // Create an X.509 certificate pool and add the CA certificate
    caCertPool := x509.NewCertPool()
    caCertPool.AppendCertsFromPEM(caCert)

    // Configure the TLS client to trust the CA
    tlsConfig := &tls.Config{
        RootCAs: caCertPool,
    }

    // Create a new HTTP client with the modified TLS configuration
    client := &http.Client{
        Transport: &http.Transport{
            TLSClientConfig: tlsConfig,
        },
    }

    // Make an HTTPS request using the client
    _, err = client.Get("https://secure.domain.com")
    if err != nil {
        panic(err)
    }
}

或者,如果没有预先存在的 CA 证书可用,该解决方案建议生成您自己的 CA 并颁发由该 CA 签名的证书。以下命令提供了分步方法:

生成 CA:

openssl genrsa -out rootCA.key 4096
openssl req -x509 -new -key rootCA.key -days 3650 -out rootCA.crt

生成由 CA 签名的 secure.domain.com 证书:

openssl genrsa -out secure.domain.com.key 2048
openssl req -new -key secure.domain.com.key -out secure.domain.com.csr
#In answer to question `Common Name (e.g. server FQDN or YOUR name) []:` you should set `secure.domain.com` (your real domain name)
openssl x509 -req -in secure.domain.com.csr -CA rootCA.crt -CAkey rootCA.key -CAcreateserial -days 365 -out secure.domain.com.crt

以上是Golang中遇到SSL错误时如何验证HTTPS证书?的详细内容。更多信息请关注PHP中文网其他相关文章!

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