F.Ko-Jiの「一秒後は未来」

Let's Encrypt でブログと DailyFeed を HTTPS 対応した

今まで使ったことがなかった Let's Encrypt を使ってみたかったので、このブログを HTTPS 化しました。やってみたら簡単だったのでついでに DailyFeed も HTTPS にしました。

» Let's Encrypt – Free SSL/TLS Certificates

公式サイトの「Getting Started」にあるように、実際の作業は Certbot というツールを使っておこないます。

Certbot の公式サイトを開いたら使用している Web サーバーの種類 (Apache や Nginx など) とオペレーティングシステムを選択します。

そうするとそれぞれの OS と Web サーバーにおける Certbot を使用した設定手順が表示されるので、その指示に従ってセットアップするだけです。(今後手順が変わる可能性もあるのでここでは詳しく書きません。公式サイトを見てください。)

なお、 Certbot を使うと Web サーバーの設定ファイルが自動的に変更されます。例えばこのブログの場合は Nginx で /etc/nginx/conf.d/blog.fkoji.com.conf に blog.fkoji.com ドメインの設定を書いていたので、このファイルに HTTPS 用の設定が追加されます。

そのため Certbot の実行前に、変更されるであろうこれらの設定ファイルのバックアップを取っておくと安心です。

なお、 Let's Encrypt は証明書の有効期限が 90 日間となっているため、証明書の更新については Certbot を cron 等で定期的に動かすことによりおこなうことが推奨されています。このブログは Nginx を Docker コンテナで動かしているので、

/usr/bin/docker exec -d nginx /usr/bin/certbot renew

のように docker exec をホスト側の cron から実行するようにしました。

また、証明書が更新されたら nginx コンテナをリロードしないといけないので以下のようなシェルスクリプト(restart_nginx_container_after_renewed_ssl.sh)を作成。

#!/bin/sh

IS_NOT_RENEWED=`/usr/bin/docker exec nginx cat /var/log/letsencrypt/letsencrypt.log | grep -c 'Cert not yet due for renewal'`

if [ "$IS_NOT_RENEWED" = 0 ]; then
  /usr/bin/docker kill -s HUP nginx
fi

/usr/bin/certbot renew は毎日実行されますが証明書が更新されなければ /var/log/letsencrypt/letsencrypt.log に「Cert not yet due for renewal」というログが出力されます。このログが存在しなければ証明書が更新されたと見なして、 /usr/bin/docker kill -s HUP nginx でコンテナのリロードを実行します。

これらを以下のように crontab に設定しました。

0 0,12 * * * /usr/bin/python -c 'import random; import time; time.sleep(random.random() * 3600)' && /usr/bin/docker exec -d nginx /usr/bin/certbot renew
0 1,13 * * * /bin/sh /home/fkoji/docker/restart_nginx_container_after_renewed_ssl.sh

また、 Let's Encrypt に関するファイルはすべて /etc/letsencrypt 以下に生成されるようなので、コンテナを作り直すときのために /etc/letsencrypt をホスト側にコピーして、改めてそのディレクトリを /etc/letsencrypt にマウントするようにしました。

なお、HTTPS に変更したら Google Analytics のプロパティの設定を変更したり、Search Console にサイトを登録し直したりといったサイト管理に関する付随作業が発生するので、そのあたりはググって確認してみるといいです。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

著者について

fkoji

F.Ko-Ji

Webエンジニアやってます。最近は ドットインストール の開発がお仕事です。その傍ら、個人で Meity電車遅延なう梅酒.in#グラドル自画撮り部 の部室といったネットサービスを開発・運営してます。梅酒と草野球とリアル脱出ゲームが好きです。

» 詳しいプロフィールや運営サービスの一覧など