由于以下错误消息,我们无法使用WebRequest
连接到HTTPS服务器:
The request was aborted: Could not create SSL/TLS secure channel.
我们知道服务器在使用的路径中没有有效的HTTPS证书,但是为了绕过此问题,我们使用了从另一StackOverflow帖子中获取的以下代码:
private void Somewhere() {
ServicePointManager.ServerCertificateValidationCallback += new RemoteCertificateValidationCallback(AlwaysGoodCertificate);
}
private static bool AlwaysGoodCertificate(object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors policyErrors) {
return true;
}
问题是服务器永远不会验证证书,并且会因上述错误而失败。 有谁知道我该怎么办?
我应该提到,一个同事和我几周前进行了测试,并且与我上面写的类似,它运行良好。 我们发现的唯一“主要区别”是我使用的是Windows 7,而他使用的是Windows XP。 这会有所改变吗?
#1楼
另一种可能是包装盒上的证书输入不正确。 确保选中带圆圈的复选框。 最初我没有这样做,所以代码要么超时要么抛出与找不到私钥相同的异常。

#2楼
如您所知,可能有很多原因。 以为我会补充我遇到的原因...
如果将WebRequest.Timeout
的值设置为0
,则抛出此异常。 下面是我的代码...(除了将超时值硬编码为0
,我有一个参数意外地设置为0
)。
WebRequest webRequest = WebRequest.Create(@"https://myservice/path");
webRequest.ContentType = "text/html";
webRequest.Method = "POST";
string body = "...";
byte[] bytes = Encoding.ASCII.GetBytes(body);
webRequest.ContentLength = bytes.Length;
var os = webRequest.GetRequestStream();
os.Write(bytes, 0, bytes.Length);
os.Close();
webRequest.Timeout = 0; //setting the timeout to 0 causes the request to fail
WebResponse webResponse = webRequest.GetResponse(); //Exception thrown here ...
#3楼
如果服务器正在对HTTP请求返回HTTP 401未经授权的响应,则会发生“请求已中止:无法创建SSL / TLS安全通道”异常。
您可以通过打开客户端应用程序的跟踪级System.Net日志记录来确定是否正在发生这种情况,如本答案所述 。
设置好日志记录后,运行应用程序并重现错误,然后在日志记录输出中查找如下所示的行:
System.Net Information: 0 : [9840] Connection#62912200 - Received status line: Version=1.1, StatusCode=401, StatusDescription=Unauthorized.
在我的情况下,我无法设置服务器期望的特定cookie,从而导致服务器以401错误响应请求,从而导致“无法创建SSL / TLS安全通道”异常。
#4楼
我在尝试访问https://ct.mob0.com/Styles/Fun.png时遇到了这个问题,这是CloudFlare在CDN上分发的图像,该图像支持诸如SPDY和奇怪的重定向SSL证书之类的疯狂东西。
而不是像Simons答案中那样指定Ssl3,我可以通过像这样下降到Tls12来修复它:
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;
new WebClient().DownloadData("https://ct.mob0.com/Styles/Fun.png");
#5楼
只要这是一个相对“实时”的链接,我就想添加一个新选项。 这种可能性是由于Poodle攻击的问题,该服务不再支持SSL 3.0。 查看有关此内容的Google声明。 我一次在几个Web服务上遇到了这个问题,意识到必须继续进行下去。 我切换到TLS 1.2,一切又恢复了。
http://googleonlinesecurity.blogspot.com/2014/10/this-poodle-bites-exploiting-ssl-30.html
来源:oschina
链接:https://my.oschina.net/stackoom/blog/3187748