OAuth2とLetsencryptの衝突

Ubuntu上で実行しているDiscourse Dockerコンテナ(DOテンプレートから作成)で、「カスタムOAuth2」を有効にしています。これは非常にうまく機能していますが、Letsencrypt証明書の更新に失敗します。

問題を追跡したところ、ログから更新スクリプトがCronによって実行されていることは確認できましたが、チャレンジコールバックがOAuth2 IDPにリダイレクトされるため、チャレンジが拒否されています。

以下は(編集済みの)ログです。
\[Wed Jan 28 12:40:32 PM UTC 2026\] Renewing: ‘community.site’
\[Wed Jan 28 12:40:32 PM UTC 2026\] Renewing using Le_API=https://acme-v02.api.letsencrypt.org/directory
\[Wed Jan 28 12:40:33 PM UTC 2026\] Using CA: https://acme-v02.api.letsencrypt.org/directory
\[Wed Jan 28 12:40:33 PM UTC 2026\] Single domain=‘community.site’
\[Wed Jan 28 12:40:35 PM UTC 2026\] Getting webroot for domain=‘community.site’
\[Wed Jan 28 12:40:35 PM UTC 2026\] Verifying: community.site
\[Wed Jan 28 12:40:36 PM UTC 2026\] Pending. The CA is processing your order, please wait. (1/30)
\[Wed Jan 28 12:40:40 PM UTC 2026\] community.site: Invalid status. Verification error details: 1.2.3.4: Invalid response from https://oauth.site/authorize?client_id=xxx
\[Wed Jan 28 12:40:40 PM UTC 2026\] Please check log file for more details: /shared/letsencrypt/acme.sh.log
\[Wed Jan 28 12:40:40 PM UTC 2026\] Error renewing community.site.

アプリを再ビルドすると、次の3か月間は問題が解決しますが、根本的に修正したいと考えています。何か提案はありますか?

よろしくお願いします。

ここに明白なものがあるようには見えませんが、正直なところ、セットアップをリバースプロキシの背後に置き、そこでSSLを終了させ、代わりにDNS検証を使用するだけでしょう。(これは単なる回避策であり、問題が不明なため解決策ではありません)

問題に関する詳細情報:
http://community.site/.well-known/… への着信 acme-challenge リクエストを確認できます。
それは https://community.site/ にリダイレクトされ、その後 /oauth_basic にリダイレクトされます。2番目のリダイレクトは完全に予期されていますが、最初のものは予期されていません。
着信チャレンジリクエストは access.log に表示されますが、access.letsencrypt.log は空です。
ポート 80 へのすべてのリクエストに対して、常に 301 https://community.site を返すように見える /etc/nginx/conf.d/outlets/before-server/20-redirect-http-to-https.conf を見つけました。

その問題は昨年8月に修正されました。letsencrypt updates: renew location for .well-known, add support for … · discourse/discourse_docker@ae4887a · GitHub

「いいね!」 2

興味深いですね。アプリを11月26日にリビルドしたので、その時点で修正が含まれているはずだと思いますが…。

いずれにせよ、皆さん助けてくれてありがとうございます。トピックをクローズし、次のリビルド後に問題が再発しないことを願っています。

ああ、もっと続きがあったのですね。そのトピックのこちらから最後までを読んでいただければ、12月22日に別の修正があったことがお分かりいただけるでしょう。それがあなたが遭遇した理由を説明しています。

「いいね!」 2

コミットを確認しましたが、インストールされています。しかし、そこに間違いがあると思います。

return 301 https://${DISCOURSE_HOSTNAME}$request_uri;

return 301 https://${DISCOURSE_HOSTNAME}\\$request_uri;

であるべきです。

もし私が間違っていたら訂正してください。

私が言及した他の修正はまさにそれで、修正されます

「いいね!」 2

改めて、大変参考になりました!

「いいね!」 1