#c# #.net #https
#c# #.net #https
Вопрос:
У меня есть следующий код :
private string GetDataFromWeb(string url)
{
/*this taken according to other posts here
ServicePointManager.Expect100Continue = true;
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls
| SecurityProtocolType.Tls11
| SecurityProtocolType.Tls12
| SecurityProtocolType.Ssl3;
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
using (HttpWebResponse response = (HttpWebResponse)request.GetResponse()) //exception occurs here
using (Stream stream = response.GetResponseStream())
using (StreamReader reader = new StreamReader(stream))
{
var result = reader.ReadToEnd();
Console.WriteLine("Finished read");
return resu<
}
}
При вызове функции на каком-либо https-сайте (например https://api.stackexchange.com )
В строке, где вызывается GetResponse, происходит следующее исключение:
Unhandled Exception: System.Net.WebException: The request was aborted: Could not create SSL/TLS secure channel.
Я также попытался, как рекомендовано в других сообщениях, обойти проверку ssl, выполнив следующий код (вызов при запуске приложения)
ServicePointManager.ServerCertificateValidationCallback = new RemoteCertificateValidationCallback(AlwaysGoodCertificate);
.. где
static bool AlwaysGoodCertificate(object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors policyErrors)
{
return true;
}
Но все же исключение происходит
Работает в Windows 7, .net 4.5 Что-то не так в приведенном выше коде? При доступе к тому же сайту через Chrome или через приложение Nodejs (usinh fetch) — запрос выполнен успешно
Заранее спасибо
Комментарии:
1. В обновленной Windows 7 (пакет обновления 1 все обновления для системы безопасности, доступные до истечения срока службы) опубликованный вами код (даже если вы должны удалить все протоколы, кроме
SecurityProtocolType.Tls12
) не генерирует исключений. Вы также должны удалитьServicePointManager.Expect100Continue = true;
: ваш код явно не обрабатывает это, но это другое дело — переопределениеServerCertificateValidationCallback
не обходит проверку SSL , оно позволяет игнорировать неудачные проверки сертификатов сервера (использовать с осторожностью).2. Обновите систему, установите . Net 4.8. Возможно, вам не хватает необходимых наборов шифров — обратите внимание, что в обновленной системе значение по
ServicePointManager.SecurityProtocol
умолчанию такое же, как в Windows 8 ,SecurityProtocolType.SystemDefault
, где должно быть значение по умолчаниюTLS12
, с последними наборами шифров, установленными с обновлениями. Однако не самые последние наборы шифров. Некоторые сайты, использующие более строгую защиту , могут разрешать только самые последние наборы шифров, которые не включены в Windows 7 стандартными средствами (и никогда не будут). Веб-браузеры устанавливают и обрабатывают свои собственные наборы шифров.