什么可能导致GET Web请求上的“不支持证书密钥算法”exception

我们正在尝试使用标准webrequest从asp .net MVC 4.6应用程序连接到facebook api。 除了我们的一台服务器之外,一切都运行良好。 有问题的服务器正在运行Windows 2012和IIS 8。

在这个特定的服务器上,我们在向Facebook运行GET webrequest时会遇到以下exception。

不支持证书密钥算法。

描述:执行当前Web请求期间发生未处理的exception。 请查看堆栈跟踪以获取有关错误及其源自代码的位置的更多信息。

exception详细信息:System.NotSupportedException:不支持证书密钥算法。

来源错误:

在执行当前Web请求期间生成了未处理的exception。 可以使用下面的exception堆栈跟踪来识别有关exception的起源和位置的信息。

堆栈跟踪:

[NotSupportedException:不支持证书密钥算法。] System.Net.TlsStream.EndWrite(IAsyncResult asyncResult)+409 System.Net.ConnectStream.WriteHeadersCallback(IAsyncResult ar)+213

[WebException:底层连接已关闭:发送时发生意外错误。]
System.Net.HttpWebRequest.EndGetResponse(IAsyncResult asyncResult)+894 System.Net.Http.HttpClientHandler.GetResponseCallback(IAsyncResult ar)+92

[HttpRequestException:发送请求时发生错误。]
System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()+ 32
System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)+96 System.Runtime.CompilerServices.TaskAwaiter`1.GetResult()+49

代码如下所示:

// Request private static async Task Request(string url) where T : class { using (var handler = new WebRequestHandler()) { handler.ServerCertificateValidationCallback = delegate { return true; }; using (var client = new HttpClient(handler) { Timeout = System.TimeSpan.FromSeconds(20) }) { client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json")); var result = await client.GetAsync(url); if (result == null) return null; var model = await result.Content.ReadAsAsync(); return model; } } } 

我们正在摸索为什么它适用于除我们的一台服务器之外的所有服务器。

有没有人有任何想法可能导致此错误以及如何解决它。

谢谢。

我设法复制问题,它似乎是网络跟踪中的错误导致X509Certificate2.ToString(true)被设置为实习生抛出exception。

我找到的唯一解决方案是删除整个’System.Dianositics’部分,它将禁用日志记录。