背景
- この記事は、以下の記事で起こったことを調査したものになります。
https://qiita.com/portfoliokns3/items/b356a79dbd68a3223e30 - Let's EncryptのSSL証明書の有効期限を自動更新するように設定していたものの、自動で更新されていなかったため、その調査をした記事になります。
結論
- 調査し、原因を突き止めようとしましたが、根本的な原因は判明しておりません。
- CRONのログを確認したところ、毎時1時と13時にCRONは実行されていたことを確認しました。
- Certbotのログを確認したところ、ログファイル自体が存在しなかったことを確認しました。
調査①:CRONのログを確認
以下のコマンドで、CRONのログを確認したところ、毎時、1時と13時にCRONが実行されていることを確認した。
sudo vim /var/log/cron
Jun 12 01:00:01 ip-***-**-**-*** CROND[22374]: (root) CMD (root certbot renew --no-self-upgrade)
Jun 15 01:00:01 ip-***-**-**-*** CROND[13615]: (root) CMD (root certbot renew --no-self-upgrade)
調査②:Certbotのログファイルを確認
以下のコマンドで、Certbotのログファイルを確認したところ、毎日書き込まれているはずのログファイルが見当たらなかった。
sudo ls -l /var/log/letsencrypt
-rw-r--r-- 1 root root 37410 6月 15 07:30 letsencrypt.log
-rw-r--r-- 1 root root 1632 6月 15 07:29 letsencrypt.log.1
-rw-r--r-- 1 root root 5773 1月 4 06:30 letsencrypt.log.10
-rw-r--r-- 1 root root 9401 1月 4 06:29 letsencrypt.log.11
-rw-r--r-- 1 root root 1632 6月 15 07:27 letsencrypt.log.2
-rw-r--r-- 1 root root 9657 1月 3 11:36 letsencrypt.log.20
-rw-r--r-- 1 root root 14582 1月 2 16:19 letsencrypt.log.29
-rw-r--r-- 1 root root 1632 6月 15 07:27 letsencrypt.log.3
-rw-r--r-- 1 root root 14582 1月 2 16:10 letsencrypt.log.30
-rw-r--r-- 1 root root 0 1月 2 15:43 letsencrypt.log.37
-rw-r--r-- 1 root root 37109 4月 4 10:44 letsencrypt.log.4
-rw-r--r-- 1 root root 40045 4月 4 10:42 letsencrypt.log.5
-rw-r--r-- 1 root root 1128 4月 4 10:41 letsencrypt.log.6
-rw-r--r-- 1 root root 15731 1月 4 14:27 letsencrypt.log.7
-rw-r--r-- 1 root root 9311 1月 4 14:19 letsencrypt.log.8
-rw-r--r-- 1 root root 8826 1月 4 10:51 letsencrypt.log.9
主に書き込まれた月が、1月、4月、6月のファイルしかありませんでした。CRONで毎日更新が行われているのであれば、ここのフォルダにログファイルが書き込まれているはずですが、ありませんでした。また一部ファイルの中身も確認しましたが、それらしいログはなく、手動で更新した際のログはありました。
- 1月:Let's Encryptを導入
- 4月:SSH証明書の有効期限を手動で更新
- 6月:本記事で色々と操作
調査③:手動で更新し、ログを確認
以下のコマンドを手動で実行し、Certbotのログを確認しました。
sudo certbot renew --no-self-upgrade
sudo vim /var/log/letsencrypt/letsencrypt.log
※情報量が多いので、エビデンスの掲載は省略。
調査①〜③でわかったこと
手動でCertbotを更新することができているので、CRONでの更新がうまくいっていないことがわかりました。しかし、それ以上の原因が突き止められなかったため、とりあえず、CRONの実行処理で問題があると見て、検討しました。その結果、実行時の権限に問題があるのでは、ということに気づき、調査④を実行してみた。
調査④:sudoをCRONに追加
CRONと手動実行で比較したときに、sudoによる権限に差があったので、試しにsudoを追記してみました。
$ sudo crontab -e
0 1 16 * * root sudo certbot renew --no-self-upgrade
運用環境
以下はアプリへアクセスする際に使用していたブラウザの詳細になります。
- OS:macOS 13.4(22F66)
- ブラウザ:Google Chrome バージョン: 114.0.5735.106(Official Build) (arm64)
以下はアプリ/サーバー環境の情報になります。
- 開発言語:Ruby on Rails
- 開発環境:AWS(EC2、Route53)、Nginx
- その他:Let's Encrypt
はじめに
- 本記事は、備忘録としてまとめたものになります。
- 他の方の参考になる可能性も踏まえて、一般公開も行なっております。
- また記載内容はすべて、正しい内容が記載されているとは限りません。
- 誤った内容を見つけた場合は、ご指摘をお願いいたします。