Исключение рукопожатия SSL для метода HTTP Get - ядро ​​ASP.NET 2.1 - PullRequest
0 голосов
/ 24 октября 2018

Я пытаюсь вызвать метод rest с asp.net core 2.1, но продолжаю получать исключение ssl, даже если я использую http в этом вызове.Код, который я использую:

public async Task<bool> SyncTickets()
    {
        try
        {
            HttpClient client = new HttpClient();
            var path = "http://testdesk.vmw.be:8082/helpdesk/WebObjects/Helpdesk.woa/ra/PriorityTypes?username=admin&apiKey=bJZw2jP8wgtyGXI736K6DfUiEjJYTLuqC8fGuOBN";
            Ticket ticket = new Ticket();
            HttpResponseMessage response = await client.GetAsync(path);
            if (response.IsSuccessStatusCode)
            {
                var responseMsg = await response.Content.ReadAsAsync<Object>();
                return true;
            }
            return false; 

        }
        catch (Exception e)
        {
            Console.WriteLine(e.ToString());
            return false;
        }

Исключение:

{System.Net.Http.HttpRequestException: Невозможно установить соединение SSL, см. Внутреннее исключение.---> System.IO.IOException: рукопожатие не выполнено из-за непредвиденного формата пакета

Исключение происходит при методе GetAsync.Когда я использую один и тот же путь для тестирования через почтальон или браузер, он работает отлично, я получаю ответ.

Есть идеи, что мне здесь не хватает?

1 Ответ

0 голосов
/ 24 октября 2018

Может быть, ваш сервер все равно требует шифрования и перенаправляет на https?

Если это так, и отчеты https все еще добавляются перед созданием HttpClient:

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

Это будет принимать все сертификаты. Этот параметр является глобальным для вашего приложения.НЕ ИСПОЛЬЗУЙТЕ ЕГО В ПРОИЗВОДСТВЕ. Если на вашем сервере используется самоподписанный сертификат или внутренний сертификат CA, используйте его только для тестирования. В производстве добавить надлежащую проверку внутреннего ЦС или принять только конкретный самозаверяющий сертификат .Браузеры могут иметь внутренние сертификаты или CA, добавленные на ПК с контроллера домена или с помощью групповой политики, и поэтому они не сообщают о них как недоверенные.

Кроме того, для https вы можете явно использовать протоколы TLS.Добавьте следующую строку перед созданием HttpClient и попробуйте снова:

System.Net.ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12 | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls;

Если вы определили набор протоколов на вашем сервере, вы можете сузить список протоколов, чтобы включить те, которые фактически поддерживаются.

...