ESP32-WROOM-32 で信頼ある SSL サーバーを自作する ( ESP-IDF編 )

ESP32 ( ESP-WROOM-32 )

6.ルートCA用  ESP-IDF サンプルプログラムの修正

次に、ルートCA用の ESP-IDF のサンプルプログラムを修正します。

まず、ルートCA 用のフォルダを開いてください。
(USER はご自分のユーザー名です)

D:\msys32\home\USER\openssl_CA\main

その中の

openssl_server_example_main.c

というファイルをテキストエディタで開いて下さい。

そのうち、38行目あたりの

#define OPENSSL_EXAMPLE_SERVER_ACK

のところを以下のように書き換えて保存してください。

#define OPENSSL_EXAMPLE_SERVER_ACK "HTTP/1.1 200 OK\r\n" \
                                "Content-Type: text/html\r\n" \
                                "Connection: close\r\n\r\n" \
                                "<!DOCTYPE html>\r\n" \
                                "<html>\r\n" \
                                "<head>\r\n" \
                                "<title>OpenSSL CA example</title></head>\r\n" \
                                "<body style='font-size:3.5em'>\r\n" \
                                "OpenSSL<br />\r\n" \
                                "Rout CA server example!\r\n" \
                                "</body>\r\n" \
                                "</html>\r\n" \
                                "\r\n"

7.ユーザーサーバー用  ESP-IDF サンプルプログラムの修正

次に、ユーザーサーバー用 ESP-IDF のサンプルプログラムを修正します。

以下のフォルダを開いて下さい。
(USER はご自分のユーザー名です)

D:\msys32\home\USER\openssl_server\main

その中の前項と同じ名前の
openssl_server_example_main.c

というファイルをテキストエディタで開いて下さい。

そのうち、38行目あたりの

#define OPENSSL_EXAMPLE_SERVER_ACK

のところを以下のように書き換えて保存してください。

#define OPENSSL_EXAMPLE_SERVER_ACK "HTTP/1.1 200 OK\r\n" \
                                "Content-Type: text/html\r\n" \
                                "Connection: close\r\n\r\n" \
                                "<!DOCTYPE html>\r\n" \
                                "<html>\r\n" \
                                "<head>\r\n" \
                                "<title>OpenSSL Server example</title></head>\r\n" \
                                "<body style='font-size:3.5em'>\r\n" \
                                "OpenSSL<br />\r\n" \
                                "ESP32 (ESP-WROOM-32)<br />\r\n" \
                                "SSL Server example!<br /><br/>\r\n" \
                                "Hello World!\r\n" \
                                "</body>\r\n" \
                                "</html>\r\n" \
                                "\r\n"

次は menuconfig設定を説明します。

コメント

  1. juchang より:

    mgo-tec 様

    今回こそ何とか自力でクリアしようと望みましたがやはりダメでした。
    試行錯誤しながら、「10. make flash コマンドで、ESP-WROOM-32 フラッシュへコンパイル書き込みする」まで到達しました。
    openssl_CA のシリアルモニターでの確認において、ユーザーサーバー用ローカル IP アドレスが表示されません。
    シリアルモニターには、
    ESP_ERROR_CHECK failed: esp_err_t 0x1110 (ESP_ERR_NVS_NEW_VERSION_FOUND) at 0x400d2de5
    file: “C:/msys32/home/USER-NAME/openssl_CA/main/openssl_server_example_main.c” line 261
    func: app_main
    expression: nvs_flash_init()
    と表示されています。
    「 SSL Server 自作するための OpenSSL 使用方法」を2回やり直して、本テキストに臨みましたが同じ結果となります。
    気になる点:
    ① ESP-IDF の menuconfig 設定で、
    make[1]: ディレクトリ ’/home/USER /esp/esp-idf/tools/kconfig’ に入ります
    という表示がなく、menuconfig 画面に切り替わっています。
    ② 「 SSL Server 自作するための… 」の
    3.ユーザーサーバー用の .cfg ファイルの編集のところで、
    [ usr_cert ]
    basic Constraints = CA: FALSE #170行目変更しない
    とありますが、原文には、#basic Constrains … とあり、コメントアウトが必要?
    抽象的な説明で申し訳ありません、何かヒントがありましたらご教示の程お願いいたします。

    • mgo-tec mgo-tec より:

      juchangさん

      いつもお試しいただき、ありがとうございます。

      今、新規記事アップのための編集大詰め状態ですので、回答は今しばらくお待ちくださいませ。
      m(_ _)m

      • juchang より:

        mgo-tec 様

        お忙しいところご面倒をお掛けします。
        その後の経過報告です。
        ESP_ERROR_CHECK failed: esp_err_t 0x1110 (ESP_ERR_NVS_NEW_VERSION_FOUND) at 0x400d2de5
        について、MSYS2 ツールチェーンのバージョンが、v3.1 と古いことが判明しました。(当初、20190611 を使用していましたが、うまくいかず 20181001 にしたら上記の結果となりました)
        20190611 に戻し、本テキストに再チャレンジしているところですが、今度は、make menuconfig もエラーとなってしまいます。
        テキストのどこの時点までさかのぼってやり直すべきか、OpenSSL の取得を含め、すべて delete してやり直すべきか悩んでいます。

        • mgo-tec mgo-tec より:

          juchangさん

          新規記事アップに体力を大幅に消耗していて、なかなか検証できないでいます。
          申し訳ございません。

          まず、最新のツールチェーンは試していないので、20180110を使って下さい。
          記事を書いた当初はそれで動作確認しています。
          最新のツールチェーンはESP-IDFの使い方が変わっている可能性があります。
          ESP-IDFの辛いところは、バージョンアップすると使えなくなる可能性が高いことです。
          Arduino IDE は環境が殆ど変わらないので、うまく動作しない場合は先に進んで、以下の記事
          Arduino – ESP32 で SSLサーバーを構築し、セキュアな Wi-Fi アクセスポイントセレクターを作ってみました
          を試すという手がおススメです。

          また、#basic Constrainsのところは、コメントを外してください。
          そうしないとユーザーサーバーを認識しません。

          以上、試してみて下さい。

          • mgo-tec mgo-tec より:

            juchangさん

            OpenSSL の最新バージョンはまだ試していませんが、当方でtoolchain 20181001 を使って、ESP-IDF v3.3 にして、サンプルコードをmake flashしてみましたが、特に問題ありませんでした。
            いつの間にかESP-IDFはstable版というものになっていたみたいですね。

            この記事のToolChain リンクが古いままだったので、現在のURLに変更しました。
            また、以下のリンク
            https://docs.espressif.com/projects/esp-idf/en/stable/get-started/index.html#get-esp-idf
            では、ESP-IDF clone する時に、ESP-IDFバージョン指定例が書いてありました。
            それに習って、本記事も修正しました。
            以下の様な感じです。

            git clone -b v3.3 --recursive https://github.com/espressif/esp-idf.git

            また、ESP-IDF の menuconfig 設定で、

            make[1]: ディレクトリ ’/home/USER /esp/esp-idf/tools/kconfig’ に入ります

            という表示がない場合は、恐らく、PATHの指定が誤っているものと思われます。
            今一度、この記事の
            「3.MSYS2 の環境設定で ESP-IDF のパスを通すファイルを作成」
            のところを参照して、ご自分のパソコン内のフォルダパスになっているか確認してください。
            (’\’マークと’/’を間違えないようにしてください)

  2. oku より:

    mgoさん
    やっと鍵マークが出てきました。
    MSYS2のインストールがうまく行きませんでした。バージョンを変えてもコンパイルできません。ESP-IDFのコマンドプロンプトでの環境設定やコンパイルはできるのでそちらで行いました。SSLが良くわかり、ありがとうございました。

    • mgo-tec mgo-tec より:

      okuさん

      こんなマニアックな記事をご覧いただき、ありがとうございます。

      この記事は3年近く前のものですが、動いて良かったです。
      確かに、今のESP-IDFのバージョンなら、MSYS2よりもWindowsコマンドプロンプトで実行した方が確実ですね。
      (^^)

タイトルとURLをコピーしました