Мое приложение должно общаться с различными хостами через https, и настройка по умолчанию ServicePointManager.SecurityProtocol = TLS
хорошо работала до сих пор.Теперь у меня есть несколько хостов, которые (как показывает System.Net
журнал трассировки) не отвечают на исходное сообщение рукопожатия TLS, но поддерживают базовое соединение открытым до истечения времени ожидания, вызывая исключение тайм-аута.Я попытался установить время ожидания HttpWebRequest
на 5 минут, с тем же результатом.Предположительно, эти хосты ожидают рукопожатия SSL3, так как IE и Firefox могут подключаться к этим хостам с задержкой 30-40 секунд.Кажется, что в .NET есть какой-то механизм отката, который разлагает TLS на SSL3, но по какой-то причине он не срабатывает.
FWIW, вот сообщение о рукопожатии, которое отправляет мой запрос (обычный TLS 1.0 CLIENT HELLOсообщение):
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 : ............
Есть ли способ использовать SSL3 вместо TLS в конкретном HttpWebRequest
или принудительно использовать запасной вариант?Кажется, настройки ServicePointManager
глобальны, и я бы очень не хотел понизить настройку протокола безопасности до SSL3 для всего приложения.