はじめに
- 本記事は、備忘録としてまとめたものになります。
- 他の方の参考になる可能性も踏まえて、一般公開も行なっております。
- また記載内容はすべて、正しい内容が記載されているとは限りません。
- 誤った内容を見つけた場合は、ご指摘をお願いいたします。
この記事は誰向けの記事か?
- Let's Encryptの証明書の有効期限が切れてしまい、更新したい管理者
- Let's Encryptを使用したアプリケーションへアクセスできない状態になっている管理者またはユーザー
背景
- Techcampにて作成したアプリをSSL化するために、Let's Encryptを使用した。
- しかし突然、アクセスすることができなくなってしまったため、調査と対処を行なった。
運用環境
以下はアプリへアクセスする際に使用していたブラウザの詳細になります。
- OS:macOS 13.1(22C65)
- ブラウザ:Google Chrome バージョン: 111.0.5563.146(Official Build) (arm64)
以下はアプリ/サーバー環境の情報になります。
- 開発言語:Ruby on Rails
- 開発環境:AWS(EC2、Route53)、Nginx
- その他:Let's Encrypt
調査
アプリへアクセスすると、以下のような状況となっていたことを確認した。
エラー内容:この接続ではプライバシーが保護されません
通信内容を確認すると、以下のような状況となっていた。
エラー内容:このサイトへの接続は保護されていません 証明書が無効です
原因:証明書を確認すると、有効期限が日時を経過してしまっていた。
この問題に対しての対処法
- クライアント側
対処する方法はありません。サーバー管理者に問い合わせて、証明書を更新してもらえるまで待つしかない。 - サーバー管理者側
証明書を更新しなければならない。
対処
対処するため、Let's Encryptの証明書を以下の手順で更新した。
EC2へログインする
CRONの内容を確認し、自動更新の設定を確認する
結果としては、1時と13時にルート権限で自動更新する設定がされていた。
しかしなぜ自動更新されていないのかがわからないため、これについては別途調査が必要。
$ sudo crontab -e
または
$ sudo crontab -l
手動にて更新を行う
SSL証明書の有効期限の確認する
$ certbot certificates
または
$ sudo certbot certificates
更新前にチェックをする
この段階でエラーが出るようであれば、更新は成功しない。
$ sudo certbot renew --dry-run
更新する
以下のコマンドを実行することで、SSL証明書の更新が行われる。
$ sudo certbot renew
アクセスできるかを確認する
その結果、アプリケーションへアクセスすることに成功し、SSL証明書が更新されていることを確認できた。
自動更新されていない問題について
CRONをリスタートしてみる
リスタートし、直して様子見をすることとなった。
$ sudo systemctl restart crond