SSLとかTLS対応するとき、オレオレ証明書(自己署名証明書)を作る方法は、以下の5つのコマンドを実行すればよい(【】のところは説明)
【オレオレ認証局の作成】
openssl genrsa -des3 -out mqtt_ca.key 2048
openssl req -new -x509 -days 3650 -key mqtt_ca.key -out mqtt_ca.crt
【認証してもらうサーバーの操作】
openssl genrsa -out mqtt_srv.key 2048
openssl req -new -out mqtt_srv.csr -key mqtt_srv.key
【オレオレ認証局がサーバーを認証】
openssl x509 -req -in mqtt_srv.csr -CA mqtt_ca.crt -CAkey mqtt_ca.key -CAcreateserial -out mqtt_srv.crt -days 3650
ことは、以下の記事で書いた
MQTTのTLS、サーバーとクライアントの設定について
https://blog.goo.ne.jp/xmldtp/e/90b3be752e90d78d473a6e8f67f8cceb
ただ、この5つのコマンドと、商用の証明書を購入する場合の関係がわからないと、オレオレ証明書でシステム作れても、商用の証明書を使うとき、
「あれ、証明書買ってきたのに、オレオレみたいな動きする…見えない!」
ってことになりかねない。
なので、今日は、上記のオレオレ証明書の作成コマンドと、
商用の証明書を購入する手順を対比させ、
「あれ、証明書買ってきたのに、オレオレみたいな動きする…見えない!」
っていうのはなぜ起こり、それをどう回避するかについて書いてみたい。
【オレオレ認証局の作成】
openssl genrsa -des3 -out mqtt_ca.key 2048
openssl req -new -x509 -days 3650 -key mqtt_ca.key -out mqtt_ca.crt
【認証してもらうサーバーの操作】
openssl genrsa -out mqtt_srv.key 2048
openssl req -new -out mqtt_srv.csr -key mqtt_srv.key
【オレオレ認証局がサーバーを認証】
openssl x509 -req -in mqtt_srv.csr -CA mqtt_ca.crt -CAkey mqtt_ca.key -CAcreateserial -out mqtt_srv.crt -days 3650
ことは、以下の記事で書いた
MQTTのTLS、サーバーとクライアントの設定について
https://blog.goo.ne.jp/xmldtp/e/90b3be752e90d78d473a6e8f67f8cceb
ただ、この5つのコマンドと、商用の証明書を購入する場合の関係がわからないと、オレオレ証明書でシステム作れても、商用の証明書を使うとき、
「あれ、証明書買ってきたのに、オレオレみたいな動きする…見えない!」
ってことになりかねない。
なので、今日は、上記のオレオレ証明書の作成コマンドと、
商用の証明書を購入する手順を対比させ、
「あれ、証明書買ってきたのに、オレオレみたいな動きする…見えない!」
っていうのはなぜ起こり、それをどう回避するかについて書いてみたい。
■商用の証明書を買う場合の流れ
以下の手順
1.証明書が欲しいサーバー用の秘密鍵を作成する
→このとき、拡張子.keyで作ることが多いかな
2.秘密鍵を公開鍵にして、そこにコモンネームなどの情報を混ぜ混ぜした
CSRファイルを作成する
3.証明書を発行するセキュリティ会社(=認証局)に
CSRファイルないし、CSRファイルの情報を送り、
認証してもらう。認証したファイルがCRTファイル。
→CRTファイルをセキュリティ会社からもらう。これがサーバー証明書。
→この認証したファイルの中に有効期限が入っている。
■商用の証明書を買う手順とオレオレ証明書作成の流れの対比
1.証明書が欲しいサーバー用の秘密鍵を作成する
【認証してもらうサーバーの操作】のはじめのコマンド
openssl genrsa -out mqtt_srv.key 2048
で、秘密鍵が作成できる(商用の場合でも)
2.CSRファイルを作成する
【認証してもらうサーバーの操作】の2番目のコマンド
openssl req -new -out mqtt_srv.csr -key mqtt_srv.key
でCSRファイルができる。
つまり、ここまでは商用とオレオレで手順は同じ
3.認証してもらう(認証したファイルがCRTファイル)
商用の場合は、セキュリティ会社が認証するけど、
オレオレ証明書の場合は、オレオレ認証局が
【オレオレ認証局がサーバーを認証】のコマンド
openssl x509 -req -in mqtt_srv.csr -CA mqtt_ca.crt -CAkey mqtt_ca.key -CAcreateserial -out mqtt_srv.crt -days 3650
を使って認証する…が、まだ、オレオレ認証局、作っていないので、
※(オレオレ認証局独自作業)オレオレ認証局を作る
これが、【オレオレ認証局の作成】の2つのコマンド
openssl genrsa -des3 -out mqtt_ca.key 2048
openssl req -new -x509 -days 3650 -key mqtt_ca.key -out mqtt_ca.crt
上で秘密鍵を作っていて、下で、オレオレ認証局のCRTファイルを作っている
■証明書CRTファイル、オレオレ認証局の場合
オレオレ認証局で作ったオレオレ証明書CRTファイルは、ブラウザでは知っているわけがないので、オレオレ認証局の証明書をブラウザに教え込ませないと、証明書エラーが出る(まあ、出ても続行はできるんだけどね)
オレオレ証明書のブラウザへの教え込み方は
ブラウザへのSSL証明書のインポート
https://scratchpad.jp/ssl-self-certification/
なんかに書いてある(ほかにもいろいろあるので、自分で検索してみて分かりやすいのを見つけてくれ。要するにオレオレ証明書CRTファイルをブラウザにインポートする)
■受け取った証明書CRTファイル、商用の場合
商用なら、オレオレみたいにエラーが出ないでSSLが使えるのが期待。
ところが、オレオレ証明書のように証明書エラーが出ることがある。
これは、ブラウザが知っている認証局のなかに、受け取った証明書の認証局がないから起こる。
この場合は、ブラウザと受け取った証明書の認証局間をつなぐ証明書CERファイルが必要(CERファイル=中間CA証明書)
このCERファイル(中間CA証明書)は、証明書を発行した会社が責任もって提供してくれているはずなので、もらった証明書に添付してある資料、メールをじ~と見てみよう。たいていどっかに書いてある。
(書いてなかったら、証明書を発行した会社に聞いてみよう。商用でお金出したんだから、答えて当然)
ところが、オレオレ証明書のように証明書エラーが出ることがある。
これは、ブラウザが知っている認証局のなかに、受け取った証明書の認証局がないから起こる。
この場合は、ブラウザと受け取った証明書の認証局間をつなぐ証明書CERファイルが必要(CERファイル=中間CA証明書)
このCERファイル(中間CA証明書)は、証明書を発行した会社が責任もって提供してくれているはずなので、もらった証明書に添付してある資料、メールをじ~と見てみよう。たいていどっかに書いてある。
(書いてなかったら、証明書を発行した会社に聞いてみよう。商用でお金出したんだから、答えて当然)
ただ、ファイルがどこにあるかは教えてくれるんだけど、そのあと、
この中間ファイルと証明書をどうすればいいかは、発行した会社では、教えてくれないかも?
これはアプリケーションによって違って、
・証明書をいくつも登録できるものや
(なら中間証明書(CERファイル)も、
サーバー証明書(CRTファイル)も全部、登録すればよい)
・証明書は1ファイル
という場合がある。後者の1ファイルにする場合は、
・証明書は1ファイル
という場合がある。後者の1ファイルにする場合は、
新しいファイルを用意して(拡張子はたいてい、なんでもいい。.cerでも.crtでもたいていうまくいく)
そのファイルに、
中間CA証明書の内容をコピペ
サーバー証明書の内容をコピペ
して保存したファイルを用意して、
中間CA証明書の内容をコピペ
サーバー証明書の内容をコピペ
して保存したファイルを用意して、
このファイルをCRTファイルとして読み込ませるとうまくいく(たいてい、いくつも登録できる場合でも、このファイルを読み込んで対応できる)
★ちなみに、「ブラウザが知っている認証局」って前に書いたけど、この認証局の証明書をルート証明書という。
これはブラウザが持っていて、ブラウザ側で更新するため普通いらないんだけど、もし必要なら、これもサーバー証明書を発行したセキュリティ会社に聞く。お金払ってるんだから聞いてOK!(でも、たいていどっかに書いてあるけどね…)
それと、サーバー証明書に有効期間があるように、中間証明書にも有効期間があるみたいよ!
それと、サーバー証明書に有効期間があるように、中間証明書にも有効期間があるみたいよ!
■参考資料
SSL証明書のファイル形式と作成方法まとめ
https://medicalfields.jp/blog/apache/ssl%E8%A8%BC%E6%98%8E%E6%9B%B8%E3%81%AE%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E5%BD%A2%E5%BC%8F%E3%81%A8%E4%BD%9C%E6%88%90%E6%96%B9%E6%B3%95%E3%81%BE%E3%81%A8%E3%82%81/
3ステップでできるCSRファイル作成方法
https://beyondjapan.com/blog/2017/12/how_to_make_a_csrfile_in_3steps/