- 1. 概要
- 2. スクリプトの作成
- 3. cron への登録
- 4. 自動更新確認
- 5. 参考サイト
1. 概要
前ページでうまく更新することまで確認できましたので、今度は、スクリプトを作成して、定期的に実行します。
これで、自動的に更新するようになります。
2. スクリプトの作成
スクリプト作成。
オプションの意味等は、前ページをご参照ください。
今度は、強制的でなく、証明書に更新が発生しているときのみの更新です。
#!/bin/sh
/usr/local/bin/certbot \
renew \
--standalone \
--pre-hook "/usr/local/etc/rc.d/apache24 stop" \
--post-hook "/usr/local/etc/rc.d/apache24 start"
スクリプトの実行結果。
Saving debug log to /var/log/letsencrypt/letsencrypt.log
-------------------------------------------------------------------------------
Processing /ディレクトリ名/letsencrypt/renewal/www.example.com.conf
-------------------------------------------------------------------------------
Cert not yet due for renewal
-------------------------------------------------------------------------------
Processing /ディレクトリ名/letsencrypt/renewal/freebsd.example.com.conf
-------------------------------------------------------------------------------
Cert not yet due for renewal
-------------------------------------------------------------------------------
The following certs are not due for renewal yet:
/ディレクトリ名/letsencrypt/live/www.example.com/fullchain.pem (skipped)
/ディレクトリ名/letsencrypt/live/freebsd.example.com/fullchain.pem (skipped)
No renewals were attempted.
No hooks were run.
-------------------------------------------------------------------------------
うむ、とても満足です。
3. cron への登録
前項のスクリプトを定期的に実行するように、「cron」へ登録します。
末尾で紹介している、参考サイトには興味深い話が書いてあります。
「『cron』で『--force-renewal』を使用しない」というのは納得です。
というかあたりまえか、更新が発生していないのに更新するのはナンセンスです。
アクセスする時刻をランダムにするというのは、当初納得していましたが・・・。
最近はそうでもない。
負荷を考えるといっても、相手が一体、何台相手にしているの?という話で。
こちらの1台や2台が遠慮したところで、負荷には影響しないと考えます。
「00:00」に動作しても、日本であれば、「UTC」から 9 時間ずれている。
全世界、「00:00」としても、単純計算で48分の1になるわけです。
なので、ディレイはやめました。
それよりも、「cron」の動作を毎日でないようにすべきです。
「Let\'s Encrypt」が、発行する証明書の有効期限は、90日。
残り、30日以内になって、更新確認すると、更新してくれます。
つまり、残り 30日の間に更新しちゃえば、問題ないわけです。
週1回、更新確認するとすれば、30日の間に、4回、更新するチャンスがあります。
じゅうぶん間に合うでしょ。
シェルスクリプト名を「script.sh」として。
0 2 * * 2 root /path/script.sh
「root」の直前の数字が、曜日を表していて、0 が日曜日です。
なので、毎週火曜日 02:00 に実行することになります。
02:00 にしたのは、「daily run」「daily security run 」あたりに遠慮しております。
日曜日、月曜日をさけたのは、休みの日は、ログをチェックしたくないからです。
(今は、ハッピーマンデーとかのせいで、月曜日の休みも結構多いのだ)
4. 自動更新確認
でこれを書いているのが、当初、毎日実行していた時の、2018年2月17日の朝なのです。
2月が28日までしかないせい?なのかわからないのですが。
どうも今朝、動いたようです。
ブラウザから確認すると有効期限が「2018年5月17日」に更新されていることがわかります。
「cron」からのメールを確認してみます。(一部伏字)
Saving debug log to /var/log/letsencrypt/letsencrypt.log
-------------------------------------------------------------------------------
Processing /usr/local/etc/letsencrypt/renewal/www.example.com.conf
-------------------------------------------------------------------------------
Cert is due for renewal, auto-renewing...
Plugins selected: Authenticator standalone, Installer None
Running pre-hook command: /usr/local/etc/rc.d/apache24 stop
Output from apache24:
Stopping apache24.
Waiting for PIDS: 988.
Renewing an existing certificate
Performing the following challenges:
tls-sni-01 challenge for www.example.com
tls-sni-01 challenge for freebsd.example.com
Waiting for verification...
Cleaning up challenges
-------------------------------------------------------------------------------
new certificate deployed without reload, fullchain is
/usr/local/etc/letsencrypt/・・・
-------------------------------------------------------------------------------
-------------------------------------------------------------------------------
Processing /usr/local/etc/letsencrypt/renewal/・・・
-------------------------------------------------------------------------------
Cert is due for renewal, auto-renewing...
Plugins selected: Authenticator standalone, Installer None
Pre-hook command already run, skipping: /usr/local/etc/rc.d/apache24 stop
Renewing an existing certificate
Performing the following challenges:
tls-sni-01 challenge for freebsd.example.com
Waiting for verification...
Cleaning up challenges
-------------------------------------------------------------------------------
new certificate deployed without reload, fullchain is
/usr/local/etc/letsencrypt/live/freebsd.example.com/fullchain.pem
-------------------------------------------------------------------------------
-------------------------------------------------------------------------------
Processing /usr/local/etc/letsencrypt/renewal/・・・
-------------------------------------------------------------------------------
Cert not yet due for renewal
-------------------------------------------------------------------------------
The following certs are not due for renewal yet:
/usr/local/etc/letsencrypt/live/ns.example.com/fullchain.pem (skipped)
Congratulations, all renewals succeeded. The following certs have been renewed:
/usr/local/etc/letsencrypt/live/www.example.com/fullchain.pem (success)
/usr/local/etc/letsencrypt/live/freebsd.example.com/fullchain.pem (success)
-------------------------------------------------------------------------------
Running post-hook command: /usr/local/etc/rc.d/apache24 start
Output from apache24:
Performing sanity check on apache24 configuration:
Starting apache24.
Error output from apache24:
Syntax OK
最後の方の「Error output from apache24:」に一瞬びっくりしましたが、「apache24」からのエラーはなかったってことですな。
で、これを読んでいてはたと気づいたのが、ログのローテーションを設定していなかった?
これは、あとでおいおい。
5. 参考サイト
本ページは、下記のサイトを参考にさせていただきました。
「cronでcertbot renewの--force-renewalを使用してはいけない」
|