2016-12-20 8 views
2

Я ударяя эту ошибку 'удаленная ошибка:: Tls: отказ Рукопожатия': TLSGo клиент HTTPS проблемы - удаленная ошибка: сбой рукопожатие

~/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 или build Go from master). Он пройдет через все версии tls и ciphersuites и перечислит совместимость. Возможно, что сервер делает что-то неправильно, но другой вариант или версия 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, 
}