Ошибка в System.Net.HttpWebRequest.GetResponse () «ResponceSystem.Net.WebException: запрос был прерван: не удалось создать безопасный канал SSL / TLS» - PullRequest
0 голосов
/ 23 мая 2019

Приложение Dotnet построено с помощью Dotnet 4.5.В некоторых системах эта ошибка возникает при подключении к веб-серверу, где в SSL недавно было сделано несколько изменений.

TLS только для веб-сервера 1.2 https://drive.google.com/open?id=1Z0S-MWugDZdQrIy3BnquooB0ZX7veIVT

Код на стороне клиента.

WebRequest webRequest = WebRequest.Create(strUrl);
webRequest.ContentType = "application/x-www-form-urlencoded";
webRequest.Method = "Get";
if (strUrl.StartsWith("HTTPS", StringComparison.OrdinalIgnoreCase)) ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls11 | SecurityProtocolType.Tls12 | SecurityProtocolType.Tls | SecurityProtocolType.Ssl3;
using (WebResponse webResponse = webRequest.GetResponse())
{
    if (webResponse == null) return blnResult;
    using (StreamReader sr = new StreamReader(webResponse.GetResponseStream()))
    {
       strSuccess = sr.ReadToEnd().Trim();
       blnResult = true;
    }
}

Как только я скомпилирую его с фреймворком 4.6.2, он заработает.

Почему он работает на нескольких системах с таким же скомпилированным EXE-файлом 4.5, а на нескольких системах его необходимо скомпилировать с 4.6.2?

Класс WebClient отлично работает с версией 4.5 dotnet framework.Только WebRequest не работает.

1 Ответ

0 голосов
/ 28 мая 2019

Необходимо установить протокол безопасности перед инициализацией объекта WebRequest.

if (strUrl.StartsWith("HTTPS", StringComparison.OrdinalIgnoreCase)) ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls11 | SecurityProtocolType.Tls12 | SecurityProtocolType.Tls | SecurityProtocolType.Ssl3;

WebRequest webRequest = WebRequest.Create(strUrl);
webRequest.ContentType = "application/x-www-form-urlencoded";
webRequest.Method = "Get";

using (WebResponse webResponse = webRequest.GetResponse())
{
    if (webResponse == null) return blnResult;
    using (StreamReader sr = new StreamReader(webResponse.GetResponseStream()))
    {
       strSuccess = sr.ReadToEnd().Trim();
       blnResult = true;
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...