この記事について
掲題の通り。
そんなの当たり前だろ、と言われてしまいそうですが、実際先日やらかしてしまったので…。
メモ兼戒めとして記事にします…。
事の発端
2020年2月半ばごろ、個人でとあるWebアプリケーションの運用を開始した。
フロントエンドがNginx + vue.js、バックエンドがPython(Flask) + uWSGIという構成。
NginxはSSL化しており、SSL証明書はLet's Encryptで発行したもの。
証明書の更新は自動化しようと思い、crontabに以下を登録した。
# 毎月20日の1:20にSSL証明書を強制的に更新する
20 1 20 * * /usr/local/bin/certbot-auto renew --force-renewal
事象発生
2020年5月1日、上記のWebアプリケーションに接続しようとすると証明書エラーが出た。
これを受けて調査を開始する。
- エラーとなっている証明書の内容を確認
- 4/30で期限切れとなっていた。初回発行時の証明書のままと気づき、証明書更新が行われていないことを疑う
- crontabに設定した証明書更新ジョブが動いているか確認
- 動いており、証明書は7月中に期限が切れるものに更新されていた。更新はできているがNginxに反映されてないと気付くも、reloadのし忘れにはまだ気づかず
- NginxのSSL化手順に関するサイトを検索し始める
- Nginxのroloadをしないと証明書が反映されないと書いているページを発見。ここでようやく原因に気づいた
対応
急いで以下のコマンドを投入してリロード実施。
実施後、証明書が更新後のものに切り替わっており、証明書エラーが解消されていることを確認。
service nginx reload
エラーが解消されたことが確認できたので、crontabを以下の通り修正。
これで今後、同事象は再現しなくなると思われる。
# 毎月20日の1:20にSSL証明書を強制的に更新した上で、Nginxのリロード実施
20 1 20 * * /usr/local/bin/certbot-auto renew --force-renewal && service nginx reload
おわりに
考えてみればreloadしないと証明書が更新されないのは当たり前なのですが、なかなか気づけず、恥ずかしい限りです。
今後は同じミスはしないよう、気を付けます…。