Не удалось создать безопасный канал SSL / TLS только на Windows Server 2012 - PullRequest
0 голосов
/ 30 января 2020

У меня есть особая проблема, когда приложение c# работает на всех других машинах и других клиентских машинах, которые я тестировал. Но не устанавливает sh соединение на моих клиентах Windows Server 2012, размещенное его провайдером. Это приложение работало до 2 дней go на этой машине в соответствии с моим клиентом и использует .Net4.5.2. Я не знаю, что изменилось за последние пару дней, к сожалению.

Что я тестировал на этой машине:

  • Использование Chrome URL работает
  • Используя Edge, URL работает
  • , ударяя по URL с помощью curl works
  • Используя IE11, URL не работает
  • Используя наше приложение не работает
  • Использование приложения для быстрого тестирования не работает

Это то же самое, независимо от того, какие настройки я изменяю на сервер или приложение.

Ошибка моего приложения:

AuthResponse is null: False 
AuthResponse ErrorException: System.Net.WebException: The request was aborted: Could not create SSL/TLS secure channel.
   at System.Net.HttpWebRequest.GetRequestStream(TransportContext& context)
   at System.Net.HttpWebRequest.GetRequestStream()
   at RestSharp.Http.WriteRequestBody(HttpWebRequest webRequest)
   at RestSharp.Http.PostPutInternal(String method)
   at RestSharp.Http.AsPost(String httpMethod)
   at RestSharp.RestClient.DoExecuteAsPost(IHttp http, String method)
   at RestSharp.RestClient.Execute(IRestRequest request, String httpMethod, Func`3 getResponse)
AuthResponse ErrorMessage: The request was aborted: Could not create SSL/TLS secure channel.

Ошибка IE11:

Turn on TLS 1.0, TLS 1.1, and TLS 1.2 in Advanced settings and try connecting to  again. If this error persists, it is possible that this site uses an unsupported protocol or cipher suite such as RC4 (link for the details), which is not considered secure. Please contact your site administrator.

Ошибки из средства просмотра событий:

A fatal alert was received from the remote endpoint. The TLS protocol defined fatal alert code is 40.
A fatal alert was generated and sent to the remote endpoint. This may result in termination of the connection. The TLS protocol defined fatal error code is 40. The Windows SChannel error state is 1205.
A fatal error occurred while creating an SSL client credential. The internal error state is 10013.

В средстве просмотра событий много таких ошибок, я просто скопировал три из них на случай, если они действительно актуальны.

Что я пробовал:

Я использовал IISCrypto , чтобы изменять и настраивать всевозможные настройки и тестирование между ними. Все с одинаковыми результатами. Я изменил свое приложение с помощью нескольких изменений, которые я нашел, выполнив поиск с одинаковыми результатами. Некоторые из изменений кода, которые я сделал ниже:

System.Net.ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls12;
ServicePointManager.Expect100Continue = true;
System.Net.ServicePointManager.ServerCertificateValidationCallback += (sender, cert, chain, sslPolicyErrors) => true;

Это не все изменения, которые я пробовал. Я попробовал все виды различных вариантов, таких как только tls1.2. Я также использовал свое маленькое тестовое приложение для подключения к другим https-сайтам, таким как Google и другие службы отдыха, и об этом компьютере не сообщается об ошибке.

Наш сервер аутентификации использует сертификаты Lets Encrypts и использует OAth и принимает только tls2.1. Я ударил другой REST Api, который мы используем, который также использует Lets Encrypt, и это работает. Я не знаю, нужно ли мне обновить хранилище сертификатов (если это возможно) или мне не хватает настроек. Честно говоря, я в растерянности.

Проверьте источник приложения, если это вообще поможет:

static async Task test(string url)
{
    // Call asynchronous network methods in a try/catch block to handle exceptions.
    try
    {
        HttpClient httpClient = new HttpClient();
        ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;

        ServicePointManager.ServerCertificateValidationCallback += (sender, cert, chain, sslPolicyErrors) => true;

        var result = await httpClient.GetAsync(url);
        MessageBox.Show(result.StatusCode.ToString());
    }
    catch (HttpRequestException e)
    {
        MessageBox.Show(e.ToString());
    }
}

1 Ответ

1 голос
/ 30 января 2020

У нас была такая же проблема сегодня. Вчера на нашем веб-сервере были удалены некоторые небезопасные наборы шифров. Несмотря на уязвимость, добавление этих наборов шифров решило проблему. https://docs.microsoft.com/en-us/windows-server/security/tls/manage-tls

Вот список наборов шифров: https://support.microsoft.com/en-us/help/2929781/update-adds-new-tls-cipher-suites-and-changes-cipher-suite-priorities

Список поддерживаемых наборов шифров: https://docs.microsoft.com/nl-nl/windows/win32/secauthn/prioritizing-schannel-cipher-suites?redirectedfrom=MSDN#listing -поддерживается -cipher-люкс

...