安全に設計されたESP32フレームワーク(OTA)、フラッシュ暗号化、署名されたFirmeware検証、MQTT、および不揮発性ストレージを備えたSecure Designed ESP32フレームワーク。安全なベースを考慮するすべての種類のIoT開発プロジェクトに使用できます。このプロジェクトでは、ESP-Wroom-32が使用されます。
Windows LinuxとMac用のESP-IDFのインストールについての完全な説明は、espressifインストールステップバイステップガイドで入手できます。このプロジェクトでは、UbuntuとDebianを備えたLinux Pathが続きました。
前提条件:
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
プロジェクトのフォルダーを作成し、GitからESP32フレームワークをダウンロードしてください。
cd ~/esp
git clone https://github.com/flouflouit/secure_esp
このプロジェクトに必要なコマンドの短いリスト。それらはすべて、ルートプロジェクトフォルダーsecure_espで実行する必要があります。
WiFiのSSIDとパスワードは、 idf.py menuconfigで、 Example Connection ConfigurationまたはSDKConfigで直接構成されています。
CONFIG_EXAMPLE_WIFI_SSID=""
CONFIG_EXAMPLE_WIFI_PASSWORD=""

更新サーバーとMQTTブローカー証明書を作成する必要があります。したがって、certificate_creation.sh bashスクリプトが実装されました。このスクリプトがMQTTブローカーで実行された場合、MQTT証明書を蚊に直接コピーできます。 IP変数には、アップデートサーバーとMQTTブローカーのIPアドレスが含まれている必要があります。これは、スクリプトで編集する必要があります。
. ~/esp/secure_esp/certificate_creation.sh
このスクリプトは、次のツリー構造を生成します。

さらに、スクリプトは、キーと証明書をota_certsおよびmqtt_certsプロジェクトフォルダーにコピーします。
ファームウェアの署名プロセスには、署名キーが必要です。このシギー化キーは、ルートプロジェクトフォルダーsecure_espで実行する必要があるOpenSSLで作成されます。
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
証明書、server.crt、server.keyの証明書をコピーします。certificate_creation.shを使用して/etc/mosquitto/certs/folderに作成します。
その後、ブローカーを再起動する必要があります。
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
certificate_creation.shは、フォルダーMQTT_CERTSとOTA_CERTSを作成します。これらのフォルダーでは、アップデートおよびMQTTサーバーの証明書とキーが作成されたCAディレクトリから自動的にコピーされます。その後、MQTTブローカーのIPアドレスは、ファイルmqtt.cのソースコードで構成する必要があります。

TLSを介した安全な接続には、MQTTとポート8883を使用します。
/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 更新ファームウェアバージョンは、実行中のファームウェアバージョンよりも高い必要があります。そのため、OTAアップデートのプロジェクトを構築する前に、 CONFIG_APP_PROJECT_VERに基づくファイルsdkconfigでバージョン番号を増やす必要があります。または、アプリケーションマネージャーの下でidf.py menuconfigが実行することもできます。 
ファームウェアアップグレードURLは、sdkconfigファイルの構成の例の下でidf.py menuconfigで変更できますCONFIG_EXAMPLE_FIRMWARE_UPGRADE_URL

ビルドプロセス中、ファームウェアはSECURE_BOOT_SIGION_KEY.PEMでデジタルで署名されます。
idf.py build
このコマンドを実行した後、ファームウェアバイナリは次のように見つけることができます: ~/esp/secure_esp/build/secure_esp.bin
まだ完了していない場合は、Files update_cert.pemおよびupdate_cert.pemをcertificate_creation.shスクリプトで生成します。
その後、これらのファイルは、ファームウェアのバイナリを使用して1つのフォルダーにコピーする必要があります。更新サーバーを開始するには、次のコマンドが使用されます。
openssl s_server -WWW -key update_key.pem -cert update_cert.pem -port 8070
このプロジェクトのアプリケーションをコーディングするには、例の例がコードに含まれています。この例アプリケーションは、ファイルsecure_esp.cを見つけることができます。メインプロセスによって実行され、無限のループで実行されます。まばたき例では、LEDはGPIOピン9で定義されています。1秒後に再びオフになります。この例は、secure_espに基本的なアプリを含める方法を示しています。

このプロジェクトでは、フラッシュ暗号化が有効になっています。最初のフラッシュは、通常のフラッシュコマンドで実行する必要があります。
idf.py -p [port] flash monitor
その後、ESP32は、暗号化されたフラッシュコマンドでのみフラッシュできます。
idf.py -p [port] encrypted-flash monitor
次のエラーメッセージが発生した場合、フラッシュ中にESP32のブートボタンを押すと役立ちます。
