Установка значения для запроса для ServicePointManager.SecurityProtocol

В С# я могу установить статическое значение для SSL3 или TLS, например

ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls;

Или:

ServicePointManager.SecurityProtocol = SecurityProtocolType.Ssl3;

Но (я считаю) это повлияет на все будущие объекты HttpWebRequest в моем приложении.

Есть ли способ установить это для данного HttpWebRequest или, по крайней мере, для данного URI?

Примечание. Я видел это:

Uri uri = new Uri(url);
ServicePoint sp = ServicePointManager.FindServicePoint(uri);

Но ServicePoint не имеет свойства SecurityProtocol.

В настоящее время я думаю, что мне нужно просто установить статическое глобальное свойство до создания нового HttpWebRequest.

Это не так, и это также означает:

  • Я должен убедиться, что несколько потоков не делают этого одновременно.
  • Я не уверен, в какой момент этот параметр был "использован" (т.е. Когда я вызываю webRequest.GetResponse(), к которому обращается ServicePointManager.SecurityProtocol и привязывается к этому URI?).

Ответ 1

Это реализовано здесь:

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

И здесь:

Установите SecurityProtocol (Ssl3 или TLS) в.net HttpWebRequest за запрос

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