【簡単】Let’s Encryptの自動更新をcronなしで実現しよう

【簡単】Let’s Encryptの自動更新をcronなしで実現しよう

Let's Encryptの自動更新をcronなしでやってみよう!

最近のWebサイトは、常時SSL通信に対応することがもはや当たり前になってきましたが、SSLの証明書は購入先の会社によっては非常に効果で、個人が導入するのには少しハードルが高かったという過去があります。

ですが現在では、「Let’s Encrypt」という、無料でSSLの証明書を取得できるサービスが誕生しています。

この「Let’s Encrypt」は導入するだけで何もしないと90日間で有効期限が切れてしまい、証明書として失効してしまうため、更新期限が近づいたら自動更新ができるととても便利です。

この自動更新については、少し前まではサーバに組み込まれているcronを使って実行することが一般的だったのですが、最近ではタイマーを使ってもっと簡単に実現できるようになっています

今回はその方法についてご紹介します。

Advertisement

「certbot-renew.timer」を使おう

Cent OS 7を例にして説明します。

Let’s Encryptを導入する際に

$ sudo yum install certbot

というコマンドを実行したと思いますが、そこでインストールされたcertbotコマンドの中に「certbot-renew.timer」というtimerファイルが入っています。

このtimerというファイルは、crontabの代わりに定期的にサービスを実行するための設定ファイルです。

このtimerファイルを設定することにより、たったそれだけで証明書が自動更新されるようになります。

# systemctl enable --now certbot-renew.timer

設定できているかどうか確認します。

# systemctl list-timers

NEXT LEFT LAST PASSED UNIT ACTIVATES
Fri 2020-09-22 21:44:15 JST 2h 15min left Thu 2020-09-21 21:44:15 JST 22h ago systemd-tmpfiles-clean.timer systemd-tmpfiles-clean.service
Sat 2020-09-23 04:15:18 JST 8h left Mon 2020-09-22 04:15:18 JST 8min ago certbot-renew.timer certbot-renew.service

このとき、certbot-renewNEXTに予定時刻が表示されていればOKです。

今後は1日に1回証明書の更新が自動的にチェックされます。

証明書の更新後はApacheの再起動が必要

証明書が自動で更新されても、その後Apache(もしくはNginx)を再起動しなければ、その更新は有効になりません。

# vi /etc/sysconfig/certbot

このように打ち込んで、設定ファイルを書き換えます。

# An example to restart httpd would be:
# POST_HOOK="--post-hook 'systemctl restart httpd'"
POST_HOOK="";

こちらを

# An example to restart httpd would be:
# POST_HOOK="--post-hook 'systemctl restart httpd'"
POST_HOOK="--post-hook 'systemctl restart httpd'"

のようにApacheの再起動コマンドをフックで起動できるように記述すればOKです。

Advertisement

まとめ

以前まではcrontabに書かないといけなかった、Let’s Encryptの自動更新のためのチェック処理ですが、イマイチ分かりづらかったという方も多いと思います。

Cent OS 7からはtimerのファイルが使用できるようになったため、こちらの設定をしたほうが数倍カンタンだと思いますので、自動更新でうまくいかなかった方は、こちらの方法を試してみてはいかがでしょうか。

Web開発カテゴリの最新記事