ESP32-WROVER(TTGO Camera)でHTTPS Serverを立ち上げPCとSSL通信をする(開発環境ESP-IDF & Eclipse)

証明書と秘密鍵を作り警告なくブラウザーで表示させる

これにはOpensslを使い、CA証明書とCA秘密鍵を作りこれをPCに登録します。さらにこのCA証明書とCA秘密鍵を使ってサーバー証明書に署名します。このサーバー証明書とサーバー秘密鍵を現状のプロジェクトのデフォルトで入っているファイルと置き換えます。ESP-IDFプロジェクトではサーバー証明書は”cacert.pem”、サーバー秘密鍵は”prvtkey.pem”という名前になっています。

ネタ元はこちらのサイトです。内容については概ね理解したのですが私の方で追記・解説することもあまりないので手順だけ記述しておきます。

CA証明書・CA秘密鍵・サーバー証明書・サーバー秘密鍵の作り方

私はWindows10で開発しているのですが、opensslの記事は概ねLinuxで書かれているのでWSL(Windows Subsystem for Linux)で作業をしていきたいと思います。

PowerShellにWindows用opensslをインストールして作業してもいいかと思います。

WSLには(インストールした記憶がないので)opensslは標準で入っているようです。

左下の検索窓に”WSL”と打ち込んで起動します。

WSL Launch

作業用フォルダーを作り(c/users/xxx/caなど)そこにカレントディレクトリを移動。

以下のコマンドを実行。

CA証明書属性定義ファイルを作成します。WSL上でやってもいいですし(私はよくわかりません)、Window側から適当なエディターで作成してもいいです。ファイル名をca.extにして以下の記述をします。

最後に自己署名でCA証明書を作成します。

続いて同じような手順でサーバー証明書を作ります。

以下のコマンドを実行。

ESP-IDFプロジェクトではサーバー秘密鍵のファイル名はprvtkey.pemなのでその名前で作成しています。

続いてCA証明書と同様にサーバー証明書属性定義ファイル”server.ext”を作成します。

subjectAltNameにサーバーのIPアドレス/DNS名などを入れます。私の環境の場合は192.168.1.15なのでそのように記述しています。もし複数登録するときは”,”(カンマ)で区切り記述します。

最後にCA証明書で署名したサーバー証明書を作成します。

ESP-IDFプロジェクトではサーバー証明書のファイル名はcacert.pemなのでその名前で作成しています。

これでCA証明書、サーバー秘密鍵、サーバー証明書が出来ました。

サーバー秘密鍵(prvtkey.pem)とサーバー証明書(cacert.pem)を先に作ったプロジェクトのmain/certs下のファイルと置き換えます。そして再度build/flashします。

CA証明書はルート証明機関に登録します。

“ユーザー証明書の管理”と入力して”certmgr[証明書]”を起動します。

root CA

「信頼されたルート証明書期間」を右クリックして「すべてのタスク」→「インポート」をクリックします。

root CA import

“証明書のインポート ウィザード”ウィンドウが表示されます。以下、次へを押していき、途中先ほど作成した”ca.crt”を指定して完了させます。

CA import Wizard2

セキュリティ警告が出ますが、「はい」を押して完了させます。

Security Warning

これで作ったCA証明書が登録されました。

CA shoumeisyo

これでさきほど警告が出たhttps://192.168.1.15にアクセスしても警告も出なくなり鍵マークが施錠された絵になりました。

Hello Secure World

ESP-IDFプロジェクトはGitHubにあります。

このプロジェクトを元にしてmDNS追加、PCアプリからの通信、APモード対応、をやっていきます。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です