SSL Server 自作するための OpenSSL 使用方法

SSL ( TLS )

こんばんは。

ESP32 ( ESP-WROOM-32 )で SSL サーバーを構築するための第2弾として、今回は OpenSSL の使い方を自分なりの備忘録的に書いてみようと思います。

これだけでもあまりにも膨大な量です。
書いている途中で、どんどん量が増えていったので、疲れ果ててしまいました。
ですから、ESP32 ( ESP-WROOM-32 )自体のESP-IDF 開発方法は次回の記事で紹介します。

しかし、OpenSSL は今回初めて使いましたが、スンゴイ便利でよくできたソフトウェアですね。
これを作った人々は尊敬に値します。
今の情報化社会で、こういう人たちこそが世の中を支えているんだと思いました。
我々はその方々の作り上げた財産を使わせてもらっているだけなので、感謝しかありません。
ありがとうございます。
m(_ _)m

では、OpenSSL を使うためには、前回の記事にあるようなSSL/TLS や 公開鍵暗号化方式などの予備知識がないと使えないので、ある程度理解したとして話を進めていきます。

何度も言いますが、私はサーバー関連や OpenSSL はド素人ですので、誤っているかもしれません。
もし、発見したらコメント投稿等でご連絡いただけると助かります。

※以下、Windos10 で説明します

スポンサーリンク

    【目次】

  1. OpenSSLとは
  2. OpenSSL を使う上で必要な用語
  3. 使用するハードウェア
  4. 作成予定のサーバーのローカル IP アドレスを調べておく
  5. OpenSSL を WindowsPC にインストールする
  6. Open SSL のコマンドライン用パスを通す
  7. OpenSSL 動作確認
  8. OpenSSL 作業用フォルダおよびファイル作成下準備
  9. ルート認証局 ( CA ) 秘密鍵および証明書作成
  10. ユーザーサーバー証明書署名要求 ( CSR )ファイルとユーザーサーバー用秘密鍵生成
  11. ルート認証局の署名付きサーバー証明書の生成
  12. CRT証明書をPEM形式に変換する
  13. トラブルシューティング
  14. 参考にさせていただいたサイト

1.OpenSSLとは

私は最近使い始めたばかりで、正直言って詳しいことは良く分かりませんが、ザッと簡単に自分なりに書きます。

OpenSSL とは、https://www.openssl.org/で開発されている、オープンソースソフトウェアです。
参照:https://ja.wikipedia.org/wiki/OpenSSL

秘密鍵や公開鍵、ルート認証局 ( CA )証明書を自分自身で署名して生成したり、そのCA署名付きサーバー証明書を生成したりできる、夢のようなソフトウェアです。
これがあれば、電子工作用途マイコンと、スマホブラウザとのネット通信で SSL/TLS 暗号化通信が可能になります。

2.OpenSSL を使う上で必要な用語

前回の記事をおさらいして、OpenSSL を使う上で必要な用語を挙げると、

●公開鍵暗号化方式( PKI )
●秘密鍵
●公開鍵
●x509様式、およびそのバージョン V3
●ルート認証局およびその証明書
●署名
●証明書署名要求( CSR )
●認証局署名付き証明書( CRT )
●PEM形式

こんなところでしょうか。
これだけ見ると、結構覚えることありますね。

3.使用するハードウェア

今回は、ESP32 ( ESP-WROOM-32 )をSSLサーバーとする目的ですが、既に別のサーバーを所有していれば、それを使っても良いです。

ESP-WROOM-32 ( ESP32 )開発ボード 2台

今回は2台使います。
私の場合は、USB電源の突入電流や保護機能が充実したスイッチサイエンスさんの ESPr Developer 32 をお勧めします。

Amazon.co.jp

ESPr Developer 32
スイッチサイエンス(Switch Science)

その他、Espressif Systems 社純正の ESP32-DevKitC でもOKです。

その他、パソコン、USBケーブル等

4.作成予定のサーバーのローカル IP アドレスを調べておく

別途サーバーがあれば良いのですが、無ければ、2台の ESP32 ( ESP-WROOM-32 )を使います。
1つはルート認証局用、もう一つは実際にSSL通信するユーザーサーバー用と決めておきます。

予め、Arduino IDE のサンプルスケッチ WiFiClient.ino などをコンパイルするなどして、シリアルモニター等でローカル IP アドレスを確認しておいてください。
STA モードの IP アドレスですので、間違えないようにしてください。
もし、分からない場合は、記事を読み進んでいってください。
次回アップする記事で紹介しますが、ESP-IDF で make コンパイルした後、シリアルモニターで IP アドレスが確認できます。

また、予め、Arduino – ESP32 で、ESP32 の適当な Wi-Fi サンプルスケッチをコンパイルして、IP アドレスを確認しておくということでも良いと思います。

また、Wi-Fi ルーターの DHCP で自動割り当てされた IP アドレスは、ルーターをリセットすると変わってしまいます。
固定IPアドレス設定にする方が良いと思われます。

5.OpenSSL を WindowsPC にインストールする

Open SSL の公式サイトがありますが、そこにはソースファイルしかないので、コンパイル済みのファイルは以下のサイトを開きます。

http://slproweb.com/products/Win32OpenSSL.html

すると、下図の様な画面が出てくるので、最新版をダウンロードします。
2018/02/28 時点では、v1.0.2 というバージョンです。
最新版でないと脆弱性対策が施されていないので注意してください。
32bitパソコンならば、Win32 OpenSSL v1.0.2n
64bit パソコンならば、Win64 OpenSSL v1.0.2n
をクリックします。
すると、exe 形式の実行ファイルがダウンロードされます。
Light 版ではないものを使います

すると、64bit の場合、
Win64OpenSSL-1_0_2n.exe
というファイルがダウンロードされるので、それをダブルクリックして、インストール開始します。

すると、下図の様な画面が出るので、「Next」をクリック。

次に下図の様な画面が出るので、ライセンス規約を読んで同意すれば、下図の様に選択して、「Next」をクリック。
ライセンス文には、寄付しないのは「ダサいよ」みたいなことが書いてあります。

次に、下図の画面が出てくるので、インストールしたいフォルダを選択します。
私の場合は、Dドライブにしました。

次に、下図の画面になるので、Windowsスタートメニューに表示させたい名前を記入します。

次に、下図の様な画面になります。
作業用ファイルを Windowsシステムディレクトリに保存することは、システムに影響を及ぼす恐れがあるので、私は OpenSSL の /bin ディレクトリを選択しました。

下図の画面で確認して、問題無ければインストール開始します。

すると、こんな感じでインストール開始します。

インストール終了すると、下図の画面が出るので、寄付するのであれば何れかにチェックしてください。
寄付しないのであればチェックを外して、「Finish」します。

私自身、無料で公開することの大変さを十分承知しているので、寄付しようと思います。
オープンソースプロジェクトの人たちも生活しなければならないですからね。

これで、Open SSL のインストールは完了です。
次では、コマンドライン用のパス設定をします。

コメント

  1. HAL より:

    お久しぶりです。HALです。

    自宅のWEBサーバーでWPAを動かすためにSSL対応する必要があり、
    こちらの記事を参考にさせて頂きました。

    とても詳しく説明して頂いたお蔭で、無事に対応が出来ました。
    ありがとうございます。
    最初は簡単そうなApachなどの別サイト記事をいくつか試してみたのですが全敗しました。
    いやー、これは凄いですね。実際に試して感動しました。
    Chromeの最新版に対応できるのが、とてもありがたいです。
    自力では絶対に無理でした。

    対価として支援させていただきます。

    ¥—–
    ギフト券番号:
    —————
    有効期限
    ————-

    • mgo-tec mgo-tec より:

      (ブログを全面修復して、過去のコメントが消えてしまいました。
      以下、1/24時点のコメントを再投稿します。)

      HAL さん

      ご無沙汰しております。

      そして、かなり高額なご支援、ありがとうございます。
      とーってもウレシイです!!!

      そういえば、メール一切無しのご支援方法って、やっぱり斬新ですね。
      以前、コメント投稿でご支援いただきましたが、一瞬、メールを探してしまいました。
      本当に感謝しかありません。
      m(_ _)m

      ところで、あまり人気の無かったこの記事でお役に立てて、感無量でございます。
      この記事は結構苦労したんですよね。
      これは、実際に SSL 化した時の達成感はかなりありますよね。
      やった人でないと分からないと思います。
      HALさんにわかって頂けて、何よりです。
      報われた感があって、とっても嬉しいですね。

      最近は、忙しくてなかなか新たな工作ができませんが、おかげでがんばれそうな気がしました。
      ホントにありがとうございました。
      m(_ _)m

  2. juchang より:

    mgo-tec 様

    今回も教えを乞うこととなりました(スミマセン)。
    OpenSSL のバージョン確認のところまではスムーズにいったのですが、OpenSSL ディレクトリへ移行しようとすると、
    「ファイル名、ディレクトリ名またはボリュームラベルの構文が間違っています」
    となり先へ進めません。
    テキストと違う点:
    1.Dドライブが無いため、ディレクトリの保管場所をCドライブとしています。
    外置きのハードディスク(Eドライブ)でも試してみましたが同様。
    2.OpenSSL のバージョンは、1_0_2s となっています。
    3.OpenSSL のインストールで、「 Select Start Menu Foruder 」の項目が出ません。
    手書きでフォルダー名を、OpenSSL-Win64 → OpenSSL としても同様。
    毎回お手数をお掛けします、アドバイスの程お願いいたします。

    • mgo-tec mgo-tec より:

      juchangさん

      いつも記事を試していただき、ありがとうございます。

      私はOpenSSLを最近全く使っておらず、ver 1.0.2sになっているとは知りませんでした。
      バージョンが異なっていると、当然この記事とは異なると思います。

      まず、気になるのが、コマンドが正確に入力されているかどうかです。
      juchangさんがコマンドプロンプトで打ち込んだテキストが全て半角入力で、記号は合っていますでしょうか?
      今一度ご確認ください。
      「ファイル名、ディレクトリ名またはボリュームラベルの構文が間違っています」
      というようにコマンドラインに表示されたということは、コマンド入力方法が間違えています。

      cdコマンドはChange Directryの略です。
      cdコマンドの使い方が分らない場合、ネットに情報が沢山ありますので調べてみて下さい。
      因みに、

      cd /?

      と入力するとヘルプが見られます。

      あと、OpenSSLのインストールに関しての不具合は、私には解り兼ねますので、OpenSSLの方に直に問い合わせて頂くようにお願いいたします。
      (英語対応でいつ返事が来るか分かりませんが・・・)

      また、3番の質問は気にしなくて良いと思います。
      スタートメニューには普通にインストールされていると思われますし、機能には影響無いと思います。

      • juchang より:

        mgo-tec 様

        今回も単純なミスでした。
        cd /? で検索してみると、私の場合は C ドライブに保管しているので、
        cd \OpenSSL-Win64
        でいいことが解り、先ほど本テキストの処理を完成することができました。
        これで ESP32 SSL サーバーの構築へ進めます。
        今後ともご指導の程よろしくお願い致します。

        • mgo-tec mgo-tec より:

          やはり、そういうことでしたか・・・。
          コマンドプロンプトのエラーは入力ミスのことが多いので、それをまず疑ってかかると良いと思います。

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