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

記事公開日:2018年3月8日


スポンサーリンク

9.ルート認証局 ( CA ) 秘密鍵および証明書作成

ということで、Open SSL でルート認証局 ( CA ) 証明書と、秘密鍵を作ってみます。
前回の記事でも述べたように、自分自身で署名して、自分自身で証明書を発行する、俗に言う「オレオレ証明書」です。

因みに、電子工作用途でサーバーを作る場合、今のところサーバーネーム( DNS )を生成する方法が私には分かりませんので、ここではローカルIPアドレスで作ってみたいと思います。
そんなことできるんかいな?
と思いましたが、調べたらできました!

まず、先に述べたように、予め調べておいた、ESP32 ( ESP-WROOM-32 ) のWi-Fi STA モード IPアドレスを使います。
(分からない場合はとりあえず先に進んでください)

2つのWi-Fi マイコン ESP32 ( ESP-WROOM-32 )のうち、一方をルート認証局用とします。
例として、ここでは
192.168.0.16
とします。

実際は、ルート認証局のサーバーをあえて設けなくてもブラウザで認証できるかもしれませんが、形だけでも存在した方が理解し易いと個人的に思っています。

では、Windows コマンドプロンプトを起動し、以下のコマンドでMyData フォルダへ移動した状態にしてください。
※ここでは、パスに ’\’ ではなく、スラッシュ ‘/’ を使っています。
cfg
ファイルや、ESP-IDF の msys32
コマンド記述と合わせる為です

cd /D D:/OpenSSL-Win64/MyData

esp_idf_openssl_50.jpg


次に、いよいよルート認証局 ( CA ) 証明書の発行です。
以下のコマンドを入力してください。

openssl req -new -x509 -sha256 -days 36500 -newkey rsa:4096 -config openssl_ca.cfg -subj "/C=JP/ST=Tokyo/L=Shinjyuku/O=Test_CA/OU=test_ca/CN=192.168.0.16” -out esp32_ca.crt -keyout esp32_ca.key

【コマンドオプションの意味】
● req
証明書署名要求 ( CSR )ファイルの生成。
● -new
新規の証明書署名要求 ( CSR )ファイルの生成。
● -x509
このオプションを入れると、署名要求 ( CSR )ファイルではなく、署名付き証明書 ( CRT )ファイルが生成される。
要するに自己認証局証明書が直に生成される。
● -sha256
暗号化ハッシュの形式設定。
これで暗号化すると殆ど解読不能にすることができる強力なものです。
● -days
証明書の有効期限の設定。ここでは100年としていますが、閏年計算されていないらしいです。
● -newkey
秘密鍵の生成。ここでは暗号強度を上げるために、rsa:4096 としています。
● -config
先ほど作成した、ルート認証局用環境設定ファイル ( .cfg )を指定しています。
● -subj
証明書様式 X509 のサブジェクトを入力します。
Subject とは、証明される側の所有者情報です。
自己証明書なので、自分自身で仮に設定した認証局情報を適当に入力します。
ここで入力しなくても、コマンドラインで入力を求められるので、そこで入力しても良いのですが、生成する度に入力することが面倒なので、ここで記載しています。
CN のところが重要で、実際のサーバーアドレスまたはDNS と一致していることです。
その他はご自分の好きな組織名や場所を記入すれば良いと思います。
スペースは入れない様に注意して下さい。
● -out
証明書出力先ファイル名の指定。
ここでは、esp32_ca.crt というファイル名にしています。
● -keyout
秘密鍵出力ファイル名の指定。
ここでは、esp32_ca.key というファイル名にしています。

では、入力した結果は以下のようになります。
パスフレーズを求められるので、適当な6文字以上のパスワードを入力します。
これは、後ですぐに解除するので、同じ文字6文字で良いです。
下図の様に、同じパスワードを2度入力します。

esp_idf_openssl_51.jpg


これで、パスフレーズ込みのルート認証局 ( CA )証明書
esp32_ca.crt
というファイルが作成され、その秘密鍵
esp32_ca.key
というファイルが作成されました。

しかし、これではこの証明書にアクセスする度にパスフレーズを求められるので、パスフレーズを解除します。
以下のコマンドを入力してください。

openssl rsa -in esp32_ca.key -out esp32_ca.key

すると、下図の様に元のパスフレーズを求められるので、それを入力すれば、パスフレーズ解除の証明書
esp32_ca.crt
に書き替えられます。

esp_idf_openssl_52.jpg


これで、自己ルート認証局証明書と秘密鍵が完成です。
これは1回作成すれば良く、この証明書で複数の署名付きサーバー証明書を発行できます。
秘密鍵は他者に漏れないように、厳重に保管しておいてください。

10.ユーザーサーバー証明書署名要求 ( CSR )ファイルとユーザーサーバー用秘密鍵生成

では次に、各々のサーバー証明書を発行する前に、証明署名要求 ( CSR )ファイルを生成します。
前回記事でもちょっと述べましたが、サーバー証明書にルート認証局 ( CA )の署名が無ければ、ブラウザには信頼されません。
その署名要求ファイルを生成しなければ署名してもらえないようです。

では、以下のコマンドを入力してみてください。
先ほどのルート認証局証明書作成コマンドとは異なり、-x509 コマンドを入れていません。
そうすると、証明書ではなく、署名要求 ( CSR )ファイルが生成されます。
そして、ユーザーサーバー用cfgファイルを指定していることに注意してください。
また、CN は実際の ESP32 のユーザーサーバー用 IP アドレスを指定します。

openssl req -new -sha256 -days 36500 -newkey rsa:4096 -config openssl_server.cfg -subj "/C=JP/ST=Tokyo/L=Shinjyuku/O=ESP32server/OU=esp32server1/CN=192.168.0.14” -out esp32_server.csr -keyout esp32_server.key

すると、先ほど同じようにパスフレーズを求められるので、適当な6文字以上を2度入力します。

esp_idf_openssl_53.jpg


これで、パスフレーズ込みのサーバー証明書署名要求 ( CSR )ファイル
esp32_server.csr
が生成され、その秘密鍵
esp32_server.key
が生成されました。

続いて、先ほどと同じく、以下のコマンドでパスフレーズを解除して、CSRファイルを上書きします。

openssl rsa -in esp32_server.key -out esp32_server.key

esp_idf_openssl_54.jpg


これで、パスフレーズを解除した、ユーザーサーバー証明書署名要求 ( CSR )ファイルが生成されました。
次では、認証局の署名付きユーザーサーバー証明書の生成を説明します。


スポンサーリンク


「SSL Server 自作するための OpenSSL 使用方法」への7件のフィードバック

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

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

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

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

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

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

      HAL さん

      ご無沙汰しております。

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

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

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

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

  2. mgo-tec 様

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

    1. juchangさん

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

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

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

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

      cd /?

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

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

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

      1. mgo-tec 様

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

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

コメントを残す

メールアドレスが公開されることはありません。

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください