You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Docker容器内Golang发起HTTPS请求出现TLS握手超时问题求助

Docker容器内Golang发起HTTPS请求出现TLS握手超时问题求助

大家好,我碰到了一个困扰许久的问题,想请教下社区的朋友们:

我正在开发一个Golang解析程序,目标站点是https://****.ru/。在本地的Docker容器里运行这个程序时,一切都正常,能顺利完成请求和解析;但把程序部署到服务器的Docker容器中运行时,却反复出现TLS握手超时的错误:

Get "https://***.ru/" net/http: TLS handshake timeout.

我用来发起请求的核心代码如下:

client := &http.Client{
    Timeout: 20 * time.Second,
    Transport: &http.Transport{
        TLSHandshakeTimeout: 10 * time.Second,
        TLSClientConfig: &tls.Config{
            MinVersion: tls.VersionTLS12,
            CipherSuites: []uint16{
                tls.TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,
                tls.TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,
                tls.TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305, // Go 1.8 only
                tls.TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305,   // Go 1.8 only
                tls.TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,
                tls.TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,
            },
        },
    },
}

rq, err := http.NewRequest("GET", link, nil)
if err != nil {
    log.Println(err)
}

res, err := client.Do(rq)
if err != nil {
    log.Fatal(err)
}

我已经尝试过几种排查手段:

  • TLSClientConfig中的InsecureSkipVerify设为true,跳过证书验证
  • 延长TLSHandshakeTimeout的时长到20秒以上

但这些操作都没有解决问题,错误依然存在。

更奇怪的是,直接在服务器主机上用curl https://***.ru/发起请求,是完全正常的,能快速得到响应,没有任何超时或TLS相关的错误。

有没有朋友遇到过类似的场景?或者能给我一些新的排查思路?非常感谢!

备注:内容来源于stack exchange,提问作者nod

火山引擎 最新活动