• Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

ESP8266 + SSL

alfik777

Member
Сразу оговорюсь, что ESP8266 ещё в руках не держал даже. Но стоИт задача, состоящая из нескольких частей, одной из которых является работа устройства в качестве клиента, которое должно отправлять POST-запрос по HTTPS. В DS поддержки https не нашел, но какие-то библиотеки для ардуины IDE проскакивали - не знаю то ли это что мне надо... Подскажите, стоит ли покупать этот модуль и разбираться с ним, получится реализовать на нем поддержку ssl и отправку https-запроса на сайты в инете?
 

pvvx

Активный участник сообщества
Сразу оговорюсь, что ESP8266 ещё в руках не держал даже. Но стоИт задача, состоящая из нескольких частей, одной из которых является работа устройства в качестве клиента, которое должно отправлять POST-запрос по HTTPS. В DS поддержки https не нашел, но какие-то библиотеки для ардуины IDE проскакивали - не знаю то ли это что мне надо... Подскажите, стоит ли покупать этот модуль и разбираться с ним, получится реализовать на нем поддержку ssl и отправку https-запроса на сайты в инете?
На общие вопросы ответов нет - можно сказать и "да" и "нет" - всё будет верно.
Если надо на любые HTTPS - то нет. Если с фиксированными ключами - то да. :)
Для полной поддержки SSL - ESP8266 слабоват.
 

alfik777

Member
Фиксированные ключи - я так понимаю возможно реализовать отправляя запросы только на свой сервер, на котором "вбить" эти ключи? Т.е. при запросе на любой другой сайт ( даже если это будет постоянно одна и та же ссылка) эти ключи будут меняться с каждой сессией - правильно?
 

pvvx

Активный участник сообщества
Фиксированные ключи - я так понимаю возможно реализовать отправляя запросы только на свой сервер, на котором "вбить" эти ключи? Т.е. при запросе на любой другой сайт ( даже если это будет постоянно одна и та же ссылка) эти ключи будут меняться с каждой сессией - правильно?
Там море зависимостей и типов... :) К примеру либы mbed TLS (PolarSSL) или другие, почти полноценные, имеют немалые размеры и запросы памяти...
В итоге на ESP8266 "не всё и не всегда" c HTTPS. На RTL8710 ситуация почти аналогична. Что будет в ESP32S - неизвестно, но сильно более RTL8710 не будет...
 
Последнее редактирование:

alfik777

Member
Т.е. использовать esp8266 для этих целей не получится. А какие варианты? Использовать как транзит свой сервер, но это крайний вариант. ESP32 ?
 

pvvx

Активный участник сообщества
Т.е. использовать esp8266 для этих целей не получится.
Почему не получиться? Народ как-то пользует... Всё зависит от задачи и требуемого уровня "шифрования".
Я вообще не вижу смысла в шифровании. :)
Купите сертификат на ключ и вперед :)
Это игра такая, до новой дырки и прочих выдумок. Один браузер поддерживает, другой нет - целая индустрия рекламы :)
Сделают общеподдерживаемое - сразу выйдет что-то новое, что будет работать только на другом (их оборудовании)...

----
Как раз сижу и борюсь c поглощением памяти при HTTPS:
Код:
HEAP: Alloc 12632 failed!
HEAP: Alloc 264 failed!
HEAP: Alloc 272 failed!
HEAP: Alloc 272 failed!
HEAP: Alloc 528 failed!
HEAP: Alloc 528 failed!
HEAP: Alloc 528 failed!
HEAP: Alloc 264 failed!
HEAP: Alloc 536 failed!
HEAP: Alloc 272 failed!
HEAP: Alloc 528 failed!
HEAP: Alloc 272 failed!
HEAP: Alloc 528 failed!
HEAP: Alloc 248 failed!
HEAP: Alloc 248 failed!
HEAP: Alloc 352 failed!
HEAP: Alloc 352 failed!
HEAP: Alloc 80 failed!
ERROR: ssl_handshake ret(-0x7780)
 
Последнее редактирование:

alfik777

Member
.... Народ как-то пользует... Всё зависит от задачи и требуемого уровня "шифрования".
Я вообще не вижу смысла в шифровании. :)
Купите сертификат на ключ и вперед :)
Это игра такая, до новой дырки и прочих выдумок. Один браузер поддерживает, другой нет - целая индустрия рекламы :)
Сделают общеподдерживаемое - сразу выйдет что-то новое, что будет работать только на другом (их оборудовании)...
"Народ как-то пользует..." Вот услышать бы его... Это не моя прихоть - мне поставлена задача - отправлять запрос по HHTPS, т.е. об уровне шифрования речь не идёт, так что, думаю, подойдут любые варианты, примеры ..
 

pvvx

Активный участник сообщества

alfik777

Member
Вы можете представить, что ESP8266 будет проверять сертификаты на других сайтах, как это делает эксплорер?
Нет, не могу представить, поэтому и обратился сюда. Хотя выше Вы говорили
Почему не получиться? Народ как-то пользует...
Я не прошу конкретного решения (пока:)), мне бы определиться смогу ли я осуществить в принципе эту задачу на ESP8266 или нет, стОит ли мне покупать модуль и какой или искать какие-то другие пути.
 

lsm

Разработчик Smart.js
Команда форума
Задача вполне решаема.

Прошивка Мангуст, Mongoose IoT , умеет TLS1.2

Тут пример с Amazon AWS IoT, который использует 2-way SSL (клиентский сертификат): mongoose-iot/fw/examples/c_mqtt at master · cesanta/mongoose-iot · GitHub . Можно кстати его использовать и с другими MQTT серверами, необязательно AWS IoT. В этом конкретном примере используется наша экспериментальная TLS библиотека Криптон GitHub - cesanta/krypton: Embedded TLS/DTLS library, source and binary compatible OpenSSL subset .

Мангуст может также использовать mbed TLS от ARM (специально оптимизированный для ESP8266), опционально с крипто чипом от Atmel (ECC508A), который позволяет защитить приватные ключи. mbedTLS и/или Atmel ECC508A требуют коммерческой лицензии.

Disclaimer: я являюсь одним из разработчиков Mongoose Firmware.
 

pvvx

Активный участник сообщества
Задача вполне решаема.
Народ требует расписать как и что решаемо и на каком модуле...
Я не силен в специализированных словах, названиях и прочей иерархии структур для TSL/SSL.
Мангуст может также использовать mbed TLS от ARM (специально оптимизированный для ESP8266), опционально с крипто чипом от Atmel (ECC508A), который позволяет защитить приватные ключи. mbedTLS и/или Atmel ECC508A требуют коммерческой лицензии.
Тут тоже коммерческая лицензия? esp-idf/components/mbedtls at master · espressif/esp-idf · GitHub
 

lsm

Разработчик Smart.js
Команда форума
Не в курсе что делают Espressif или другие с mbedTLS и под какой лицензией. Знаю что mbedTLS из упаковки на ESP8266 не работает, так как у ESP8266 слишком мало ресурсов. Наш форк - работает.

На ESP32 ресурсов больше, и mbedTLS заводится без проблем.

mbedTLS для каждого соединения выделяет по 16к RAM для входящего и выходящего TLS буфера. то есть сразу 32k вынь да положь. Это одна из причин почему mbedTLS из упаковки на esp8266 не работает, и почему даже на ESP32 будет ограничение по кол-ву TLS соединений.
 
Последнее редактирование:

pvvx

Активный участник сообщества
mbedTLS для каждого соединения выделяет по 16к RAM для входящего и выходящего TLS буфера. то есть сразу 32k вынь да положь. Это одна из причин почему mbedTLS из упаковки на esp8266 не работает, и почему даже на ESP32 будет ограничение по кол-ву TLS соединений.
Там больше, чем 16 кило. Ещё разметка и другие структуры входят к этим буферам на 16 кило...
На RTL8710AF при одном клиенте HTTPS всё это спокойно вписывается, а в ESP8266 никак не лезет :(
 

pvvx

Активный участник сообщества
Если брать, к примеру, обычную задачу - Foto-рамка - модуль + TFT, то и распределение задач по последовательному использовании Heap не всегда помогает из-за дефрагментации. На развертку к примеру PNG, тоже нужны большие непрерывные буфера (большие сегменты по 32 кило). Сам клиент соединения тоже держит какие-то буфера. Выходит, что и в ESP32 это тоже проблематично.
Пока удалось выводить только "банеры" c HTTPS на RTL8710 - иконки на TFT дисплей 128x160 :) В качестве информера - покатит.
Надо переделывать на оверлейное исполнение - это даст большое увеличение объема свободной памяти для задач на архитектурах MCU с исполнением задач из RAM, где можно работать последовательно: Загрузить модуль WiFi, соединиться и считать HTTPS сжатый файл, отключить-выгрузить модули WiFi и все соединения, развернуть принятый контекст....
 
Последнее редактирование:

shuraf

Member
Настроил Mosquitto с сертификатами TLS полученными с помощью OpenSSL.
Проверяю работу с помощью spyMQTT. Работает только когда ключик подсунешь.
ESP8266 делаю скетч Arduino IDE. Использую WiFiClientSecure(). И она без проблем цепляется и пишет топики.
Как так?
Почему?
 

pvvx

Активный участник сообщества
Настроил Mosquitto с сертификатами TLS полученными с помощью OpenSSL.
Проверяю работу с помощью spyMQTT. Работает только когда ключик подсунешь.
ESP8266 делаю скетч Arduino IDE. Использую WiFiClientSecure(). И она без проблем цепляется и пишет топики.
Как так?
Почему?
С вышедшими из употребления 128 битными ключами ещё работает WiFiClientSecure(), а по новым всепринятым стандартам в инет - уже нет.
В принципе можно работать и без TLS :) Ищите поддержку старых вариантов.

Например, стандарт PCI DSS потребует, чтобы все сайты, принимающие платежи по кредитным картам, удалили поддержку TLS v1.0 к июню 2018 года.

Ну и подобные давно введенные стандарты не дают возможность даже отослать почту с ESP8266...
Попробуйте считать своим клиентом, что попроще, к примеру с https Яндекс :)
Алгоритмы, использующиеся в TLS
Отказ от SHA1. Переход на SHA256 в SSL сертификатах
 
Последнее редактирование:

shuraf

Member
Я понимаю, что TLS 1.1 уже не в почете. И москиту настаивал для 1.2, хотя мог и накосячить.
Мне не понятен сам принцип, по которому сервер с москитой разрешает подключаться еспешке не требуя ключей и сертификатов.
 
Сверху Снизу