@znz blog

ZnZ の memo のようなもの

certbot の renew hook について

| Comments

certbot で設定の再読み込みには post-hook よりも renew-hook を使った方が良さそうでした。

対象バージョン

  • Debian GNU/Linux 8.6 (jessie)
  • certbot 0.9.3-1~bpo8+1

hook の指定方法について

certbot renew --pre-hook "service nginx stop" --post-hook "service nginx start" のように certbot コマンドの引数で直接指定するか、 /etc/letsencrypt/cli.ini または $XDG_CONFIG_HOME/letsencrypt/cli.ini ($XDG_CONFIG_HOME が設定されていなければ ~/.config/letsencrypt/cli.ini) に renew-hook = service nginx reload のように -- を省いたオプション名で ini ファイルに指定する方法があるようです。(ini ファイルは --config cli.ini または -c cli.ini のようにコマンドラインで指定も可能)

pre-hook, post-hook について

pre-hookpost-hook は standalone プラグインを使っている時に、 certbot の Web サーバーが 80 番ポートを使えるようにするために、通常の Web サーバーを止める用途に適しているようです。

そのため、--dry-run の時でも呼ばれるようです。

使用例: certbot renew --pre-hook "service nginx stop" --post-hook "service nginx start"

renew-hook について

renew-hook は証明書の更新が成功するごとに呼ばれるので、証明書の再読み込みに適しているようです。

環境変数 RENEWED_LINEAGE/etc/letsencrypt/live/www.example.com のような証明書の場所へのパスが、 環境変数 RENEWED_DOMAINSwww.example.com example.com のようにスペース区切りの更新されたドメインのリストが渡ってくるようです。

証明書の更新ごとに呼ばれるようなので、たまたま同じタイミングで www.example.comother.example.net の更新が起こったとして、 証明書の作成の時に -d を同時に指定して同じ証明書の SAN (Subject Alternative Name) に入っているなら、 RENEWED_DOMAINS に並んでいて、 別々に証明書を作成していれば renew-hook が別々に呼ばれました。

(2017-01-03 追記: post-hook は 1 回しか呼ばれませんでした。詳細はcertbot の renew hook について (その2)を参照)

renew-hook のすすめ

以上の違いから、 webroot プラグインを使っている時の証明書の自動再読み込みには post-hook ではなく renew-hook を使うのがおすすめです。

Web 上で post-hook を使っている例の方が多いのは、 renew-hook の方が後から実装されたからではないかと思います。

Comments