certbot-auto更新

[更新:2021年2月3日]

さくらのVPS のスタートアップスクリプトでcertbot-autoを利用しているユーザーの設定更新方法をご紹介します。

更新理由

弊社スタートアップスクリプト内でLet's Encryptを利用する場合、certbot-autoというプログラムを利用していました。
しかしこのプログラムが 2021年1月以降すべてのディストリビューションにおいて非推奨 となりました。
本文書掲載時点では証明書の更新について問題ないことを確認しておりますが、今後のアップデートが行われずセキュリティ問題も懸念されますので、下記の対象に該当する場合はお手数ですがお客様VPS内での更新をお願いいたします。

更新対象

2021年2月3日以前に下記のスタートアップスクリプトを利用したお客様

  • Mastodon

  • Mailserver

  • Let’s Encrypt

更新方法

仮想サーバへのログイン

VNCコンソールまたはSSH経由でサーバーへログインし、rootユーザーに切り替えます。

VNCコンソールのリンク

現在の設定確認

証明書の更新がcertbot-autoを利用して行われているかを確認します。

# ls -ld /usr/local/certbot/
drwxr-xr-x 30 root root 4096 Feb  1 16:28 /usr/local/certbot/

# ls -l /etc/cron.d/certbot-auto
-rw-r--r-- 1 root root 144 Feb  1 16:29 /etc/cron.d/certbot-auto

snapdのインストール

snapdをインストールします。ご利用OSがCentOS 8系を利用している場合はepelのパッケージを事前にダウンロードしてください。

利用OSがCentOS 8の場合
# yum install -y epel-release
# yum install -y snapd
# systemctl enable --now snapd.socket
# systemctl start snapd.service
# ln -s /var/lib/snapd/snap /snap
# snap install core && snap refresh core

certbotのインストール

上記でsnapdのインストールが完了しているので、certbotのアプリケーションをインストールします。

# snap install certbot --classic
# ln -s /snap/bin/certbot /usr/bin/certbot

インストールされたcertbotが問題なく動作することを確認してください。

# certbot renew --dry-run
<中略>
Congratulations, all simulated renewals succeeded:

certbotを利用した証明書の更新設定

証明書の更新はcronではなくsnapdの機能を利用するため、下記を実行します。

# snap start --enable certbot.renew
Started.

# snap services
Service        Startup  Current   Notes
certbot.renew  enabled  inactive  timer-activated

既に一度以上証明書の更新をされているか確認します。更新されている場合は結果が表示され、更新されていない場合は何も出力されずプロンプトが表示されます。

# grep hook /etc/letsencrypt/renewal/<対象ドメイン>.conf
※<対象ドメイン>部分はご利用中のドメインに変更してください。

上記でコマンドの実行結果が表示されない場合は、該当のパターンにあったコマンドを実行し、更新時のhook設定を行ってください。

  • Let’s Encrypt / Mastodon をご利用中のお客様

# RELOAD_SCRIPT="/etc/letsencrypt/renewal-hooks/deploy/reload_nginx.sh"
# echo -e '#!/bin/bash\nsystemctl reload nginx' >${RELOAD_SCRIPT}
# chmod +x ${RELOAD_SCRIPT}
# sed -i -e "/^webroot_path/a renew_hook = ${RELOAD_SCRIPT}" /etc/letsencrypt/renewal/<対象ドメイン>.conf
※<対象ドメイン>部分はご利用中のドメインに変更してください。
  • Mailserverをご利用中のお客様

# PRE_SCRIPT="/etc/letsencrypt/renewal-hooks/pre/stop.sh"
# POST_SCRIPT="/etc/letsencrypt/renewal-hooks/post/reload.sh"
# echo -e '#!/bin/bash\nsystemctl stop httpd' >${PRE_SCRIPT} && chmod +x ${PRE_SCRIPT}
# echo -e '#!/bin/bash\nsystemctl reload postfix dovecot\nsystemctl start httpd' >${POST_SCRIPT} && chmod +x ${POST_SCRIPT}
# sed -i -e "/^server/a pre_hook = ${PRE_SCRIPT}" /etc/letsencrypt/renewal/<対象ドメイン>.conf
# sed -i -e "/^pre_hook/a post_hook = ${POST_SCRIPT}" /etc/letsencrypt/renewal/<対象ドメイン>.conf
※<対象ドメイン>部分はご利用中のドメインに変更してください。
更新時のhook設定を行ったお客様は、下記コマンドを実行してhookが動作していることを確認してください。
※既に一度以上証明書の更新をされている場合も実行してください。出力される結果は異なっています。
# snap run certbot.renew --dry-run
Dry run: skipping deploy hook command: /etc/letsencrypt/renewal-hooks/<設定したスクリプト>

certbot-autoの削除

certbot-autoの設定ファイルが残存しているため、下記を実行して削除を行います。

# rm -f /etc/cron.d/certbot-auto
# rm -rf /usr/local/certbot/

以上ですべての作業は完了となります。