はじめに
Let’sEncryptからメールが来ました。後数日で証明書の期限が切れるよ、と。
KUSANAGIの自動更新設定はONにしていることは確認していたのでそんなはずはないと思いながらも以下のコマンドで期限を確認してみました。(8/17頃)
openssl x509 -in /etc/letsencrypt/live/[FQDN]/fullchain.pem -noout -dates
期限は以下の通り。
notBefore=May 29 00:48:22 2022 GMT
notAfter=Aug 27 00:48:21 2022 GMT
更新されていませんでした。
一応手動でupdate
kusanagi update cert
・・・反応が無い。Ctrl+Cで止めて、以下のコマンドで再度確認。
certbot renew
以下のようなエラーが出て途中で止まりました。
Certbot failed to authenticate some domains (authenticator: webroot). The Certificate Authority reported these problems:
Type: unauthorized
Invalid response from https://[FQDN]/.well-known/acme-challenge/*******: 404
Hint: The Certificate Authority failed to download the temporary challenge files created by Certbot. Ensure that the listed domains serve their content from the provided --webroot-path/-w and that files created there can be downloaded from the internet.
Failed to renew...
.well-knownというパスが見つからないとのこと。
原因
原因特定に時間がかかってしまいましたが、どうやら以下のフォーラムに記載の内容にヒントがありそうでした。
DocumentRoot 配下に .well-known ディレクトリと認証用ファイルを設置し、Let’s Encrypt のサーバ側からアクセスして検証を行います。
確かに、Laraveを使う上でDocumentRootは削除しました。
とのことです。
質問者の方と同様に私もDocumentRootは使用していませんでした。
対策
DocumentRootという名前のシンボリックリンクを作成
/home/kusanagi/[profile名]/直下にDocumentRootという名前で、Lravelプロジェクトのpublicにリンクするシンボリックリンクを作成します。
ln -s /home/kusanagi/[profile名]/[Laravelプロジェクト名]/public DocumentRoot
DocumentRootの権限調整
元々設定されていた777に設定する。
chmod 777 DocumentRoot
Nginxの設定ファイルをもとに戻す
元々、配置していたLaravelプロジェクトのpublicを直接参照するようにNginxの設定ファイルを書き換えていました。これをシンボリックリンクのDocumentRootを指定するように修正(元に戻)します。(こっちの方が、Nginxの設定ファイルを何も調整したり気にしたりしなくていいので逆にシンプルになってよかったなと思いました。)
/etc/opt/kusanagi/nginx/conf.d/[profile名].conf
root /home/kusanagi/[profile名]/DocumentRoot;
ここまでで準備は完了
更新処理を実行します
kusanagi update cert
update completed.
無事に成功しました。
notBefore=Aug 26 15:26:28 2022 GMT
notAfter=Nov 24 15:26:27 2022 GMT
※更新後は必ずNginxを再起動してください。
kusanagi restart
以上です。