如何在 Go 中使用证书发送 HTTPS 请求
向运行在不同端口上的服务器发出 HTTPS 请求时,这是常见的遇到与证书相关的错误。出现这种情况是因为服务器的证书是由未知的机构签名的,并且默认的 HTTP 客户端不信任自签名的证书。
要解决此问题,我们需要使用适当的 CA 证书手动验证服务器的证书。以下是有关如何在 Go 中完成此操作的分步指南:
获取 CA 证书:
创建证书池:
配置 TLS 选项:
使用自定义传输创建 HTTP 客户端:
示例代码:
package main import ( "crypto/tls" "crypto/x509" "io/ioutil" "log" "net/http" ) func main() { // Read the CA certificate from file caCert, err := ioutil.ReadFile("rootCA.crt") if err != nil { log.Fatal(err) } // Create a certificate pool and add the CA cert caCertPool := x509.NewCertPool() caCertPool.AppendCertsFromPEM(caCert) // Configure TLS options tlsConfig := &tls.Config{ RootCAs: caCertPool, } // Create an HTTP client with custom transport client := &http.Client{ Transport: &http.Transport{ TLSClientConfig: tlsConfig, }, } // Send an HTTPs request _, err = client.Get("https://secure.domain.com") if err != nil { panic(err) } }
注意:
如果您没有 CA 证书,您可以创建自己的 CA 证书。有关如何生成自签名证书的说明,请参阅外部资源。
以上是如何在 Go 中使用自签名证书发出 HTTPS 请求?的详细内容。更多信息请关注PHP中文网其他相关文章!