Let's encryptのrenewが思いのほか難しい

hagi に投稿

まだ、完全に解決できているか分からないが、どうもcertbotの挙動が良く分からない。

ここのところ3か月の電子署名の残期限が1か月を切るケースが発生しているが、更新したタイミングでなぜかapache2が落ちてしまう。certbot renewには -pre_hookとpost_hookがあり、standaloneで更新しようとするとpreでsystemctl stop apache2をかけてpostでstartをかける必要がある。

cronの設定でこれを書き込んであるのだが、letsencryptのログを見ると、apachectl startなどと違う記述が出てくる。いろいろ調べてみると、/etc/letsencrypt/renewalの下にドメイン名.confというファイルが生成されていて、その中に[renewalparams]という記述があり、そこに書かれているpre_hook、post_hook、authenticator、installerが用いられているようなのだ。

もう一点は、cronでは週に1度しか走るように設定しているのに毎日2回ずつ走っている。さらにcertbotのログの時間はJSTではなくUTCで吐かれているようで追いにくい。

つらつらと調べていると、certbot.timerという設定がある。こちらは、毎日2回の設定になっているようだ。中々、何を信じて良いのか良く分からない。一応、この設定を変更してrebootして状況変化を見ることにする。

タグ

コメント

/etc/systemd/system/certbot.serviceを

[Unit]
Description=Let's Encrypt renewal

[Service]
Type=oneshot
ExecStart=/usr/bin/certbot renew --quiet --agree-tos
ExecStartPost=/bin/systemctl reload apache2
PrivateTmp=true

と設定して、様子を見ているが、ログを見る限り日に二回の実行が機能しているようだ。

落ちた日のletsencryptのログを見る限り、複数の証明書を更新しようとすると、どうも最初の更新は成功している。2個目からポートの衝突で失敗しているように見える。ワークアラウンドとして同時に2個更新しないように強制更新をかけておけば正常動作になるのかも知れないが、経過観察しようと思う。

一日二回も動かす必要は無いので、timerを1回に変更した。