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

В C# я могу установить статическое значение для 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 для каждого запроса.

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

Другие вопросы по тегам