Let’s encryptのSSL証明書の更新で困らないために

インフラ, 開発

またこの日が来ました。ドメインの変更時にLet’s encrypt でSSL証明書の発行をしてから90日が経過することになります。いつものようにメールにて期限が近づいているという内容で送られてきました。更新のコマンドを実行するだけで良さそうですが毎度のことエラーが出てしまって困っていたので、この機会なので自動かも含めてやっていきたいと思います。

certbot –dry-run を実行

ここでエラーが発生!

produced an unexpected error: Problem binding to port 80: Could not bind to IPv4 or IPv6.. Skipping.
The following certs could not be renewed:

こちらのエラーに関してはすぐに解決をすることができました。エラーの原因は、certbotを実行時にapatcheを起動していたため、証明書の更新時にはapatcheを停止しておく必要があるようです。

更新時にapatcheを停止して更新後に再起動するように

 certbot renew --dry-run --pre-hook "systemctl stop httpd" --post-hook "sudo systemctl  restart httpd"

を実行。–pre-hookのあとに実行したいコマンドを書く。–post-hookで終わったらapatcheの再起動をしています。

更新の自動化

crontabの設定

今回更新に使ったコマンドをシェルファイルに書き込んで、シェルファイルを定期実行することにしました。

0 3 * * * /etc/letsencrypt/letsencrypt-renew.sh

こちらの記述によって、毎日3時にシェルが叩かれ実行されます。仕様上、期限が近づかないと更新ができないようです。