Go 传输选项,确保通过TLS 1.2进行网络/http客户端连接

Go 传输选项,确保通过TLS 1.2进行网络/http客户端连接,go,Go,我有一个go服务,它向我无法控制的HTTP服务器发出REST请求。客户要求my“确认”我的服务通过TLS 1.2连接。这是我在代码中可以做到的吗 当前代码如下所示: request, _ := http.NewRequest("PUT", "https://example.com/path/to/endpoint", bytes.NewReader(json)) client := &http.Client{} response, _ := client.Do(req

我有一个go服务,它向我无法控制的HTTP服务器发出REST请求。客户要求my“确认”我的服务通过TLS 1.2连接。这是我在代码中可以做到的吗

当前代码如下所示:

request, _ := http.NewRequest("PUT",
    "https://example.com/path/to/endpoint",
    bytes.NewReader(json))

client := &http.Client{}

response, _ := client.Do(request)
defer response.Body.Close()

str, err := ioutil.ReadAll(response.Body)
tr := &http.Transport{
    ... some options here ...
}
client := &http.Client{Transport: tr}
基于对文档的快速阅读,我认为我需要使用
传输
,并使用该传输构建我的客户机。大概是这样的:

request, _ := http.NewRequest("PUT",
    "https://example.com/path/to/endpoint",
    bytes.NewReader(json))

client := &http.Client{}

response, _ := client.Do(request)
defer response.Body.Close()

str, err := ioutil.ReadAll(response.Body)
tr := &http.Transport{
    ... some options here ...
}
client := &http.Client{Transport: tr}
但是我不确定我应该设置什么选项

按照RFC 5246的规定,程序包tls部分实现了tls 1.2

beeing说我将此函数保留为一个片段,以创建必要的配置:

func NewTLSConfig(clientCertFile, clientKeyFile, caCertFile string) (*tls.Config, error) {
 tlsConfig := tls.Config{}

 // Load client cert
 cert, err := tls.LoadX509KeyPair(clientCertFile, clientKeyFile)
 if err != nil {
  return &tlsConfig, err
 }
 tlsConfig.Certificates = []tls.Certificate{cert}

 // Load CA cert
 caCert, err := ioutil.ReadFile(caCertFile)
 if err != nil {
  return &tlsConfig, err
 }
 caCertPool := x509.NewCertPool()
 caCertPool.AppendCertsFromPEM(caCert)
 tlsConfig.RootCAs = caCertPool

 tlsConfig.BuildNameToCertificate()
 return &tlsConfig, err
}
之后,您只需初始化传输:

transport := &http.Transport{TLSClientConfig: tlsConfig}
client := &http.Client{Transport: transport}

按照RFC 5246的规定,程序包tls部分实现了tls 1.2

beeing说我将此函数保留为一个片段,以创建必要的配置:

func NewTLSConfig(clientCertFile, clientKeyFile, caCertFile string) (*tls.Config, error) {
 tlsConfig := tls.Config{}

 // Load client cert
 cert, err := tls.LoadX509KeyPair(clientCertFile, clientKeyFile)
 if err != nil {
  return &tlsConfig, err
 }
 tlsConfig.Certificates = []tls.Certificate{cert}

 // Load CA cert
 caCert, err := ioutil.ReadFile(caCertFile)
 if err != nil {
  return &tlsConfig, err
 }
 caCertPool := x509.NewCertPool()
 caCertPool.AppendCertsFromPEM(caCert)
 tlsConfig.RootCAs = caCertPool

 tlsConfig.BuildNameToCertificate()
 return &tlsConfig, err
}
之后,您只需初始化传输:

transport := &http.Transport{TLSClientConfig: tlsConfig}
client := &http.Client{Transport: transport}

在编写本文时,如果服务器支持,Go将自动讲TLS 1.2

报告连接的各种协商TLS参数,包括协议版本

要获取HTTP客户端的底层TLS连接,最简单的方法是将
传输
拨号TLS
字段设置为建立和记忆连接的函数。收到响应后(但在关闭响应正文之前!),请拨打:


在编写本文时,如果服务器支持,Go将自动讲TLS 1.2

报告连接的各种协商TLS参数,包括协议版本

要获取HTTP客户端的底层TLS连接,最简单的方法是将
传输
拨号TLS
字段设置为建立和记忆连接的函数。收到响应后(但在关闭响应正文之前!),请拨打: