POP3 ポーリングの SSL 問題

本番環境の Discourse のログを定期的に確認したところ、Poll Mailbox ジョブが以下のエラーで失敗していることに気づきました。

Job exception: SSL_connect returned=1 errno=0 state=error: certificate verify failed (self signed certificate)

関連する注意点:

  • このインスタンスは、Digital Ocean 上の標準的な Discourse インストールで、LetsEncrypt 証明書を使用しています。サーバー上には他に何もありません。
  • Pop3 メールインポートは、数カ月にわたって問題なく動作していました。
  • Gmail 側で問題の兆候(不審なログインなど)は見当たりません。

同じエラーについて言及している興味深いトピックがこちらにありますが、これは実際に自己署名証明書を使用しているインストールに関するもののようです: https://meta.discourse.org/t/reply-by-email-ssl-self-signed-certificate-error/30868。

関連するサイト設定は以下の通りです:

pop3 polling enabled: true
pop3 polling ssl: true
pop3 polling openssl verify: true
pop3 polling period mins: 5
pop3 polling host: pop.gmail.com
pop3 polling port: 995
pop3 polling username: // a gmail username
pop3 polling password: // a gmail password
pop3 polling delete from server: true

当初、pop3 polling enabled の切り替えを試みましたが、効果はなく(エラーも返されませんでした)、コンテナの再構築も行いました。最終的に、pop3 polling openssl verify を false に変更したところ、Poll Mailbox ジョブは再び動作するようになりました。

現時点ではこれが何を意味するのか確信が持てませんが、とりあえず報告しておきます。

余談ですが、Poll Mailbox ジョブが失敗している場合、管理 UI somewhere にログを残すことを検討すると良いでしょう。そこでの「サイレントな」失敗やメッセージのインポート失敗は、大きな問題を引き起こす可能性があります。

「いいね!」 3

私のサイトの1つでも同じ問題が発生しています。確認しています…

「いいね!」 2

これは TLS 1.3 と Ruby の間の互換性の問題によって引き起こされました。私は 回避策をコミットしました しており、上流側でこの問題を修正できるよう努めます。

また、同意します。タイムアウトや認証エラーだけでなく、すべての POP3 エラーを管理ダッシュボードに表示すべきです。これも修正します。

「いいね!」 10