【问题标题】:SSL error "A call to SSPI failed" when loading certain websites c#加载某些网站时出现 SSL 错误“对 SSPI 的调用失败”c#
【发布时间】:2019-03-10 18:46:21
【问题描述】:

我通过我的 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();

【问题讨论】:

  • 您的代码在我的机器上运行良好。响应文本很容易获得。您的 Windows 的 SChannel 的配置方式似乎存在问题。
  • 通常,此异常带有一个 InnerException,它应该为您提供一些关于内部问题的线索。
  • 我和@ChristophHerold 在同一页面上。杰米,看看这个,可能会有所帮助:stackoverflow.com/a/30479567/2206145
  • 我的内心是“Win32Exception:不支持请求的功能”。不知道那是什么意思哈!我会尝试注册编辑谢谢:-)

标签: c# ssl ssl-certificate httpresponse


【解决方案1】:

最后我想通了。

问题是,我在创建 HttpWebRequest 对象之后声明了 SSL 选项。

下面的代码有效。

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();

【讨论】:

    猜你喜欢
    • 2010-12-16
    • 2022-12-18
    • 2021-05-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-27
    • 2013-09-04
    • 1970-01-01
    相关资源
    最近更新 更多