Что может вызвать исключение" алгоритм ключа сертификата не поддерживается " в веб-запросе 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, который отключит ведение журнала.