it-swarm.com.de

SSL3-Fehler beim Anfordern einer Verbindung mit TLS 1.2

Ich bin auf mehrere Hosts gestoßen, die SSL3-Handshake-Fehler auslösen, obwohl ich ausdrücklich TLS 1.2 anfordere. Warum ist das? Benutze ich den openssl Client falsch?

 $ openssl s_client -tls1_2 -connect id-images.vice.com:443 [ : s3_pkt.c: 1472: SSL-Warnungsnummer 40 
 140735150146384: Fehler: 1409E0E5: SSL-Routinen: ssl3_write_bytes: SSL-Handshake-Fehler: s3_pkt.c: 656: 
 --- 
 Kein Peer-Zertifikat verfügbar 
 --- 
 Keine Client-Zertifikat-CA-Namen gesendet 
 --- 
 SSL-Handshake hat 7 Bytes gelesen und 0 Bytes geschrieben 
 --- 
 Neu, (NONE), Chiffre ist (NONE) 
 Sichere Neuverhandlung IS NICHT unterstützt 
 Komprimierung: NONE 
 Erweiterung: KEINE 
 Kein ALPN ausgehandelt 
 SSL-Sitzung: 
 Protokoll: TLSv1.2 
 Verschlüsselung: 0000 
 Sitzungs-ID: 
 Session-ID-ctx: 
 Hauptschlüssel: 
 Schlüssel-Arg: Keine 
 PSK-Identität: Keine 
 PSK-Identitätshinweis: Keine 
 SRP-Benutzername: Keine 
 Startzeit: 1444078671 
 Zeitüberschreitung: 7200 (Sek.) 
 Überprüfen Sie den Rückkehrcode: 0 (ok) 
 --- 
19
richid

In SSL/TLS fordert der Client keine bestimmte Protokollversion an. Der Client gibt die maximale Protokollversion bekannt, die er unterstützt, und der Server wählt dann die Protokollversion aus, die verwendet werden soll. Ihr Client sagt nicht "Verwenden wir TLS 1.2". es heißt "Ich kenne bis TLS 1.2".

Ein Client kann seine eigenen zusätzlichen Anforderungen haben, aber es gibt keinen Platz, um sie in der Nachricht ClientHello anzugeben. Wenn der Client nur TLS 1.2 ausführen möchte, muss er "bis zu TLS 1.2" in seinen ClientHello, und ebenfalls schließen die Verbindung, wenn der Server mit einer Nachricht antwortet, die etwas anderes als "Lass uns TLS 1.2 machen" sagt. In Ihrem Fall haben die Dinge diesen Punkt nicht einmal erreicht: Der Server antwortete mit einer schwerwiegenden Warnung 40 ("handshake_failure", siehe der Standard ). Wie @ dave_thompson_085 hervorhebt, liegt dies an einem Mangel an SNI : Dies ist eine Erweiterung, mit der der Client in seiner ClientHello -Nachricht dokumentiert der Name des Zielservers. Einige Server benötigen SNI, da sie mehrere SSL-fähige Sites unter derselben IP-Adresse hosten und diesen Parameter benötigen, um zu wissen, welches Zertifikat sie verwenden sollen. Das Befehlszeilentool openssl s_client kann eine SNI mit einem expliziten -servername Möglichkeit.

Wie @Steffen erklärte, sind SSL 3.0 und alle TLS-Versionen ziemlich ähnlich und verwenden dasselbe Aufzeichnungsformat (zumindest in der frühen Phase des Handshakes), sodass OpenSSL dazu neigt, dieselben Funktionen wiederzuverwenden. Beachten Sie, dass, da der Server überhaupt nicht mit einem ServerHello antwortet, die Protokollversion noch nicht ausgewählt ist und SSL 3.0 zu diesem frühen Zeitpunkt des Handshakes zumindest konzeptionell noch eine Möglichkeit darstellt.

34
Thomas Pornin

ssl3_read_bytes und ssl3_writes_bytes beschäftigen sich mit Frames im SSL3-Stil. Dies gilt auch für spätere Versionen, d. H. TLS1.x. Somit werden dieselben Funktionen verwendet, obwohl ihre Namen möglicherweise auf etwas anderes hindeuten. Es gibt kein spezifisches tls1_read_bytes Funktion oder ähnliches.

9
Steffen Ullrich