Go 传输选项,确保通过TLS 1.2进行网络/http客户端连接
我有一个go服务,它向我无法控制的HTTP服务器发出REST请求。客户要求my“确认”我的服务通过TLS 1.2连接。这是我在代码中可以做到的吗 当前代码如下所示: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
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
字段设置为建立和记忆连接的函数。收到响应后(但在关闭响应正文之前!),请拨打: