Nginx: Let’s Encrypt (certbot)のTLS/SSL証明書をcronで定期自動更新する設定

本記事は前回の続きで、Let’s Encrypt認証局のTLS/SSL証明書の入手・更新クライアントであるcertbotを用いた証明書の自動更新設定を記載している。

前提

実行環境はLinux (CentOS7)。crondは下記のコマンドを用いて正常稼働していることを確認しておく。以降の作業は全てroot権限で実施。

cronへの設定方法

エディタ(Vim, nanoなど)でcron用の設定ファイルを作成する。crontab -eオプションでも編集は可能だが、crontab -rオプションで設定を削除してしまうオペミスがまれにある為、別名で設定ファイルを作成の上、ファイルをcronに読み込ませる手法が安全牌。

処理内容は、0〜1時間(ランダム)のsleep後、certbot renewコマンドを実行。–post-hookオプションにより、certbot renew実行後にnginxの設定ファイルのリロードを実行(証明書の再読み込みの為)。尚、当該コマンドの実行間隔(0 0,12 * * *)の意味は、毎日0時と12時に実行。sleep間隔を踏まえると、毎日00:00:00~00:59:59と12:00:00~12:59:59の間に実行する。

以下にcronの実行間隔の書式を引用する。

稼働確認方法

cronの実行ログはデフォルトで下記に/var/log/cronに出力される為、最新ログは下記のコマンドで確認可能。

公式ドキュメント

  • Certbot Nginx on CentOS/RHEL 7
    セットアップから自動更新設定まで記載。ただしreloadの記述はなし。
  • User Guide — Certbot 0.31.0.dev0 documentation
    standaloneプラグインの場合はrenewの更新前にnginxのサービス停止、完了後に起動のステップとしている。前回の記事ベースで設定している場合、nginxサービスを落とすと、httpを用いたファイル存置認証も出来なくなるため、今回はこちらの手法は採っていない。