Ошибка SSL «Сбой вызова SSPI» при загрузке определенных сайтов c # - PullRequest
0 голосов
/ 10 марта 2019

Некоторые веб-сайты, которые я загружаю через мое приложение c #, похоже, выдают исключение

A call to SSPI failed

. Независимо от того, какую комбинацию подтверждения SSL я пытаюсь найти, я не вижу, чтобы получить что-либо для загрузки с этих веб-сайтов.3m.com является примером.

HttpWebRequest request = (HttpWebRequest)WebRequest.Create("https://www.3m.com");

ServicePointManager.CheckCertificateRevocationList = false;
ServicePointManager.SecurityProtocol = System.Net.SecurityProtocolType.Ssl3 | System.Net.SecurityProtocolType.Tls12 | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls;
ServicePointManager.ServerCertificateValidationCallback += (sender, cert, chain, sslPolicyErrors) => true;

request.AutomaticDecompression = DecompressionMethods.Deflate | DecompressionMethods.GZip;
request.Timeout = 5000;
request.KeepAlive = false;
request.AllowAutoRedirect = true;
request.Accept = "text/html, application/xhtml+xml, application/xml; q=0.9, image/webp, */*; q=0.8";
request.Headers["Accept-Language"] = "en-GB,en-US;q=0.7,en;q=0.3";
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
Stream dataStream = response.GetResponseStream();
StreamReader reader = new StreamReader(dataStream);
string responseFromServer = reader.ReadToEnd();

1 Ответ

1 голос
/ 11 марта 2019

Я понял это в конце.

Проблема заключалась в том, что я объявлял параметры SSL ПОСЛЕ создания объекта HttpWebRequest.

Код ниже работает.

ServicePointManager.CheckCertificateRevocationList = false;
ServicePointManager.SecurityProtocol = System.Net.SecurityProtocolType.Ssl3 | System.Net.SecurityProtocolType.Tls12 | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls;
ServicePointManager.ServerCertificateValidationCallback += (senderj, cert, chain, sslPolicyErrors) => true;

HttpWebRequest request = (HttpWebRequest)WebRequest.Create("https://www.3m.com");

request.AutomaticDecompression = DecompressionMethods.Deflate | DecompressionMethods.GZip;
request.Timeout = 5000;
request.KeepAlive = false;
request.AllowAutoRedirect = true;
request.Accept = "text/html, application/xhtml+xml, application/xml; q=0.9, image/webp, */*; q=0.8";
request.Headers["Accept-Language"] = "en-GB,en-US;q=0.7,en;q=0.3";
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
Stream dataStream = response.GetResponseStream();
StreamReader reader = new StreamReader(dataStream);
string responseFromServer = reader.ReadToEnd();
...