Безопасные разработанные фреймворки ESP32 с обновлением по воздуху (OTA), шифрование флэш-шифрования, подписанная проверка фирмьюэра, MQTT и нелетущее хранилище. Его можно использовать для всех видов проектов разработки IoT, которые рассматривают безопасную базу. Для этого проекта используется esp-wroom-32.
Полное объяснение установки ESP-IDF для Windows Linux и Mac доступно на пошаговом руководстве по установке EsPressif. В этом проекте был последовал путь Linux с Ubuntu и Debian:
Предварительные условия:
sudo apt-get install git wget flex bison gperf python3 python3-pip python3-setuptools cmake ninja-build ccache libffi-dev libssl-dev dfu-util libusb-1.0-0
Скачать и установить:
mkdir -p ~/esp
cd ~/esp
git clone --recursive https://github.com/espressif/esp-idf.git
cd ~/esp/esp-idf
./install.sh
Используйте ESP-IDF (необходимо выполнять каждый раз, когда запускается новая оболочка):
. ~/esp/esp-idf/export.sh
Создайте папку для проекта и загрузите фреймворк ESP32 от GIT:
cd ~/esp
git clone https://github.com/flouflouit/secure_esp
Короткий список команд, которые необходимы для этого проекта. Все они должны быть выполнены в папке Project Project secure_esp .
SSID и пароль для Wi -Fi настроены в idf.py menuconfig в Example Connection Configuration или непосредственно в SDKConfig:
CONFIG_EXAMPLE_WIFI_SSID=""
CONFIG_EXAMPLE_WIFI_PASSWORD=""

Для сервера обновления и сертификатов брокера MQTT необходимо создать сертификаты. Таким образом, был реализован скрипт BASH SERTICATE_CREATION.SH. Если этот скрипт выполняется на брокере MQTT, сертификаты MQTT могут быть непосредственно скопированы в папку комаров. Переменная IP должна содержать IP -адрес сервера обновления и брокера MQTT, который необходимо отредактировать в скрипте.
. ~/esp/secure_esp/certificate_creation.sh
Этот сценарий генерирует следующую структуру дерева:

Кроме того, сценарий также копирует ключи и сертификаты в папку проекта ota_certs и mqtt_certs .
Процесс подписания прошивки нуждается в ключе подписания. Этот клавиш Siging создается с помощью OpenSSL, который необходимо выполнить в папке Project Project secure_esp :
openssl ecparam -name prime256v1 -genkey -noout -out ~/esp/secure_esp/secure_boot_signing_key.pem
Установка брокера для комаров, который выполняется на Ubuntu Server 20.04 LTS:
sudo apt-get install mosquitto
Установка клиента комара:
sudo apt-get install mosquitto-clients
После установки брокера комаров новый файл с именем secure.conf должен быть создан в папке: /etc/mosquitto/conf.d. Этот файл должен содержать следующую информацию:
listener 8883
cafile /etc/mosquitto/certs/ca.crt
certfile /etc/mosquitto/certs/server.crt
keyfile /etc/mosquitto/certs/server.key
require_certificate true
use_identity_as_username true
Скопируйте сертификаты ca.crt, server.crt и server.key, созданный с помощью сертификата_Реационирования.
После этого брокер должен быть перезапущен:
sudo systemctl restart mosquitto.service
Брокера можно проверить с подписанием темы и публикации сообщения на эту тему. IP должен быть изменен на IP -адрес брокера.
mosquitto_sub -h $IP -t "/test" -p 8883 -d --cert client.crt --key client.key --cafile ca.crt
mosquitto_pub -h $IP -t "/test" -m "test-message" -p 8883 -d --cert client.crt --key client.key --cafile ca.crt
SERTICATE_CREATION.SH создает папки MQTT_CERTS и OTA_CERTS. В этих папках сертификаты и ключи для обновления и сервера MQTT автоматически копируются из созданного каталога CA. После этого IP -адрес брокера MQTT должен быть настроен в исходном коде файла mqtt.c :

Мы используем MQTTS и Port 8883 для безопасного соединения по TLS.
/esp/update/url - опубликовать тему
mosquitto_pub -h $IP -t "/esp/update/url" -m "https://domain.de:8070/secure_esp.bin" -p 8883 -d --cert client.crt --key client.key --cafile ca.crt/esp/update/use_url - опубликовать тему
mosquitto_pub -h $IP -t "/esp/update/use_url" -m "1" -p 8883 -d --cert client.crt --key client.key --cafile ca.crt/ESP/Update/Interval - опубликовать тему
mosquitto_pub -h $IP -t "/esp/update/interval" -m "10000" -p 8883 -d --cert client.crt --key client.key --cafile ca.crt/esp/update/run - опубликовать тему
mosquitto_pub -h $IP -t "/esp/update/run" -m "" -p 8883 -d --cert client.crt --key client.key --cafile ca.crt/ESP/перезапуск - опубликовать тему
mosquitto_pub -h $IP -t "/esp/restart" -m "" -p 8883 -d --cert client.crt --key client.key --cafile ca.crt/esp/log - подписаться тема
mosquitto_sub -h $IP -t "/esp/log" -p 8883 -d --cert client.crt --key client.key --cafile ca.crt Версия прошивки обновлений должна быть выше, чем работающая версия прошивки. Вот почему номер версии должен быть увеличен в файле sdkconfig в CONFIG_APP_PROJECT_VER , прежде чем создавать проект для обновления OTA. В качестве альтернативы это может быть сделано idf.py menuconfig в рамках менеджера приложений: 
URL -адрес обновления прошивки может быть изменен в idf.py menuconfig в разделе «Конфигурация примера» или в файле sdkconfig: CONFIG_EXAMPLE_FIRMWARE_UPGRADE_URL

Во время процесса сборки прошивка подписана в цифровом виде с помощью secure_boot_signing_key.pem:
idf.py build
После выполнения этой команды двоичный прошивка можно найти в рамках: ~/esp/secure_esp/build/secure_esp.bin
Если еще не сделано, сгенерируйте файлы update_cert.pem и update_cert.pem с помощью скрипта сертификата_Реационирования.sh.
После этого эти файлы должны быть скопированы в одной папке с бинарной прошивкой. Для запуска сервера обновления используется следующая команда:
openssl s_server -WWW -key update_key.pem -cert update_cert.pem -port 8070
Для кодирования приложения для этого проекта приложение Blink включено в код. Этот пример приложения можно найти в файле secure_esp.c . Он будет выполнен основным процессом и работает в бесконечной цикле. Для примера Blink светодиод определяется на PIN 9 GPIO. Он выключается и снова через одну секунду. В этом примере показано, как включить базовое приложение в secure_esp:

В этом проекте включена флэш-инкраифрование. Начальная вспышка должна быть сделана с помощью обычной команды Flash:
idf.py -p [port] flash monitor
После этого ESP32 можно вспыхнуть только с помощью зашифрованной команды:
idf.py -p [port] encrypted-flash monitor
Если происходит следующее сообщение об ошибке, полезно нажать кнопку загрузки на ESP32 во время мигания:
