首页 >后端开发 >Golang >如何在 Go 中使用证书验证 HTTPS 请求?

如何在 Go 中使用证书验证 HTTPS 请求?

Barbara Streisand
Barbara Streisand原创
2024-12-11 00:34:10354浏览

How to Verify HTTPS Requests Using Certificates in Go?

在 Go 中使用证书进行 HTTPS 请求验证

在需要与在不同端口上提供的启用 HTTPS 的 REST API 进行通信的应用程序中,它经常会遇到 SSL 验证错误,例如“x509:由未知颁发机构签名的证书”。当应用程序无法识别 API 的证书颁发机构 (CA) 时,就会出现这种情况。

要解决此问题,您需要将 CA 证书添加到请求的传输层。以下是演示如何执行此操作的 Go 代码片段:

package main

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

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

    // Create a certificate pool from the CA certificate.
    caCertPool := x509.NewCertPool()
    caCertPool.AppendCertsFromPEM(caCert)

    // Configure the HTTP client with TLS settings.
    client := &http.Client{
        Transport: &http.Transport{
            TLSClientConfig: &tls.Config{
                RootCAs: caCertPool,
            },
        },
    }

    // Make a GET request to the HTTPS URL.
    resp, err := client.Get("https://secure.domain.com")
    if err != nil {
        log.Fatal(err)
    }

    // Process the HTTP response as usual.
    fmt.Println(resp.Status)
}

如果您尚未创建 CA 来签署您的证书,这里有一些指导您的步骤:

生成CA:

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

为 Secure.domain.com 生成证书,签名为CA:

openssl genrsa -out secure.domain.com.key 2048
openssl req -new -key secure.domain.com.key -out secure.domain.com.csr

在回答问题“通用名称(例如服务器 FQDN 或您的姓名)[]:”时,输入“secure.domain.com”(您的实际域名) .

openssl x509 -req -in secure.domain.com.csr -CA rootCA.crt -CAkey rootCA.key -CAcreateserial -days 365 -out secure.domain.com.crt

以上是如何在 Go 中使用证书验证 HTTPS 请求?的详细内容。更多信息请关注PHP中文网其他相关文章!

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