LoginSignup
2

More than 3 years have passed since last update.

Let's EncryptでSSL化したNginxサーバは、証明書更新後にreloadを忘れると古い証明書を使い続けてしまう

Posted at

この記事について

掲題の通り。
そんなの当たり前だろ、と言われてしまいそうですが、実際先日やらかしてしまったので…。
メモ兼戒めとして記事にします…。

事の発端

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化手順に関するサイトを検索し始める

対応

急いで以下のコマンドを投入してリロード実施。
実施後、証明書が更新後のものに切り替わっており、証明書エラーが解消されていることを確認。

service nginx reload

エラーが解消されたことが確認できたので、crontabを以下の通り修正。
これで今後、同事象は再現しなくなると思われる。

# 毎月20日の1:20にSSL証明書を強制的に更新した上で、Nginxのリロード実施
20 1 20 * * /usr/local/bin/certbot-auto renew --force-renewal && service nginx reload

おわりに

考えてみればreloadしないと証明書が更新されないのは当たり前なのですが、なかなか気づけず、恥ずかしい限りです。
今後は同じミスはしないよう、気を付けます…。

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2