Запрос был прерван: не удалось создать безопасный канал SSL / TLS

Я изучаю систему приложений, которые я не создавал и для которой нет документации. Я пытаюсь сделать из него запрос api, который терпит неудачу. Ивер пробовал два разных способа: один - с помощью Microsoft HttpClient, а другой - с помощью библиотеки RestSharp. Оба работают, когда я запускаю их вне приложения. Только из CH Fiddler или тестового приложения, которое я создаю только для отладки.

Что может быть в приложении, которое останавливает звонок и почему?

Я получаю ошибку:

WebException: The request was aborted: Could not create SSL/TLS secure channel.

Метод первый:

  var client = new HttpClient();
        var clientResponse = client.GetStringAsync("https://xkcd.com/info.0.json").Result;
        var clientJson = JsonConvert.DeserializeObject<dynamic>(clientResponse);
        var imgUrl = clientJson.img;

Метод второй

    var restClient = new RestClient();
        restClient.BaseUrl = "https://xkcd.com";

        var request = new RestRequest();
        request.Resource = "/info.0.json";

        var response = restClient.Execute<dynamic>(request);

        // json["alt"] json["img"] eller json.img
        var json = JsonConvert.DeserializeObject<dynamic>(response.Content);
        var x = json.img;

Приложение работает под управлением net 4.5.

Это означает (и вы можете довольно широко использовать эту ошибку в Google), что для домена, где размещен API, не установлен действующий сертификат SSL (или, возможно, есть какой-то сертификат, но машина, на которой работает ваш клиент, не доверяет ему). Проверьте, действительно ли API поддерживает HTTPS или нет, и правильный ли сертификат. Попытка получить к нему доступ через браузер может дать вам визуальное представление

ADyson 30.05.2018 11:48

Спасибо! Я пытаюсь понять, почему это проблема в этом приложении, а не в других.

Daarwin 30.05.2018 11:53

Под «другими» вы имеете в виду другие API-интерфейсы или других клиентов, которые вызывают тот же API? Если первое, это зависит от того, имеют ли эти «другие» (какими бы они ни были и где бы они ни размещались) действительный сертификат SSL, связанный с ними в конфигурации веб-сервера, или нет. В последнем случае, возможно, эти программы выполняют свои HTTP-запросы по-другому. Я ничего этого не вижу, поэтому могу только догадываться и строить предположения. Очень сложно заметить различия в вещах, которые вы не видите. Вы видели какие-нибудь из этих других приложений? Если да, то вы можете легко найти разницу ...

ADyson 30.05.2018 12:04

Я имел в виду, почему это приложение заботится о SSL, а почему другие нет. Думаю, есть конфигурация.

Daarwin 30.05.2018 12:06

что именно вы имеете в виду "заботится о SSL"? Все веб-приложения, обслуживаемые по HTTPS (вместо HTTP), должны «заботиться» о SSL, как и клиенты, которые к ним подключаются. Я имею в виду это в том смысле, что должен быть действующий сертификат SSL, предоставленный веб-сервером, который используется для проверки шифрования, размещенного в запросе, которому доверяют как сервер, так и клиент. Вы много знаете о SSL / HTTPS в целом?

ADyson 30.05.2018 12:06

Нет. Каждый раз, когда я создаю новый проект в Visual Studio или запускаю код из C# Fiddler, он работает. Та же просьба.

Daarwin 30.05.2018 12:08

А если это не сработает, выполняете ли вы запрос каким-либо другим способом и / или с другого компьютера? Пожалуйста, будьте ясны и конкретны. Если это так, то наиболее вероятная проблема заключается в том, что другой компьютер или другой контекст безопасности не могут прочитать или не распознают сертификат SSL API.

ADyson 30.05.2018 12:09

Вы также можете просмотреть различные предыдущие статьи по этой теме, если это поможет: google.co.uk/…

ADyson 30.05.2018 12:13

Хорошо спасибо. Все делалось с одного компьютера, с одним и тем же кодом, с одним и тем же вызовом, с одним и тем же адресом.

Daarwin 30.05.2018 12:15

так каковы конкретные обстоятельства, при которых это работает, а при каких нет? Мне это не понятно. Вы упомянули, что он работает, если вы запускаете его из Visual Studio или из C# Fiddle. В каких именно обстоятельствах работает не?

ADyson 30.05.2018 12:19

Он не работает в конкретном приложении asp.net, которое я запускаю из Visual Studio. Он работает, если я создаю новое приложение asp.net в vs и запускаю код. Он работает, если я запускаю код из скрипки C#. В основном это работает везде, кроме приложения, которое я не создавал. Итак, я ищу подсказки, чтобы понять, что именно в приложении препятствует этому.

Daarwin 30.05.2018 12:22

возможно, это приложение работает под другим именем? Я все еще предполагаю, что в вашем приведенном выше коде нет ничего, что могло бы дать подсказку. Я действительно не могу найти для вас разницу. Возможно, возьмите копию этого приложения, сократите ее до минимума, удалив все, что не требуется, чтобы добраться до места, где происходит этот запрос, и посмотрите, сможете ли вы избавиться от того, что вызывает проблему. И / или попробуйте прочитать об этом предмете и посмотреть, сможете ли вы получить какие-либо подсказки о том, что вам нужно искать более конкретно. И еще кое-что: какая версия .NET framework запущена?

ADyson 30.05.2018 12:27
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
12
1 042
1

Ответы 1

вы также можете добавить эту строку перед выполнением любого запроса

ServicePointManager.SecurityProtocol = SecurityProtocolType.Ssl3 | SecurityProtocolType.Tls12 | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls;

Другие вопросы по теме