本記事は前回の続きで、Let’s Encrypt認証局のTLS/SSL証明書の入手・更新クライアントであるcertbotを用いた証明書の自動更新設定を記載している。
前提
実行環境はLinux (CentOS7)。crondは下記のコマンドを用いて正常稼働していることを確認しておく。以降の作業は全てroot権限で実施。
# systemctl status crond * crond.service - Command Scheduler Loaded: loaded (/usr/lib/systemd/system/crond.service; enabled; vendor preset: enabled) Active: active (running) since Sat 2018-11-10 02:16:46 JST; 2 weeks 0 days ago Main PID: 569 (crond) CGroup: /system.slice/crond.service `-569 /usr/sbin/crond -n Nov 10 02:16:46 localhost.localdomain systemd[1]: Started Command Scheduler. Nov 10 02:16:46 localhost.localdomain systemd[1]: Starting Command Scheduler... Nov 10 02:16:46 localhost.localdomain crond[569]: (CRON) INFO (Syslog will be used instead of s...l.) Nov 10 02:16:46 localhost.localdomain crond[569]: (CRON) INFO (RANDOM_DELAY will be scaled with...d.) Nov 10 02:16:47 localhost.localdomain crond[569]: (CRON) INFO (running with inotify support) Hint: Some lines were ellipsized, use -l to show in full.
cronへの設定方法
エディタ(Vim, nanoなど)でcron用の設定ファイルを作成する。crontab -eオプションでも編集は可能だが、crontab -rオプションで設定を削除してしまうオペミスがまれにある為、別名で設定ファイルを作成の上、ファイルをcronに読み込ませる手法が安全牌。
# nano cron.txt ← nanoエディタを起動。後述のcrontab -lの出力結果をコピペ保存して閉じる # crontab cron.txt ← cron.txtファイル内容で設定 # crontab -l ← 設定状態を出力 PATH=/usr/local/bin:/usr/bin:/bin PYTHONIOENCODING='utf-8' 0 0,12 * * * python -c 'import random; import time; time.sleep(random.random() * 3600)' && certbot renew --post-hook "systemctl reload nginx"
処理内容は、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の実行間隔の書式を引用する。
# Example of job definition: # .---------------- minute (0 - 59) # | .------------- hour (0 - 23) # | | .---------- day of month (1 - 31) # | | | .------- month (1 - 12) OR jan,feb,mar,apr ... # | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat # | | | | | # * * * * * user-name command to be executed
稼働確認方法
cronの実行ログはデフォルトで下記に/var/log/cronに出力される為、最新ログは下記のコマンドで確認可能。
# tail /var/log/cron や # tail -200 /var/log/cron | grep certbot Jun 26 00:00:02 150-95-200-203 CROND[11487]: (root) CMD (python -c 'import random; import time; time.sleep(random.random() * 3600)' && certbot renew) 他にもletsencrypt.logを確認するのも手。 # cat /var/log/letsencrypt/letsencrypt.log
公式ドキュメント
- Certbot Nginx on CentOS/RHEL 7
セットアップから自動更新設定まで記載。ただしreloadの記述はなし。 - User Guide — Certbot 0.31.0.dev0 documentation
standaloneプラグインの場合はrenewの更新前にnginxのサービス停止、完了後に起動のステップとしている。前回の記事ベースで設定している場合、nginxサービスを落とすと、httpを用いたファイル存置認証も出来なくなるため、今回はこちらの手法は採っていない。
コメント
[…] Gerando certificados com o LetsEncrypthttps://manuais.ifsp.edu.br/books/certificados-ssl/page/gerando-certificados-com-o-letsencryptNginx: Let’s Encrypt (certbot)のTLS/SSL証明書をcronで定期自動更新する設定https://yukun.info/cron-certbot-renew/ […]