その他

[KUSANAGI(lamp)×Laravel]Let’s Encrypt SSL証明書の更新に失敗した

はじめに

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

以上です。

COMMENT

メールアドレスが公開されることはありません。