2016-12-20 95 views
2

我打這個錯誤 '遠程錯誤:TLS:握手失敗':轉到HTTPS客戶端的問題 - 遠端差錯: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說:

[email protected]:~$ go version 
go version go1.8beta2 linux/386 
[email protected]:~$ ~/go/bin/gotlsscan -host 10.0.0.201 | grep -v NOT 
Testing SSL30 (DISABLED) 
Testing TLS1.0 
Testing TLS1.1 
Testing TLS1.2 
[email protected]:~$ 
[email protected]:~$ ~/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 

我怎樣才能進一步解決這個問題?

+1

您使用的是哪個版本的Go?什麼是服務器,你能得到任何描述連接失敗原因的日誌嗎? – JimB

+0

go版本go1.7.4 linux/386,服務器是Cisco APIC,尚未找到與HTTPS相關的日誌記錄。 – Everton

+1

你可以嘗試在主機上運行'github.com/jbardin/gotlsscan'(需要> go1.8beta,或者從主控制作Go)。它將貫穿所有tls版本和密碼套件並列出兼容性。服務器可能做錯了某些事情,但是不同套件或tls版本可能仍然有效(IIS也用tls1.2打破握手) – JimB

回答

3

服務器出於某種原因不接受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, 
}