はじめに
- WordPress を動かしているリバースプロキシとWebサーバの Nginx で、Let’s Encrypt と certbot で SSL/TLS の発行、導入をしました記録♪ – oki2a24
の続きで、残作業の 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 はこれを大幅に易しくしたと感じました。
どんどん使って行きたく、思います♪
以上です。