Безопасный HTTPS-запрос не выполняется в 90 % случаев.

Я использую NodeMCU, подключенный к корпоративной сети в школе. Информация, предоставленная в запросах GET, которые отправляет ESP8266, является конфиденциальной, поэтому, естественно, мы хотим сделать ее безопасной и зашифрованной — введите SSL. Делаем запрос так;

HTTPClient http.begin(url, thumbprint)

Однако в сети в школе этот запрос не выполняется в 90 % случаев, поэтому я провел несколько тестов — 100 запросов к одному и тому же IP-адресу и сертификату, отметив, сколько из них было выполнено;

  • Школьная сеть
    • HTTPS запросы: 10 из 100 успешных [10%]
    • HTTP-запросы: 100/100 успешных [100%]
  • Частная домашняя сеть
    • HTTPS запросы: 100/100 успешных [100%]
    • HTTP-запросы: 100/100 успешных [100%]

Мы также попытались использовать класс WiFiClient, и хотя 100 % запросов прошли, каждый из них занимал 15 секунд, что слишком долго.

Мой вопрос: в чем может быть проблема, и что мы можем сделать, чтобы исправить это? Могу ли я что-то сделать в коде или в сети?

, 👍1

Обсуждение

Вы получаете сообщения об ошибках?, @Gerben

@Gerben Нет ошибок стека, ответ ничего не содержит, а код HTTP - -11., @Albert MN.

Ваша школа, вероятно, использует прокси-сервер, который пытается отфильтровать фишинговые сайты или что-то в этом роде. Возможно, он работает быстро только для доменов из белого списка., @Dmitry Grigoryev

Я спросил об этом, и мне сказали, что ничто не блокирует мой сайт. Опять же, это работает в 10% случаев. Сказали, что брандмауэра нет..., @Albert MN.

Вы пытались увеличить время ожидания (HTTPClient.setTimeout), пока не добьетесь 100% успеха?, @Craig

@Крейг не думал об этом! Запросы на самом деле выполняются в 100% случаев (только сейчас с тайм-аутом 100000), так что это здорово! Хотя каждый запрос занимает около 4,5 секунд по сравнению с 300 мс, которые занимают незащищенные запросы. Но я возьму! Опубликуйте это как ответ, и я приму его., @Albert MN.

Что касается того, почему существует разница между двумя сетями, я не уверен. Я бы поднял уровень журнала на вашем сервере и посмотрел, указывает ли это на проблему., @Craig

вам следует рассмотреть ESP32, если вам нужно делать быстрые HTTPS-запросы от MCU, @dandavis


1 ответ


Лучший ответ:

2

Увеличьте время ожидания для вашего запроса с помощью HTTPClient.setTimeout(). Обратите внимание, что время ожидания указано в миллисекундах.

HTTPClient http;
http.setTimeout(15000); // 15 секунд
http.begin(url, thumbprint);
,