La mia applicazione deve comunicare con host diversi tramite https e l'impostazione predefinita di ServicePointManager.SecurityProtocol = TLS
mi è stata utile fino ad oggi. Ora ho alcuni host che (come mostra il log di traccia System.Net
) non rispondono al messaggio iniziale di handshake TLS ma mantengono aperta la connessione sottostante finché non scade, generando un'eccezione di timeout. Ho provato a impostare il timeout HttpWebRequest
fino a 5 minuti, con lo stesso risultato. Presumibilmente questi host stanno aspettando un handshake SSL3 poiché sia IE che Firefox sono in grado di connettersi a questi host dopo un ritardo di 30-40 secondi. Sembra esserci un meccanismo di fallback in .NET che degrada TLS in SSL3, ma non entra in gioco per qualche motivo.Come usare SSL3 invece di TLS in un particolare HttpWebRequest?
FWIW, ecco il messaggio di stretta di mano la mia richiesta è l'invio (un normale TLS 1.0 CLIENT CIAO messaggio):
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 : ............
C'è un modo per utilizzare SSL3 invece di TLS in un particolare HttpWebRequest
, o di forzare un ripiego ? Sembra che l'impostazione di ServicePointManager
sia globale e mi dispiacerebbe dover degradare l'impostazione del protocollo di sicurezza su SSL3 per l'intera applicazione.
Hai effettivamente testato la tua ipotesi modificando l'impostazione della connessione su SSL3? – Amnon
Sì, l'ipotesi si è rivelata corretta. I padroni di casa erano Netware e sembra che sia la politica di Netware in merito a richieste non riconosciute/non valide a non rispondere o a dare messaggi di errore, presumibilmente per ridurre la superficie di attacco. –