首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用不同的tls配置的多个http客户端

使用不同的tls配置的多个http客户端
EN

Stack Overflow用户
提问于 2022-08-17 00:45:37
回答 1查看 123关注 0票数 -1

尝试实现多个http客户端来调用多个服务,每个服务都有自己的tls配置(有些需要mTLS,有些不需要)。但是,我看到每个新请求都使用来自先前请求的tls配置,而不是它自己的tls配置?例如,我有两个客户,如下所示。当client-1发出第一个请求时,它将按照预期验证服务器证书。但是,当client-2发出下一个请求时,即使为其配置了InsecureSkipVerify: true,它仍然试图验证服务器证书。

client-1具有配置:

代码语言:javascript
复制
tr := http.DefaultTransport.(*http.Transport)
tr.TLSClientConfig = &tls.Config{RootCAs: certPool, InsecureSkipVerify: false}
client1 := http.Client{Transport: tr, Timeout: timeout}

client-2具有配置:

代码语言:javascript
复制
tr := http.DefaultTransport.(*http.Transport)
tr.TLSClientConfig = &tls.Config{RootCAs: certPool, InsecureSkipVerify: true}
client2 := http.Client{Transport: tr, Timeout: timeout}

client2请求的响应是x509:由未知权威机构签名的证书。这在理想情况下不应该发生,因为InsecureSkipVerify: true意味着没有验证服务器证书。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-08-17 02:36:40

http.DefaultTransport是在http包(这里)中定义为下列变量的变量:

代码语言:javascript
复制
var DefaultTransport RoundTripper = &Transport{
    Proxy: ProxyFromEnvironment,
    DialContext: defaultTransportDialContext(&net.Dialer{
        Timeout:   30 * time.Second,
        KeepAlive: 30 * time.Second,
    }),
    ForceAttemptHTTP2:     true,
    MaxIdleConns:          100,
    IdleConnTimeout:       90 * time.Second,
    TLSHandshakeTimeout:   10 * time.Second,
    ExpectContinueTimeout: 1 * time.Second,
}

您可以使用DefaultTransport创建多个http.Client实例,但需要记住它们都将使用相同的Transport (DefaultTransport)。对DefaultTransport的更改将对使用DefaultTransport的所有http.Client实例产生影响。

要解决这个问题,可以定义您自己的Transport (可能通过复制上面的内容,这将在医生们中讨论),或者在更改TLSClientConfig之前复制默认传输(tr := http.DefaultTransport.(*http.Transport).Clone())。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73381749

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档