思い立って〇〇分で即SSL化!Let's Encrypt!!


はじめに

まだHTTPで消耗してるの?(挨拶
HTTPSはGoogleがHTTPは検索から除外するという話などから重要性については理解していたつもりでしたが、自宅サーバのサイトについてはそのままにしていました。

仕事で証明書の事について調べる機会が多かったのですが、その中でLet's Encryptというものがあって無料で証明書が入手可能とわかったので令和の良いスタートにこれを入れたいと思います。

ITでお金を頂いてるだけに素人とは言いませんが、まったく同じことを仕事でしているわけではないので、どれだけの時間でSSL化が可能なのか見てみましょう。

結論からつまずいたところを紹介

httpd.confではなく、ssl.confの設定が優先されていたため。
httpd.confを一生懸命いじりながら、あーでもないこーでもないを繰り返してた。

【開始10分】まずはお手本通りに設定

無料でHTTPS化できる「Let's Encrypt」をやってみた ※install.sh付き
上記のサイトを参照して作業を実施しました。とりあえず証明書の発行まではスムーズにいきました。VirtualHostの設定も終わりアクセスしてみますが、保護されてない通信との表示…。スマホからアクセスしてみますが、やはりhttpsだけ繋がりません(コメントにも記載ありますが、この人はUbuntu環境らしく、自分はCentOSなのでそのあたりの環境差異も今回うまくできない原因のひとつだったかも。)

【開始20分】フルチェインが対応してないことに気付く。

色々調べていたところ、証明書と中間証明書の合体したfullchainとやらはApache 2.4.8以降しか対応してないとのこと。私の環境ではCentOSで、最新を入れても現状では2.4.6なのです。つまり上記で参照したサイトそのままでは対応できないようです。なので中間証明書の記述をfullchainからchainに変更。
…してみましたが、まだうまくいきません。
参考:https://www.slogical.co.jp/ssl/faq/install_apache/

【開始35分】443ポートが開いてない

スマホ側で表示されているエラーを頼りに調べます。えぇっと「ERR_CONNECTION_REFUSED」…。
調べた結果、そもそも443ポートが空いてない事に気付きました(保護されてない通信が表示されたのはローカルネットワーク内)問題の真因では無いでしょうけど、どちらにせよ対応しなければならないのでルーターの設定をしておきました。

【開始55分】中間証明書指定の書き方が二種類ある?

色々なサイト見てると中間証明書の指定がSSLCACertificateFileとSSLCertificateChainFileで二種類あるっぽい?SSLCA…から始まるほうを試してみるもダメ。
そういえばそもそもSSLのモジュールあったっけ?
 →ありました。有効にもなってました。

【開始65分】中間証明書のせいにする。

中間証明書がダメっぽいので絶対中間証明書まわりの設定だと思う。
(結果で言えばそうではなかったけど、何故そう思ったのかと言うとオレオレ証明書であっても証明書は表示されていたから。
ドメイン名とかも設定した内容と同じだったのでLet's Encryptで作成した証明書が当たってるんだとばかり思ってたけど有効期間が1年間になってたし(Let's Encryptは90日間)その時点で違和感を感じるべきだった。)

また、FQDNを入力してSSL化されているかどうか確認するサイトにて中間証明書が正しくインストールされていません。というメッセージが出ることもその方向性に拍車をかけた。
SSL化確認サイト:https://sstool.cybertrust.ne.jp/support_tool/index01.php

【開始80分】色々やった

SSL設定を外にも記述する、SSLの中身を二重に記述する…など色々やってみたけど反応無し。これはもうApacheの記載自体を疑う必要あり?とりあえず艦これして寝る(本作業に関わってる時だけタイマーを動かしてるので本当はもっと時間かかってて、現在朝の8時。良い子は寝る時間。

寝る前に念のため再確認。
試行錯誤した時のままfullchainになってたのでchainに戻す。当たり前だけどダメ
chainを適当な文字に変える。エラーで再起動失敗するので、設定はやっぱりちゃんと読み込まれてるぽい。

【開始90分】ssl.confだった。

ssl.confを設定したらようやく正しく表示されるようになりました。
後は流れで、htaccessのリダイレクトと、cron設定して終わり。
疲れた。寝ました。

もっと早く対処するにはどうすべきだった?

・証明書の有効期限がLet's Encryptの仕様と異なることにもう少し違和感を感じるべきだった。

[root@hayate wordpress]# httpd -t -D DUMP_CONFIG 2>/dev/null | grep '# In' | awk '{print $4}'
/etc/httpd/conf/httpd.conf
/etc/httpd/conf.d/autoindex.conf
/etc/httpd/conf.d/php.conf
/etc/httpd/conf.d/ssl.conf
/etc/httpd/conf.d/userdir.conf
/etc/httpd/conf.d/welcome.conf
/etc/httpd/conf/httpd.conf

あと、こんなコマンドもあるらしい。
これを最初に確認しておけばssl.confに対する気付きも早かった筈。

以上で終わります。本当疲れた!!!