【问题标题】:Go https client issue - remote error: tls: handshake failure转到 https 客户端问题 - 远程错误:tls:握手失败
【发布时间】:2017-05-06 03:53:19
【问题描述】:

我遇到了这个错误'远程错误:tls:握手失败':

~/go/bin/aci-tls 10.0.0.201 user pass
2016/12/20 18:12:04 post error: Post https://10.0.0.201/api/aaaLogin.json: remote error: tls: handshake failure

代码是基本的HTTPS客户端:https://play.golang.org/p/cqPT0oR__q

OpenSSL 对这个 https 服务器很满意:

$ openssl s_client -connect 10.0.0.201:443

(snip)
SSL handshake has read 1383 bytes and written 431 bytes
---
New, TLSv1/SSLv3, Cipher is ECDHE-RSA-AES256-GCM-SHA384
Server public key is 2048 bit
Secure Renegotiation IS supported
Compression: NONE
Expansion: NONE
No ALPN negotiated
SSL-Session:
    Protocol  : TLSv1.2
    Cipher    : ECDHE-RSA-AES256-GCM-SHA384
(snip)

测试日期:

$ go version
go version go1.7.4 linux/386

C:\>go version
go version go1.7.4 windows/amd64

gotlsscan 说:

lab@ubu:~$ go version
go version go1.8beta2 linux/386
lab@ubu:~$ ~/go/bin/gotlsscan -host 10.0.0.201 | grep -v NOT
Testing SSL30 (DISABLED)
Testing TLS1.0
Testing TLS1.1
Testing TLS1.2
lab@ubu:~$
lab@ubu:~$ ~/go/bin/gotlsscan -insecure -host 10.0.0.201 | grep -v NOT
Testing SSL30 (DISABLED)
Testing TLS1.0
Testing TLS1.1
        TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA            [OK]
        TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA            [OK]
Testing TLS1.2

如何进一步解决此问题?

【问题讨论】:

  • 你使用的是什么版本的 Go?服务器是什么,你能得到任何描述连接失败原因的日志吗?
  • go版本go1.7.4 linux/386,服务器是Cisco APIC,暂时没有找到HTTPS相关的日志。
  • 你可以尝试在主机上运行github.com/jbardin/gotlsscan(需要>go1.8beta,或者从master构建Go)。它将贯穿所有 tls 版本和密码套件并列出兼容的内容。服务器可能做错了什么,但不同的套件或 tls 版本可能仍然有效(IIS 也曾用于中断与 tls1.2 的握手)
  • @JimB 我已将 gotlsscan 的结果添加到问题中。
  • 这表明它确实与VersionTLS11TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA 成功握手,因此我将配置客户端以使用这些设置。

标签: ssl go https tls1.2


【解决方案1】:

服务器出于某种原因不接受 TLS1.2 握手,也没有正确回退到 TLS1.1。您可以强制客户端仅使用 TLS1.1 和兼容的密码套件

cfg := &tls.Config{
    CipherSuites: []uint16{
        tls.TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA,
        tls.TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA,
    },
    PreferServerCipherSuites: true,
    InsecureSkipVerify:       true,
    MinVersion:               tls.VersionTLS11,
    MaxVersion:               tls.VersionTLS11,
}

【讨论】:

  • 如果您使用的是路由器或 WiFi AP,请重新启动它。问题的原因可能有很多,这就是我的情况。
猜你喜欢
  • 2020-07-03
  • 2019-08-18
  • 2020-02-14
  • 2019-02-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-23
相关资源
最近更新 更多