2015-12-09 6 views
7

Ich habe ein Problem, bei dem Python keine Verbindung zu einem bestimmten Server über SSL herstellen kann, da openssl den Handshake nicht abschließen kann. Curl und mein Browser funktionieren. Ich habe ein paar verschiedene openssl-Versionen und solutions ausprobiert, aber scheint nicht zu verbinden.OpenSSL-Verbindungsfehler SSL23_GET_SERVER_HELLO, aber Browser und Curl funktioniert

Hier ist, was ich auf beiden der folgenden Plattformen versucht habe. Die Ausgabe ist auf OpenSSL 1.0.1e etwas anders gedruckt, aber es sind immer noch die gleichen Fehler.

Mac OSX Yosemite - OpenSSL 0.9.8zg 14 July 2015 
Debian GNU/Linux 7 (wheezy) - OpenSSL 1.0.1e 11 Feb 2013 

Ohne Angabe, welche Version von

openssl s_client -connect www.uk-recruitment.net:443 
openssl s_client -connect www.uk-recruitment.net:443 -cipher 'DEFAULT:!ECDH' 
openssl s_client -connect www.uk-recruitment.net:443 -CAfile cacert.pem 
openssl s_client -connect www.uk-recruitment.net:443 -CAfile cacert.pem -cipher 'DEFAULT:!ECDH' 
openssl s_client -connect www.uk-recruitment.net:443 -CAfile cacert.pem -cipher 'DEFAULT:!ECDH' -servername uk-recruitment.net 

aber ich habe immer das gleiche Ergebnis

CONNECTED(00000003) 
66716:error:14077438:SSL routines:SSL23_GET_SERVER_HELLO:tlsv1 alert internal error:/SourceCache/OpenSSL098/OpenSSL098-52.40.1/src/ssl/s23_clnt.c:593: 

Wenn ich -tls1 hinzufügen, -tls1_1 oder -tls1_2 mit den gleichen Optionen, ich bekommen geringfügig anderer Fehler:

openssl s_client -connect www.uk-recruitment.net:443 -tls1 
CONNECTED(00000003) 
66750:error:14094438:SSL routines:SSL3_READ_BYTES:tlsv1 alert internal error:/SourceCache/OpenSSL098/OpenSSL098-52.40.1/src/ssl/s3_pkt.c:1145:SSL alert number 80 
66750:error:1409E0E5:SSL routines:SSL3_WRITE_BYTES:ssl handshake failure:/SourceCache/OpenSSL098/OpenSSL098-52.40.1/src/ssl/s3_pkt.c:566: 
+0

Stack Overflow ist eine Website für Programmier- und Entwicklungsfragen. Diese Frage scheint off-topic zu sein, weil es nicht um Programmierung oder Entwicklung geht. Siehe [Welche Themen kann ich hier fragen?] (Http://stackoverflow.com/help/on-topic) in der Hilfe. Vielleicht [Super User] (http://superuser.com/) oder [Information Security Stack Exchange] (http://security.stackexchange.com/) wäre ein besserer Ort zu fragen. Auch [Wo veröffentliche ich Fragen zu Dev Ops?] (Http://meta.stackexchange.com/q/134306). – jww

Antwort

10

Die Standorte erfordern Server Name Indication (SNI) und SSL-Handshakes SNI Fehler nicht mit verursacht:

$ openssl s_client -connect www.uk-recruitment.net:443 
CONNECTED(00000003) 
139999237719712:error:14077438:SSL routines:SSL23_GET_SERVER_HELLO:tlsv1 alert internal error:s23_clnt.c:770: 

Mit SNI statt es sieht viel besser aus:

$ openssl s_client -connect www.uk-recruitment.net:443 -servername www.uk-recruitment.net 
CONNECTED(00000003) 
... 
    Cipher : ECDHE-ECDSA-AES128-GCM-SHA256 

Es könnte sein, dass die -servername Option nicht verfügbar ist mit OpenSSL 0.9.8, aber es sollte mit OpenSSL 1.0.1 sein.

+0

Danke, die Flagge zeigt an, dass sie auf 0.9.8 verfügbar ist, gab aber immer noch den gleichen Fehler (mit www-Präfix und nicht), also nahm ich an, dass es nicht das Update war. Anprobieren funktioniert 1.0.1. –

+1

Per ssllabs sind sie auf cloudflare und erfordern SNI, mindestens TLSv1.0, * und ECDHE-ECDSA keyexchange *, und Tests zeigen, dass sie auch "new-style" Hallo (nicht SSLv2-kompatibel), die die Standardeinstellung für 0.9.8 ist . 1.0.0 mit '-servername' funktioniert, aber 1.0.1 oder 1.0.2 ist besser, weil sie TLSv1.2 und GCM erreichen. 0.9.8 kann mit '-tls1 -cipher ECCraft: HIGH:! ANULL -servername' arbeiten, aber das wird langsam knifflig. –

Verwandte Themen