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

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


スポンサーリンク

8.OpenSSL 作業用フォルダおよびファイル作成下準備

では、まず、自分で作成した証明書を発行する際に必要な作業用ファイルとフォルダを作成します。

1.openssl.cfg ファイルの複製

まず、openssl の環境設定ファイルを編集します。

インストールした、OpenSSLフォルダの中の/binフォルダを開きます。
私の場合のパスは以下のようになります。

D:\OpenSSL-Win64\bin

その中の、openssl.cfg というファイルを編集します。
これは、Linuxなどでは、openssl.cnf という、cnf拡張子のファイルと同じと思われます。
Windows では .cfg という拡張子になるのでしょうか?

これは、証明書を生成する際に必要な環境変数が記述されています。
それを、ルートCA用と、サーバー用の2種類作ります。

まず、/bin フォルダの中の、openssl.cfg ファイルをコピーします。


次に、

D:\OpenSSL-Win64\MyData

へ移動し、コピーした、openssl.cfgファイルを貼り付けます。
貼り付けたら、ルートCA用として、以下のファイル名に変更します。

openssl_ca.cfg

同じようにもう一度、openssl.cfgファイルを貼り付けて、ユーザーサーバー用のファイル名に書き替えます。

openssl_server.cfg


2.ルート認証局 ( CA )用.cfgファイル編集

まず、ルート認証局 ( CA )用の、openssl_ca.cfg ファイルをテキストエディタで開きます。
テキストエディタは、メモ帳ではダメです。
ソースコード編集用のテキストエディタを使って下さい。
私はフリーの Adobe Brackets を使っています。

開いたら、以下の項目の個所を修正および追記してください。
これが本当に正しいかどうかは正直分かりませんが、少なくとも私の環境ではこれで動作しました。
(#印の行はコメントです)

[ CA_default ]
x509_extensions	= v3_ca #58行目を変更

[ req ]
x509_extensions	= v3_ca #変更せずそのまま使用
req_extensions = v3_req #125行目辺りのコメントを外す

[ usr_cert ]
basicConstraints = critical,CA:TRUE #170行目を変更
nsCertType = sslCA #176行目のコメントを外し、sslCAとする
subjectAltName = @alt_names #新規追加

[ v3_req ]
subjectAltName = @alt_names #新規追加

[ v3_ca ]
basicConstraints = critical,CA:true #そのまま変更なし
nsCertType = sslCA, emailCA #コメント外す
subjectAltName = @alt_names #新規追加

#以下の項目を最後の行に追加する
#証明書を発行したいサーバー IPアドレス、またはDNSを全部入れておく。
#注意点は、ルート認証局IPではなく、ユーザーサーバーIPまたはDNSを入力すること
[ alt_names ]
IP.1 = 192.168.0.14

#DNS.1 = example_ca.com #DNSドメイン名がある場合
#DNS.2 = *example_ca.com

ここでの注意点は、最後の [ alt_names ] 項目のところです。
ここの IP.1 のアドレスは、先にも述べたように、予め調べておいた、ESP32 ( ESP-WROOM-32 )マイコンのアドレスです。
ここの IP アドレスは、ルート認証局 ( CA )用のアドレスではなく、ユーザーサーバー用の IP アドレスを入力することです。
ここで私は何十回もハマりました。
ESP32 のアドレスが分からない方は、とりあえずここと同じように入力して、後日アップする記事で ESP-IDF などでコンパイルした後に判明しますので、先に進んでください。
xampp や apache などの仮想ローカルサーバーがある方はそれを入力しても良いと思います。

要するにこの項目は、ルート認証局 ( CA )が今後発行する予定のユーザーサーバーアドレスまたはDNS を全て記述するということです。
ここで複数のサーバーアドレスまたはDNSドメインを記載しておけば、複数のサーバー証明書を発行することができます。

例えば、もう一つ証明書を発行したいユーザーサーバーアドレスが、192.168.0.20 だとすれば、

IP.1 = 192.168.0.14
IP.2 = 192.168.0.20

とすれば良いのです。
ここの部分はネットでかなり調べましたが、なかなか分からずに苦労しました。

ブラウザ Google Chrome の場合は、バージョン58 以降で、subjectAltName (サブジェクト代替名)の値を参照するようになったとのことです。
つまり、そのsubjectAltName の値を[ alt_names ]項目に記載しているということです。
バージョン 64 でも同様です。
サーバー素人の私には何だか小難しいです。

将来的にセキュリティ仕様が変更になると、この設定もまた変わるかも知れませんので、今後の動向をよく注意しておく必要があります。

3.ユーザーサーバー用の.cfgファイルの編集

上記と同じように、今度はユーザーサーバー用の openssl_server.cfg ファイルを編集します。
以下の項目の個所を修正および追記してください。

[ CA_default ]
x509_extensions	= usr_cert

[ req ]
x509_extensions	= usr_cert #110行目を変更する
req_extensions = v3_req #125行目辺りのコメントを外す

[ usr_cert ]
basicConstraints = CA:FALSE #170行目変更しない
nsCertType = server #176行目のコメントを外す
subjectAltName = @alt_names #新規追加

[ v3_req ]
subjectAltName = @alt_names #新規追加

#以下の項目を最後の行に追加する
#これは、実際のサーバーIP又はDNS、および subject のCN名と一致していることが重要。
[ alt_names ]
IP.1 = 192.168.0.14

#DNS.1 = example.com  #DNSドメイン名がある場合
#DNS.2 = *example.com

ユーザーサーバー用の [ alt_names ] 項目は、実際のユーザーサーバー IP アドレスまたは DNS を入力すれば良いです。
ここでは、ルートCA用ではなく、ユーザーサーバー用設定なので、[ usr_cert ] 項目の basicConstraints をCA:FALSE とすることを忘れがちなので注意してください。

4.証明書作成用に記録フォルダを作成

次に、証明書作成用に新たにフォルダを作成します。
先ほど仮に作った、MyData フォルダ内に以下のフォルダを作成します。

demoCA

下図の様になります。


これは、openssl.cfg ファイルでデフォルト定義されているフォルダです。
cfgファイルでフォルダ名を変更しても良いと思いますが、とりあえずデフォルト設定のまま使用してみます。

次に、その demoCA フォルダの中に、新たに以下のフォルダを作成します。

certs
crl
newcerts
private

下図の様になります。


5.index.txtの作成

次に、demoCAフォルダに

index.txt

という空のテキストドキュメントファイルを作成します。
ここで注意していただきたいのは、このファイルには改行コードやスペースなど一切無い空のファイルにすること
そうでないと、エラーになります。


index.txt ファイルには、直近で発行した証明書のサーバー情報やシリアル番号などのログが記録されるファイルになります。

6.serialファイルの作成

次に、以下のように、serial という拡張子無しのテキストファイルを作って置きます。

serial

それをテキストエディタで、半角

00

とだけ入力して保存しておきます。
新規にテキストファイルを作成し、後で拡張子を削除すれば良いです。
ここでも、改行コードや余分なスペースは一切無いように注意してください


Windows のエクスプローラーで見ると下図の様になります。


この serial というファイルには、証明書を発行する度にカウントアップされたシリアル番号が上書き記録されていきます。

これで、Open SSL 下準備終了です。
次は、実際に証明書を生成してみます。


スポンサーリンク


「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 を使っています。コメントデータの処理方法の詳細はこちらをご覧ください