Server Error: The request was aborted: Could not create SSL/TLS secure channel
Server Error: The request was aborted: Could not create SSL/TLS secure channel
我在向 cloudflare 上的 https 端点发出请求时收到错误 The request was aborted: Could not create SSL/TLS secure channel.
。
代码:
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;
var wc = new WebClient();
var json = wc.DownloadString("https://cloudflare.com");
Console.Write(json);
这是 Stack 上的一个常见问题,将 ServicePoint 设置为 TLS12 可解决此问题。这在本地为我修复了它。但是,每当我将代码提升到服务器时,错误都会回来(而且我肯定我的代码更改已应用。)如果我删除 https 并使用 http 它工作正常。
经过大量搜索,我找到了这个知识库文章:https://support.microsoft.com/en-us/kb/3109853 我在 Server1 上安装了它,但它没有解决问题。
有人知道还有什么可以尝试的吗?服务器环境一定有什么原因导致了这种情况。它在 .Net fixes/security 更新中是最新的。
[WebException: The request was aborted: Could not create SSL/TLS secure channel.]
System.Net.HttpWebRequest.EndGetResponse(IAsyncResult asyncResult) +823
System.Net.Http.HttpClientHandler.GetResponseCallback(IAsyncResult ar) +84
[HttpRequestException: An error occurred while sending the request.]
System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) +181
System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) +66
System.Runtime.CompilerServices.TaskAwaiter.ValidateEnd(Task task) +30
TrackerBase.Controllers.<Verify>d__0.MoveNext() +535
System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) +181
System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) +66
System.Runtime.CompilerServices.TaskAwaiter.ValidateEnd(Task task) +30
lambda_method(Closure , Task ) +40
System.Web.Mvc.Async.TaskAsyncActionDescriptor.EndExecute(IAsyncResult asyncResult) +76
System.Web.Mvc.Async.<>c__DisplayClass3f.<BeginInvokeAsynchronousActionMethod>b__3e(IAsyncResult asyncResult) +21
System.Web.Mvc.Async.AsyncControllerActionInvoker.EndInvokeActionMethod(IAsyncResult asyncResult) +42
System.Web.Mvc.Async.<>c__DisplayClass39.<BeginInvokeActionMethodWithFilters>b__33() +80
System.Web.Mvc.Async.<>c__DisplayClass4f.<InvokeActionMethodFilterAsynchronously>b__49() +386
System.Web.Mvc.Async.AsyncControllerActionInvoker.EndInvokeActionMethodWithFilters(IAsyncResult asyncResult) +42
System.Web.Mvc.Async.<>c__DisplayClass2a.<BeginInvokeAction>b__20() +30
System.Web.Mvc.Async.<>c__DisplayClass25.<BeginInvokeAction>b__22(IAsyncResult asyncResult) +185
System.Web.Mvc.Async.AsyncControllerActionInvoker.EndInvokeAction(IAsyncResult asyncResult) +900
System.Web.Mvc.Async.AsyncControllerActionInvoker.EndInvokeAction(IAsyncResult asyncResult) +1299
System.Web.Mvc.<>c__DisplayClass1d.<BeginExecuteCore>b__18(IAsyncResult asyncResult) +27
System.Web.Mvc.Async.<>c__DisplayClass4.<MakeVoidDelegate>b__3(IAsyncResult ar) +22
System.Web.Mvc.Controller.EndExecuteCore(IAsyncResult asyncResult) +43
System.Web.Mvc.Async.<>c__DisplayClass4.<MakeVoidDelegate>b__3(IAsyncResult ar) +22
System.Web.Mvc.Controller.EndExecute(IAsyncResult asyncResult) +38
System.Web.Mvc.<>c__DisplayClass8.<BeginProcessRequest>b__3(IAsyncResult asyncResult) +42
System.Web.Mvc.Async.<>c__DisplayClass4.<MakeVoidDelegate>b__3(IAsyncResult ar) +22
System.Web.Mvc.MvcHandler.EndProcessRequest(IAsyncResult asyncResult) +38
System.Web.CallHandlerExecutionStep.OnAsyncHandlerCompletion(IAsyncResult ar) +18
代码在 Windows 2012 年会失败并没有特别的原因,TLS 可用并默认打开(我在一些新的 2012R2 机器上测试了您的代码示例,因为我有点偏执: )).
这意味着您的特定服务器的配置有一些问题正在阻止使用 TLS 1.2 的连接。检查以下内容:
- 在注册表中,检查
HKLM\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols
。是否在 SSL 2.0 之外禁用(或什至提及)任何协议?
- 在服务器的事件日志中,在连接失败事件后是否有任何
Schannel
事件?
- 在服务器上,使用浏览器打开 https://cloudfare.com。右键单击,属性(假设是 IE),是否显示
TLS 1.2, AES with 128 bit encryption (High)
?如果不是,浏览器决定使用不同的协议,因为 TLS 1.2 在客户端系统上不可用。
我在向 cloudflare 上的 https 端点发出请求时收到错误 The request was aborted: Could not create SSL/TLS secure channel.
。
代码:
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;
var wc = new WebClient();
var json = wc.DownloadString("https://cloudflare.com");
Console.Write(json);
这是 Stack 上的一个常见问题,将 ServicePoint 设置为 TLS12 可解决此问题。这在本地为我修复了它。但是,每当我将代码提升到服务器时,错误都会回来(而且我肯定我的代码更改已应用。)如果我删除 https 并使用 http 它工作正常。
经过大量搜索,我找到了这个知识库文章:https://support.microsoft.com/en-us/kb/3109853 我在 Server1 上安装了它,但它没有解决问题。
有人知道还有什么可以尝试的吗?服务器环境一定有什么原因导致了这种情况。它在 .Net fixes/security 更新中是最新的。
[WebException: The request was aborted: Could not create SSL/TLS secure channel.]
System.Net.HttpWebRequest.EndGetResponse(IAsyncResult asyncResult) +823
System.Net.Http.HttpClientHandler.GetResponseCallback(IAsyncResult ar) +84
[HttpRequestException: An error occurred while sending the request.]
System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) +181
System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) +66
System.Runtime.CompilerServices.TaskAwaiter.ValidateEnd(Task task) +30
TrackerBase.Controllers.<Verify>d__0.MoveNext() +535
System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) +181
System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) +66
System.Runtime.CompilerServices.TaskAwaiter.ValidateEnd(Task task) +30
lambda_method(Closure , Task ) +40
System.Web.Mvc.Async.TaskAsyncActionDescriptor.EndExecute(IAsyncResult asyncResult) +76
System.Web.Mvc.Async.<>c__DisplayClass3f.<BeginInvokeAsynchronousActionMethod>b__3e(IAsyncResult asyncResult) +21
System.Web.Mvc.Async.AsyncControllerActionInvoker.EndInvokeActionMethod(IAsyncResult asyncResult) +42
System.Web.Mvc.Async.<>c__DisplayClass39.<BeginInvokeActionMethodWithFilters>b__33() +80
System.Web.Mvc.Async.<>c__DisplayClass4f.<InvokeActionMethodFilterAsynchronously>b__49() +386
System.Web.Mvc.Async.AsyncControllerActionInvoker.EndInvokeActionMethodWithFilters(IAsyncResult asyncResult) +42
System.Web.Mvc.Async.<>c__DisplayClass2a.<BeginInvokeAction>b__20() +30
System.Web.Mvc.Async.<>c__DisplayClass25.<BeginInvokeAction>b__22(IAsyncResult asyncResult) +185
System.Web.Mvc.Async.AsyncControllerActionInvoker.EndInvokeAction(IAsyncResult asyncResult) +900
System.Web.Mvc.Async.AsyncControllerActionInvoker.EndInvokeAction(IAsyncResult asyncResult) +1299
System.Web.Mvc.<>c__DisplayClass1d.<BeginExecuteCore>b__18(IAsyncResult asyncResult) +27
System.Web.Mvc.Async.<>c__DisplayClass4.<MakeVoidDelegate>b__3(IAsyncResult ar) +22
System.Web.Mvc.Controller.EndExecuteCore(IAsyncResult asyncResult) +43
System.Web.Mvc.Async.<>c__DisplayClass4.<MakeVoidDelegate>b__3(IAsyncResult ar) +22
System.Web.Mvc.Controller.EndExecute(IAsyncResult asyncResult) +38
System.Web.Mvc.<>c__DisplayClass8.<BeginProcessRequest>b__3(IAsyncResult asyncResult) +42
System.Web.Mvc.Async.<>c__DisplayClass4.<MakeVoidDelegate>b__3(IAsyncResult ar) +22
System.Web.Mvc.MvcHandler.EndProcessRequest(IAsyncResult asyncResult) +38
System.Web.CallHandlerExecutionStep.OnAsyncHandlerCompletion(IAsyncResult ar) +18
代码在 Windows 2012 年会失败并没有特别的原因,TLS 可用并默认打开(我在一些新的 2012R2 机器上测试了您的代码示例,因为我有点偏执: )).
这意味着您的特定服务器的配置有一些问题正在阻止使用 TLS 1.2 的连接。检查以下内容:
- 在注册表中,检查
HKLM\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols
。是否在 SSL 2.0 之外禁用(或什至提及)任何协议? - 在服务器的事件日志中,在连接失败事件后是否有任何
Schannel
事件? - 在服务器上,使用浏览器打开 https://cloudfare.com。右键单击,属性(假设是 IE),是否显示
TLS 1.2, AES with 128 bit encryption (High)
?如果不是,浏览器决定使用不同的协议,因为 TLS 1.2 在客户端系统上不可用。