我知道StackOverflow和整个互联网上有大量的问题和答案都有完全相同或非常相似的错误信息,我很确定我已经阅读并尝试了90他们中的%。我仍然无法解决此问题。
以下是Visual Studio建议的WebClient
代码。但我也试过HttpWebRequest/WebRequest
,尽管它已经过时了。没有变化,我得到了同样的错误:" 请求被中止:无法创建SSL / TLS安全通道。"。
现在这里是代码。 makeProxy
实际上只有3行,新的WebProxy
加上凭据。我相信它的工作原理是因为(a)如果我提供了错误的凭证,那么我会收到身份验证错误,(b)如果我尝试访问http而不是https页面,那么我会将其恢复,所以我会这样做。在互联网上。
protected string getToken() {
string url = ConfigurationManager.AppSettings["domo_api_url_auth"];
WebClient c = new WebClient();
c.Proxy = makeProxy();
c.Credentials = new NetworkCredential(ConfigurationManager.AppSettings["domo_api_cid"], ConfigurationManager.AppSettings["domo_api_pwd"]);
c.Encoding = System.Text.Encoding.UTF8;
ServicePointManager.SecurityProtocol = SecurityProtocolType.Ssl3;
// ServicePointManager.ServerCertificateValidationCallback = delegate { return true; };
// ServicePointManager.ServerCertificateValidationCallback += ValidateRemoteCertificate;
Stream responseStream = c.OpenRead(url);
return new StreamReader(responseStream).ReadToEnd();
}
我的问题是该消息不是很有帮助。我也尝试调试它,没有帮助。我想到了网站服务网站上的证书,我试图联系并完成了允许W3SVC证书的过程。没有帮助。我为每个https网站都收到同样的错误,例如google.com或stackoverflow.com或我自己公司的网站。但是当我去一个只有http的随机新闻网站时,一切正常。
极其可疑的是,即使我取消注释第一个ServerCertificateValidationCallback
行,它也不起作用,当我取消注释第二个,据说将代码重定向到验证时,它实际上永远不会到达那里。就像验证甚至不会开始一样。
如何排除故障?我甚至不理解它失败的Web请求 - 响应过程的哪一点。
答案 0 :(得分:2)
除了SSLv3之外,您可能还需要激活TLS:
ServicePointManager.SecurityProtocol =
SecurityProtocolType.Ssl3 |
SecurityProtocolType.Tls |
SecurityProtocolType.Tls11 |
SecurityProtocolType.Tls12;