Как использовать SSL3 вместо TLS в конкретном HttpWebRequest?

Мое приложение должно говорить с различными хостами по https и настройкой по умолчанию ServicePointManager.SecurityProtocol = TLS поданный меня хорошо по сей день. Теперь у меня есть некоторые хосты который (как System.Net проследите шоу журнала), не отвечают, что начальное квитирование TLS передает, но сохраняет базовое соединение открытым, пока оно не испытывает таймаут, выдавая исключение тайм-аута. Я пытался установить HttpWebRequestтайм-аут к целых 5 минутам, с тем же результатом. По-видимому, эти хосты ожидают квитирования SSL3, так как и IE и Firefox могут соединиться с этими хостами после задержки 30-40 секунд. Кажется, существует некоторый механизм нейтрализации в.NET, которая ухудшает TLS к SSL3, но это не умирает по некоторым причинам.

FWIW, вот сообщение квитирования, которое мой запрос отправляет (регулярное КЛИЕНТСКОЕ приветственное сообщение TLS 1.0):

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 для целого приложения.

11
задан Anton Tykhyy 12 June 2010 в 12:21
поделиться

2 ответа

Фактически, настройки ServicePointManager относятся к каждому домену приложения. Это позволило мне обойти проблему, создав отдельный домен приложения, настроенный для использования только SSL3, в результате чего мой объект сбора данных MarshalByRefObject (оба WebClient и WebRequest ] являются marshal-by-ref, но лучше уменьшить количество вызовов между доменами приложений) и создать его там. Отлично работал в сочетании со схемой обнаружения по таймауту.

14
ответ дан 3 December 2019 в 06:45
поделиться

.NET содержит условия для автоматического согласования до более низких версий протокола. Значение ServicePointManager.SecurityProtocol определяет поведение. Может принимать 3 разных значения: SecurityProtocol.Ssl3, SecurityProtocol.Tls или SecurityProtocol.Ssl3 | SecurityProtocol.Tls . Несмотря на то, что он глобальный, его можно изменить по мере необходимости.

Я не могу найти решение, не имея доступа к серверу с таким же ошибочным поведением. Единственное, что я могу сделать, это попытаться подключиться к Ssl3 | Настройка TLS , и если это не сработает, повторите попытку с настройкой Ssl3 . Попробуйте уменьшить тайм-аут и перехватить исключение тайм-аута, а затем повторите попытку.

РЕДАКТИРОВАТЬ

Многое из того, что я написал в предыдущей версии этого ответа, было неправильным.

4
ответ дан 3 December 2019 в 06:45
поделиться
Другие вопросы по тегам:

Похожие вопросы: