パッケージマネージャからインストールしたLet's Encrypt(Certbot)で証明書の更新をCronで実行する必要はない

まとめ

  • Linuxディストリビューションのパッケージマネージャー(aptとかyumとか)からインストールするとすでに更新処理(certbot renew)はCronで自動化されているため、自前で設定する必要はありません。
  • ただし、HTTPサーバによってはreloadかrestartをしないと証明書の内容が更新されないので、それは自前で行う必要がある。

もうちょっとだけ詳しく

  • ディストリビューションでどのバージョンから自動更新処理はがついていることが下記URLにも記載されている。こちらを参照しよう。

certbot.eff.org

  • どこで実行されているかわからんときや、自分の環境では自動化されているかどうかを確認したい場合は、/etc/crontab だったり、 systemctl list-timers でチェックしてみましょう。

実際に利用しているUbuntu18.04では、下記内容がCronにしれっと登録されていた。

# /etc/cron.d/certbot: crontab entries for the certbot package
#
# Upstream recommends attempting renewal twice a day
#
# Eventually, this will be an opportunity to validate certificates
# haven't been revoked, etc.  Renewal will only occur if expiration
# is within 30 days.
SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin

0 */12 * * * root test -x /usr/bin/certbot -a \! -d /run/systemd/system && perl -e 'sleep int(rand(43200))' && certbot -q renew
  • このCronを読んで貰えればわかるけど、証明書の更新はしてくれるが証明書を利用しているHTTPサーバのReloadやRestartはされないので、証明書の再読み込みに必要であればそれは自前で行う必要がある。

思うところ

  • 最近からそうなったんだろなーとは思ったけど、これで理由が理解できた。
  • 殆どの利用ケースではパッケージマネージャ経由でCertbotはインストールしているだろうし、よくわからない人はパッケージマネージャ経由で入れておけという感じです。
  • 思考停止状態でとりあえずでコピペ設定するのはやめよう。設定するならHTTPサーバのReloadだけで十分だし、都合が悪いので自前で叩く場合は、既存のCron設定は止めよう。