遅いよ!って声が聞こえて来そうですが、ようやく 私とみかこさんのサイトを https 化しました。
レンタルサーバーとかによっては、無料で証明書を提供してくれるところも出てきているようですし、AWS でも、Route53 使えば証明書は無料だったのですが、我が家の場合コスト面でどうしても自宅サーバーになってしまうので、証明書にお金払って、毎年更新するのもいやだなぁと思って、個人情報をやりとりするようなサイトでも無いので放置していました。
でも、最近のブラウザは、http だと、「保護されていない」とか「安全でない」とか次第に表現が過激になってきて、まるで、私やみかこさんのブログにアクセスしたら、危ない目にあうんじゃないかみたいに言われるので、そろそろかなと思って、重い腰を上げました。
SSL証明書は今は安いのだと年間1650円くらいからあるのですが、それでもランニングコストはできるだけ抑えたいので、無料の Let’s Encrypt を使うことにしました。実は、以前簡単にできるかなともって試して、10分で挫折した経験があるのですが、今回は真面目にやってみます。さて!と思ったら、なんだかすごく便利になっていて、以前とは比べ物にならないほど敷居が下がっていました。
まず、SSL証明書とはなにか…はめんどくさいので割愛しますが、httpでは平文のままネットワーク上に流れる情報を、毎回鍵をかけて流すようにすることで、途中で傍受されても、通信しているお互いにしか解読できないよというような感じのものです。証明書と呼んでいるものは、その鍵そのものと鍵の持ち主の正当性を証明する血統書みたいなものですね。
Let’s Encrypt は、証明書、つまり鍵と血統書を無料で発行してくれるサイトです。血統書は、Let’s Encrypt が保証人ということです。
URLを、https で提供するには、サーバー側にその証明書を置いておく必要があります。一般的には、サーバーは、Apache を使いますので、「Apache のSSL設定」というキーワードで検索すれば、必要な情報は得られます。多くの場合、SSLモジュールの読み込みを有効にして、ssl に関する設定ファイルの読み込みのコメントを外して、設定ファイルを自分の環境に合わせて書き換えればOKです。この設定の中に、証明書のパスを指定するところがあるのですが、そのパスは、2つもしくは3つになります。証明書が多段になっている場合は、中間証明書が必要で、Let’s の場合は、3つになります。crt(証明書・公開鍵) / key(秘密鍵) / chain(中間証明書) がその3つです。 Let’s は、この他にもう一つ、chain-only というファイルも提供してくれるのですが、これは使いません。
https://letsencrypt.org/ja/docs/client-options/
Let’s Encrypt は、SSL証明書を発行してくれるサービスですが、その手続は、Web画面で入力してファイルをダウンロードするということではなく、プログラムを使って自動化されています。証明書の有効期限は3ヶ月と短いのですが、この自動化されているおかげで、Windows であれば、タスクスケジューラを使って、適切なタイミングで自動更新させることができるようになっています。 Windows であれば、今回私が使った、win-acme が便利です。
ツール(zipファイル)をダウンロードして、適当なところに展開します。このツールはずーっと使いますので、デスクトップとかではなく、ちゃんとした場所に展開するようにします。
展開したら、フォルダの中に、wacs.exeという実行ファイルがありますので、これを右クリックして、管理者として実行しますとコマンドプロンプトが開きますので、あとは、基本的にはツールの指示に従って入力していくだけです。我が家の様にVirtualHost で単一サーバーで複数ドメインを運用している場合でも、一つのツールで大丈夫です。初回生成後のタスクスケジューラでの更新も1つのコマンドで全証明書を一気に更新してくれます。なお、ワイルドカード証明書を発行する機能も追加されているようですので、サブドメインで運用している人は、ワイルドカード証明書を発行してもらっても良いと思います。我が家は、hajimesan.net はこのまま。soundwalking.com は、 過去のしがらみから、www.soundwalking.com も一部残っているのですが、ワイルドカードにせず、3つの証明書にしました。なんとなくそうしただけで、特に意味は無いです。
ツールを使った手順ですが、特に生成された証明書の取得方法の違いで数パターン選択肢があります。最初FTPを試みたのですが、うまくいかず、1時間に5回以上失敗するとブロックされてしまうので、結局一番簡単なマニュアル(手作業)を選びました。
面倒なので、私が選択した選択肢のみ書くと次のようになります。
ここまで進むと、ちょっとだけ待たされて、次の様に表示されます。
Domain: www.soundwalking.net
Record: _acme-challenge.www.soundwalking.net
Type: TXT
Content: “tkc1kRnpqHAF4yln9DftOl09ABmGpnACLMat-oEF7IM”
Note: Some DNS managers add quotes automatically. A single set
is needed.
そしたら、DNS設定(我が家の場合は ValueDomeinのコンソールを叩きます)で、TXTレコードを設定します。
_acme-challenge.www / TXT / tkc1kRnpqHAF4yln9DftOl09ABmGpnACLMat-oEF7IM
私が使っているDNSサーバーでは、TTLが 5分になっているので、このまま5分待って、nslookupで確認します。
nslookup -type=txt _acme-challenge.www.soundwalking.com 8.8.8.8
我が家の場合内向きのDNSサーバーがあるので、末尾に 8.8.8.8 とGoogleのDNSサーバーなどを指定しないと、ローカルアクセスになってしまいますのでこの指定が必要ですが、デフォルトのDNSサーバーがない場合は、不要です。(浸透に時間がかかる場合もあるので、つけておいたほうが無難)
TXTの設定が反映されれば、設定したテキストが表示されますので、そうしたら、ツールに戻って、エンターキーを押します。エラーになるようなら、エラーにならなくなるまで設定を見直したりして頑張ってください。成功したら、TXTの設定を削除してからエンターを押すように言われますので、先程の設定を惜しげもなく?削除してエンターキーを押します。ここでは5分待つ必要はありません。
エンターキーを押すと、指定したフォルダに証明書(4つのファイル)が生成され、次の表示がされます。
Adding Task Scheduler entry with the following settings
これはタスクスケジューラの設定方法で、だいたいこの通りに設定しておけば、毎日チェックして、しかるべくタイミングで、証明書が自動更新されます。(のはず)
試しに手でコマンドを実行してみたところ、5月某日までは更新されませんと表示され正常終了しました。タスクを毎日1回実行するようにしても、毎日更新されるわけではないということですね。証明書の有効期限は6月までなので、期限が切れる少し前に更新されるようです。
なお、試しに、生成された証明書を別のフォルダに移動して実行したのですが、新たに生成されませんでした。なので、発行された証明書は大切に保持しましょう。(–renew をつけなければ再発行されそうですけど)
また、ドメインが複数ある場合は、上記手順をその分だけ繰り返せば、どこかに記録されているようで、同じコマンドで複数同時に更新されるようでした。Friendly nameで設定した名前が、個々の設定の名前になります。
あとは、生成された証明書を、Apacheから参照するように Apache の設定ファイルを変更しておしまいです。
自宅サーバーで運用している場合は、Windows FW の設定とか、ルーターの静的IPマスカレードの設定などで、ポート 443 を受け付けられるようにするのを忘れずに。
必要に応じて、80を443に飛ばす設定とか、80を塞ぐ設定とかしても良いと思いますが、私は 80 でもしばらくサービスを継続するつもりなので、何もしていません。