【2022/2/20追記】80番ポートを使えないWebサーバでLet's Encryptの証明書を更新する【webrootからstandaloneに変更】

経緯

4月8日にシュガータウンの証明書が切れるというのは事前に知っていましたが、自分の中では自動更新されるものだと思っていたので無視していました。

ところが、最近になってLet's Encryptからその旨のメールが来ていました。 これは更新に失敗しているか、そもそも自動更新する設定になっていないかのどちらかです。

原因

Webサーバがポート443のみ受け付ける設定になっていたため。

(80番ポートを使わないor別のサービスが動いている状態)

解決策

certbotをstandaloneモードで設定する(変更前:おそらくwebrootモード)。

ただし、standaloneモードは80番ポートを使うため、稼働中のサービスがあれば一時的に落とす必要があります。

実行

以下のコマンドを実行しただけでrenewできました。

sudo certbot renew --standalone

もしくは、/etc/letsencrypt/renewal/*.conf 内にauthenticator = standaloneを記述すれば、standaloneモードでの更新となります。 (--standaloneオプションでrenewした場合はconfigが既に書き換わっているかもしれません)

あとはこれをcronなり適当にすればよさそうです。

おまけ:--pre-hook--post-hookでrenew時に何かすることも可能なようです。

2022/2/20 追記

Ubuntu 20の場合、

sudo systemctl list-timers

をしてやると、すでにsnap.certbot.renew.serviceが登録されています。(つまり、証明書を自動更新する設定が元から入っています)

/etc/letsencrypt/renewal/*.conf内に、

pre_hook = (80番ポートを使用するサービスを停止するコマンド)
post_hook = (80番ポートを使用するサービスを開始するコマンド)

を追記するのが手っ取り早いです。


参考記事

Let's Encryptでstandaloneからwebrootに設定変更する

Certbotスタンドアロンモードを使用して、CentOS 7でSSL証明書を暗号化して取得する方法