カテゴリー
Linux

certbot renew を cron 設定した記録のメモ

はじめに

の続きで、残作業の certbot renew 設定を行った記録です。

certbot 公式ページにしたがって、SSL 証明書の更新と自動更新設定を行います。なお、2 つ目のページは cron の参考ページです。

SSL 証明書の更新コマンド、cron 設定コマンドまとめ

# root ユーザで作業
su -

# SSL 証明書の自動更新テストコマンド
certbot renew --dry-run
# SSL 証明書の自動更新コマンド
certbot renew
# SSL 証明書の自動更新ログ
cat /var/log/letsencrypt/letsencrypt.log

# cron 起動確認
systemctl status crond
# cron 編集
crontab -e
# cron 内容確認
crontab -l
# cron 実行ログ確認
tail /var/log/cron

試しに SSL 証明書の自動更新テストを実行

テストを行うと、うまく動くことがわかりました♪

# certbot renew --dry-run
Saving debug log to /var/log/letsencrypt/letsencrypt.log

-------------------------------------------------------------------------------
Processing /etc/letsencrypt/renewal/oki2a24.com.conf
-------------------------------------------------------------------------------
Cert not due for renewal, but simulating renewal for dry run
Plugins selected: Authenticator nginx, Installer nginx
Starting new HTTPS connection (1): acme-staging-v02.api.letsencrypt.org
Renewing an existing certificate
Performing the following challenges:
http-01 challenge for oki2a24.com
Waiting for verification...
Cleaning up challenges

-------------------------------------------------------------------------------
new certificate deployed with reload of nginx server; fullchain is
/etc/letsencrypt/live/oki2a24.com/fullchain.pem
-------------------------------------------------------------------------------

-------------------------------------------------------------------------------
** DRY RUN: simulating 'certbot renew' close to cert expiry
**          (The test certificates below have not been saved.)

Congratulations, all renewals succeeded. The following certs have been renewed:
  /etc/letsencrypt/live/oki2a24.com/fullchain.pem (success)
** DRY RUN: simulating 'certbot renew' close to cert expiry
**          (The test certificates above have not been saved.)
-------------------------------------------------------------------------------

IMPORTANT NOTES:
 - Your account credentials have been saved in your Certbot
   configuration directory at /etc/letsencrypt. You should make a
   secure backup of this folder now. This configuration directory will
   also contain certificates and private keys obtained by Certbot so
   making regular backups of this folder is ideal.
# 

試しに SSL 証明書の自動更新を実行

では、本当に更新しようとしてみますと、これは上手くいかないようです。

まだ、更新するタイミングじゃない、と言われました。

# certbot renew
Saving debug log to /var/log/letsencrypt/letsencrypt.log

-------------------------------------------------------------------------------
Processing /etc/letsencrypt/renewal/oki2a24.com.conf
-------------------------------------------------------------------------------
Cert not yet due for renewal

-------------------------------------------------------------------------------

The following certs are not due for renewal yet:
  /etc/letsencrypt/live/oki2a24.com/fullchain.pem expires on 2018-09-20 (skipped)
No renewals were attempted.
-------------------------------------------------------------------------------
# 

2018年6月29日追記

certbot renew
こちらのコマンドの場合は証明書の有効期限が30日未満の場合のみ実行出来ます。
有効期限に関わらず更新をする場合は↓のコマンドになります。

certbot renew –force-renew

ということのようです。--force-renew オプションをつければ確認できそうですね♪

cron でスケジュール実行を設定

ではどうするかというと、公式ページにはこうあります。

if you’re setting up a cron or systemd job, we recommend running it twice per day (it won’t do anything until your certificates are due for renewal or revoked, but running it regularly would give your site a chance of staying online in case a Let’s Encrypt-initiated revocation happened for some reason). Please select a random minute within the hour for your renewal tasks.

意訳しますとこんな感じでしょうか。

cron とか systemd job を設定するなら、1日あたり2回実行することをおすすめするよ(君の証明書が更新または取り消し予定のタイミングがくるまでは何も行われないよ。でも、何らかの理由で Let’s Encrypt の取り消しが開始された場合でも、日常的にコマンドを実施しておくことは君のサイトにオンライン滞在のチャンスを与えることができるよ)。君のコマンド実行タイミングの1時間以内のランダムな分を選んで実行してね。

それで、たとえばこんな cron を提唱しています。

0 0,12 * * * python -c 'import random; import time; time.sleep(random.random() * 3600)' && certbot renew

毎日 0 時と 12 時に実行するのですね。そして、Python を使って、これらの時間から 1 時間以内のランダムなタイミングで、certbot renew を実行する、という内容です。

冒頭のコマンドまとめに従って、cron の設定を行いました。

cron 実行をログで確認

ログを確認したところ、無事 cron は動いていました♪そして、cron で 1 時間以内にランダムで実行した結果が、certbot のログにも出ていました。

どうやら大丈夫のようです♪

SSL 証明書の更新を実際に行うログを確認して、早く本当に自動更新されることを確認し、もっと安心したいものですね。

# 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)
#
# cat /var/log/letsencrypt/letsencrypt.log
2018-06-26 00:41:40,353:DEBUG:certbot.main:certbot version: 0.24.0
2018-06-26 00:41:40,353:DEBUG:certbot.main:Arguments: []
2018-06-26 00:41:40,353:DEBUG:certbot.main:Discovered plugins: PluginsRegistry(PluginEntryPoint#manual,PluginEntryPoint#nginx,PluginEntryPoint#null,PluginEntryPoint#standalone,PluginEntryPoint#webroot)
2018-06-26 00:41:40,379:DEBUG:certbot.log:Root logging level set at 20
2018-06-26 00:41:40,379:INFO:certbot.log:Saving debug log to /var/log/letsencrypt/letsencrypt.log
2018-06-26 00:41:40,396:DEBUG:certbot.plugins.selection:Requested authenticator <certbot.cli._Default object at 0x7fdb9a490750> and installer <certbot.cli._Default object at 0x7fdb9a490750>
2018-06-26 00:41:40,419:INFO:certbot.renewal:Cert not yet due for renewal
2018-06-26 00:41:40,420:DEBUG:certbot.renewal:no renewal failures
# 

おわりに

SSL/TLS の設定といえば、まずお金がかかり、そして設定も複雑で、総じて難しい印象がありました。

certbot はこれを大幅に易しくしたと感じました。

どんどん使って行きたく、思います♪

以上です。

コメントを残す