Сбой HttpWebRequest: базовое соединение было закрыто: Не удалось установить доверительные отношения для защищенного канала SSL/TLS

#.net #web-services #httpwebrequest #tls1.2

Вопрос:

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

Исходное приложение закодировано в .Net 4.0 и не имеет проблем с вызовом веб-службы. После некоторого обновления версии удаленной системы я получаю ошибку: запрос был прерван: не удалось создать безопасный канал SSL/TLS в строке 4 ниже, после некоторого поиска в Google я обнаружил, что это связано с отсутствием поддержки TLS 1.2 в исходном приложении .Net 4.0.

Изменения, которые я внес, заключались в том, чтобы дополнить решение .Net 4.7.2 и добавить строку кода 1. Но появляется новая ошибка: базовое соединение было закрыто: не удалось установить доверительные отношения для безопасного канала SSL/TLS.

Обходное решение предложило добавить строку 2, чтобы игнорировать проверку сертификата, но это, похоже, вызывает дыру в безопасности. И я прочитал один из ответов, в котором упоминается о сертификате. Но я не уверен, что именно нужно сделать. Если требуется какой-либо сертификат, он должен быть уже настроен ранее, если только что-то новое не требует нового сертификата?

  //  Adding TLS12 support
 1.ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls12;
 2.//ServicePointManager.ServerCertificateValidationCallback  = (sender, cert, chain, sslPolicyErrors) => true;

 3.HttpWebRequest request = WebRequest.Create(mRestUrl) as HttpWebRequest;
 4.using (HttpWebResponse response = request.GetResponse() as HttpWebResponse)   
 {   
 5.   StreamReader reader = new StreamReader(response.GetResponseStream());   
 6.   mReturn =  reader.ReadToEnd();   
 }