LetsEncrypt証明書が更新されていません

皆さん、こんにちは。Let’s Encrypt の証明書が 4 日に期限切れになり、更新の試みはすべて失敗しました。同様の問題を抱えている方々の投稿をいくつか読みましたが、コンテナの再構築や手動での更新コマンドの実行など、それらの解決策はどれも私には効果がありませんでした。

ガイドのトラブルシューティングセクションに従ったところ、ログにエラーがあることがわかりました (./launcher logs app)。

[Fri Dec  6 05:30:05 PM UTC 2024] CA を使用中: https://acme-v02.api.letsencrypt.org/directory
[Fri Dec  6 05:30:05 PM UTC 2024] マルチドメイン='DNS:discourse.[DOMAIN1].org,DNS:discourse.[DOMAIN1].org,DNS:[DOMAIN2].org'
[Fri Dec  6 05:30:05 PM UTC 2024] 各ドメインの認証トークンを取得中
[Fri Dec  6 05:30:07 PM UTC 2024] ドメインの webroot を取得中='discourse.[DOMAIN1].org'
[Fri Dec  6 05:30:08 PM UTC 2024] ドメインの webroot を取得中='discourse.[DOMAIN1].org'
[Fri Dec  6 05:30:08 PM UTC 2024] ドメインの webroot を取得中='[DOMAIN2].org'
[Fri Dec  6 05:30:08 PM UTC 2024] 検証中: discourse.[DOMAIN1].org
[Fri Dec  6 05:30:08 PM UTC 2024] 保留中、CA が注文を処理中です。しばらくお待ちください。(1/30)
[Fri Dec  6 05:30:12 PM UTC 2024] 保留中、CA が注文を処理中です。しばらくお待ちください。(2/30)
[Fri Dec  6 05:30:15 PM UTC 2024] 保留中、CA が注文を処理中です。しばらくお待ちください。(3/30)
[Fri Dec  6 05:30:19 PM UTC 2024] 保留中、CA が注文を処理中です。しばらくお待ちください。(4/30)
[Fri Dec  6 05:30:22 PM UTC 2024] 成功
[Fri Dec  6 05:30:22 PM UTC 2024] 検証中: discourse.[DOMAIN1].org
[Fri Dec  6 05:30:23 PM UTC 2024] 成功
[Fri Dec  6 05:30:23 PM UTC 2024] 検証中: [DOMAIN2].org
[Fri Dec  6 05:30:23 PM UTC 2024] 保留中、CA が注文を処理中です。しばらくお待ちください。(1/30)
[Fri Dec  6 05:30:27 PM UTC 2024] [DOMAIN2].org:検証エラー:198.49.23.145: http://[DOMAIN2].org/.well-known/acme-challenge/ohJAvgwBR81O8qmzsMPx-ZnmxoKOPAfuGCz0VZJeFWk からの応答が無効です: 404
[Fri Dec  6 05:30:27 PM UTC 2024] 詳細についてはログファイルを確認してください: /shared/letsencrypt/acme.sh.log
CN = discourse.[DOMAIN1].org
エラー 10、0 深さルックアップ: 証明書が期限切れです
エラー fullchain.cer: 検証に失敗しました

まず、ここに 2 つのドメインが表示されるのはなぜですか?証明書は、Discourse インスタンスが存在する DOMAIN1 にのみ必要です。DOMAIN2 は当社の SMTP リレーホストであり、すでに証明書を持っています。

次に、Let’s Encrypt のログファイル(/shared/letsencrypt/acme.sh.log)は、指定された場所には存在しないか、少なくとも見つけることができません。

最も重要なことは、スクリプトが DOMAIN2 を参照しないようにし、DOMAIN1 の証明書を正常に更新する方法があるかどうかです。

「いいね!」 1

これは標準的なインストールですか?リバースプロキシはありますか?

Digital Oceanのドロップレットで実行しており、スクリプトを使用してインストールしましたが、それは標準的なインストールと見なされるものだと思います。DNSはCloudflareが管理していますが、オレンジ色の雲はオフになっています。私の知る限り、リバースプロキシは存在しません。

「いいね!」 1

そのIPアドレスはDiscourseではありません。DNSが壊れていますか?複数のAレコードがありますか?

ホスト名は何ですか?

はい、そのIPアドレスは弊社が所有する別のドメインである[DOMAIN2]のもので、Discourseとは全く関係ありません。それが私の当初の質問に戻るのですが、なぜそのドメインとIPがログに表示されるのでしょうか?

DNSは正常に機能しています。期限切れの証明書に関するブラウザの警告をバイパスすれば、サイトにアクセスできます。Discourse以外の弊社のウェブサイトも問題なく動作しています。弊社のホスト名(Discourseのもので、もう一方のものではありません)はdiscourse.gomomentum.orgです。

「いいね!」 1

これは難しい問題でした!Let’s Encrypt が間違ったホストに接続する理由が見つかりませんでした。原因は 必ずしも DNS ではありませんでした。

tl;dr: ベアドメイン用の証明書を Discourse 用のものに加えて Let’s Encrypt に取得するように指示し、その後ベアドメインの DNS を別のサイトに向くように変更しました。

長いバージョン . . .

ある日、discourse.gomomentum.org だけでなく gomomentum.org のリクエストも処理するように Discourse にしたいと考え、app.yml に以下の説明に従ってセクションを追加しました: Set up Let’s Encrypt with multiple domains / redirects

そのため、Let’s Encrypt のリクエストは、両方 のドメインが元々 Discourse サーバーに向いていることを確認しました。

これにより、SOME OTHER DOMAIN のリクエストが Let’s Encrypt に送信されていた理由が説明されます。

その後、おそらく数年後ですが、過去 3 か月以内に、gomomentum.org を Discourse サイトではなくメインサイトに向けることにしました。その時点で Let’s Encrypt は機能しなくなりましたが、証明書の有効期間は 3 か月なので、この問題が発生した時点では、DNS 変更と証明書の更新が機能しないことを関連付けることはほとんど不可能でした。

app.yml からそのセクションを削除し、再構築したところ、元通り機能するようになりました!

「いいね!」 3

:man_facepalming: 思い出しました。数ヶ月前にメールの問題があったときに、ドメイン関連のことで色々いじっていたのを思い出しました。これは、当時私が試行錯誤したことによる意図しない副作用のようです。ジェイ、ありがとう!

「いいね!」 1