Meine Anwendung muss über https mit verschiedenen Hosts kommunizieren, und die Standardeinstellung ServicePointManager.SecurityProtocol = TLS
hat mir bis heute gut getan. Jetzt habe ich einige Hosts, die (wie System.Net
Trace-Protokoll zeigt) die erste TLS-Handshake-Nachricht nicht beantworten, aber die zugrunde liegende Verbindung offen bleiben, bis es Timeout, eine Zeitüberschreitung Ausnahme auslöst. Ich habe versucht, HttpWebRequest
Timeout bis zu 5 Minuten, mit dem gleichen Ergebnis. Vermutlich warten diese Hosts auf einen SSL3-Handshake, da sowohl IE als auch Firefox nach 30-40 Sekunden Verzögerung eine Verbindung zu diesen Hosts herstellen können. Es scheint einige Fallback-Mechanismen in .NET zu geben, die TLS zu SSL3 degradieren, aber es tritt aus irgendeinem Grund nicht in Kraft.Wie verwendet man SSL3 anstelle von TLS in einem bestimmten HttpWebRequest?
FWIW, hier ist die Quittierungsaustauschnachricht meiner Anfrage (ein regelmäßiger TLS 1.0 Client hallo Nachricht) sendet:
00000000 : 16 03 01 00 57 01 00 00-53 03 01 4C 12 39 B4 F9 : ....W...S..L.9..
00000010 : A3 2C 3D EE E1 2A 7A 3E-D2 D6 0D 2E A9 A8 6C 03 : .,=..*z>......l.
00000020 : E7 8F A3 43 0A 73 9C CE-D7 EE CF 00 00 18 00 2F : ...C.s........./
00000030 : 00 35 00 05 00 0A C0 09-C0 0A C0 13 C0 14 00 32 : .5.............2
00000040 : 00 38 00 13 00 04 01 00-00 12 00 0A 00 08 00 06 : .8..............
00000050 : 00 17 00 18 00 19 00 0B-00 02 01 00 : ............
Gibt es eine Möglichkeit SSL3 zu verwenden anstelle von TLS in einer bestimmten HttpWebRequest
oder einen Rückfall zu zwingen ? Es scheint, dass die Einstellung ServicePointManager
global ist, und ich würde es wirklich hassen, die Sicherheitsprotokolleinstellung für die gesamte Anwendung auf SSL3 herabsetzen zu müssen.
Haben Sie Ihre Hypothese tatsächlich getestet, indem Sie die Verbindungseinstellung auf SSL3 geändert haben? – Amnon
Ja, die Hypothese erwies sich als richtig. Die Hosts waren Netware, und es scheint, dass es die Netware-Richtlinie bezüglich nicht erkannter/ungültiger Anfragen ist, nicht zu antworten oder irgendwelche Fehlermeldungen zu geben, vermutlich um die Angriffsfläche zu reduzieren. –