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;
}
Run Code Online (Sandbox Code Playgroud)
问题是服务器永远不会验证证书并因上述错误而失败.有谁知道我该怎么办?
我应该提到一位同事和我几周前进行了测试,并且它与我上面写的内容类似.我们发现的唯一"主要差异"是我使用的是Windows 7并且他使用的是Windows XP.这有什么改变吗?
我正在尝试使用自签名证书建立与测试服务器的 SSL/TLS连接.通过不安全的渠道进行沟通没有问题.
这是我的示例代码,我是基于这个解决方案编写的: 使用HttpClient C 允许不受信任的SSL证书#忽略证书错误?.NET客户端连接到ssl Web API
ServicePointManager.ServerCertificateValidationCallback += (sender, cert, chain, sslPolicyErrors) => true;
var c = new HttpClient();
var r = c.GetAsync("https://10.3.0.1:8443/rest/v1").Result;
if (r.IsSuccessStatusCode)
{
Log.AddMessage(r.Content.Get<string>());
}
else
{
Log.AddMessage(string.Format("{0} ({1})", (int)r.StatusCode, r.ReasonPhrase));
}
Run Code Online (Sandbox Code Playgroud)
还试过这个:
var handler = new WebRequestHandler();
handler.ServerCertificateValidationCallback = delegate { return true; };
var c = new HttpClient(handler);
...
Run Code Online (Sandbox Code Playgroud)
还有这个
ServicePointManager.ServerCertificateValidationCallback = delegate { return true; };
Run Code Online (Sandbox Code Playgroud)
但每次我都有例外:
InnerException: System.Net.Http.HttpRequestException
_HResult=-2146233088
_message=An error occurred while sending the request. …Run Code Online (Sandbox Code Playgroud) 我支持一个.NET站点(其中很多,很多,其他东西)与供应商系统的远程API进行通信.
我们想升级以支持TLS 1.2我们希望按照这个问题这样做:是否有TLS 1.2的.NET实现?
但是,一旦我做出改变,我该如何检查这是否真的有效.
理想情况下,我的一个供应商网站将开始仅使用TLS 1.2 ,然后我的测试可能就是"我们现在可以与该供应商交谈吗?" 但我们没有那个.我猜我可以用某种类型的数据包嗅探器做一些事情,但我不知道我究竟在寻找什么,也不知道如何设置嗅探器以可读的方式收集必要的数据.
或者:
要么