我知道在StackOverflow和整个互联网上有大量的问题和答案,带有完全相同或非常相似的错误消息,我很确定我已经阅读并尝试了其中的90%。我仍然无法解决这个问题。
下面是带有WebClient
的代码,正如Visual Studio所建议的那样。但我也尝试了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();
}
我的问题是该消息不是很有帮助。我也尝试调试它,没有帮助。我想到了我尝试访问的 Web 服务站点上的证书,并完成了允许 W3SVC 使用该证书的过程。没帮助。对于每个https网站,例如 google.com 或 stackoverflow.com 或我自己公司的网站,我都会收到相同的错误。但是当我只用http去一个随机的新闻网站时,一切正常。
非常可疑的是,即使我取消注释第一行ServerCertificateValidationCallback
行,它也无法正常工作,而当我取消注释第二行时,据说将代码重定向到验证,它实际上永远不会到达那里。就像验证甚至不会开始一样。
如何对此进行故障排除?我什至不明白它在 Web 请求-响应过程的哪个点上失败了。
除了 SSLv3 之外,您可能还需要激活 TLS:
ServicePointManager.SecurityProtocol =
SecurityProtocolType.Ssl3 |
SecurityProtocolType.Tls |
SecurityProtocolType.Tls11 |
SecurityProtocolType.Tls12;