Что может вызвать исключение" алгоритм ключа сертификата не поддерживается " в веб-запросе GET
мы пытаемся подключиться к api facebook из приложения asp .net MVC 4.6 с помощью стандартного webrequest. Все отлично работает на всех серверах, кроме одного. На рассматриваемом сервере работают windows 2012 и IIS 8.
на этом конкретном сервере мы получаем следующее исключение при запуске GET webrequest для facebook.
алгоритм ключа сертификата не поддерживается.
Description: необработанное исключение произошло во время исполнение текущего веб-запроса. Просмотрите трассировку стека для получения дополнительной информации сведений об ошибке и где было задано в коде.
Сведения Об Исключении: System.NotSupportedException: ключ сертификата алгоритм не поддерживается.
Ошибка Источник:
необработанное исключение во время выполнения текущего веб-запроса. Информация о происхождении и местонахождении исключение можно определить использование трассировки стека исключений ниже.
Трассировка Стека:
[NotSupportedException: алгоритм ключа сертификата не поддерживаемый. Система].Чистая.TlsStream.EndWrite(объекта iasyncresult asyncresult, к) + 409 система.Сеть.ConnectStream.WriteHeadersCallback (iasyncresult ar) +213
[WebException: базовое соединение было закрыто: неожиданное произошла ошибка при отправке.]
Системы.Чистая.Класса HttpWebRequest.Метода Endgetresponse(Объекта Iasyncresult параметр asyncResult) Система +894.Чистая.Протоколу HTTP.HttpClientHandler.GetResponseCallback(объекта iasyncresult АР) +92[HttpRequestException: произошла ошибка при отправке запроса.]
Система.Во время выполнения.ExceptionServices.ExceptionDispatchInfo.Throw() +32
Система.Во время выполнения.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification (Задача задач) системы +96.Во время выполнения.CompilerServices.TaskAwaiter`1.Метод getresult() +49
код выглядит так это:
// Request
private static async Task<T> Request<T>(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<T>();
return model;
}
}
}
мы здесь ломаем головы, почему это работает на всех, кроме одного из наших серверов.
есть ли у кого-нибудь идеи, что может вызвать эту ошибку и как ее устранить.
спасибо.
1 ответов
мне удалось реплицировать проблему, и это, похоже, ошибка в трассировке сети, которая вызывает X509Certificate2.ToString (true) должен быть установлен, какой стажер выдает исключение.
единственное решение, которое я нашел, - удалить всю систему.Раздел Dianositics, который отключит ведение журнала.