إرسال البريد الإلكتروني لا يعمل بعد الترقية

قبل بضعة أيام، قمت بترقية نظام Discourse من إصدار لا أتذكره بالتحديد، لكنني أعتقد بقوة (رغم أنني لا أستطيع الجزم بذلك) أنه كان إصدار 2.4 بيتا، إلى الإصدار الحالي 2.4.0.beta4.

لاحظت مؤخرًا أن إرسال البريد الإلكتروني لم يعد يعمل، وهناك العديد من الوظائف الفاشلة في Sidekiq. الخطأ في جميع هذه الوظائف هو: “Jobs::HandledExceptionWrapper: Wrapped OpenSSL::SSL::SSLError: SSL_connect returned=1 errno=0 state=error: unsupported protocol”.

إعدادات البريد الإلكتروني تشير إلى خادم بريد قديم لي (يعمل بشكل صحيح مع جميع العملاء من أنواع مختلفة)، على المنفذ 587 مع مصادقة عادية، وتم تعيين enable_starttls_auto إلى true. وقد عملت الإعدادات بشكل جيد منذ أن قمت بإعداد Discourse في وقت سابق من هذا العام، لذا فأنا متأكد إلى حد كبير أن المشكلة بدأت منذ آخر ترقيات. لم يتغير نظام التشغيل أو يتم ترقيته خلال هذه الفترة، ولم يتغير خادم البريد أيضًا.

قرأت الرابط Discourse Version 2.4 ولم أجد أي شيء يتعلق بالبريد الإلكتروني أو OpenSSL هناك.

السؤال الأول: أين يمكنني معرفة الإصدار الذي تم الترقية منه في آخر ترقية والإصدار الذي سبقه، حتى أستطيع تتبع الإصدارات التي استخدمتها؟

السؤال الثاني: أين يمكنني العثور على طوابع زمنية أكثر تحديدًا حول متى بدأت وظائف البريد في الفشل؟ لقد نقرت على وظيفة في Sidekiq وأخبرني أنها تم إنشاؤها قبل يومين، وهو ما أعتقد أنه يتوافق مع وقت الترقية. لكنني أود التحقق من أن وظائف البريد لم تفشل قبل ذلك.

السؤال الثالث: من المفترض أن شيئًا ما يتعلق بـ OpenSSL تغير في الإصدار الذي بدأت بتشغيله (مقارنة بالإصدار الذي كنت أستخدمه سابقًا). ما الذي يمكن أن يكون قد تغير، وهل هناك إعداد في أي مكان يمكنني تعديله؟ أم يجب أن أحاول التراجع عن الإصدار؟ أو هل هناك أي طريقة للحصول على معلومات إضافية من معالجة الوظائف حتى أتمكن من معرفة البروتوكول الذي يشتكي منه؟

واحدة لك @gerhard :wink:

هل يمكنك محاولة الاتصال بخادم SMTP من داخل حاوية Docker؟

openssl s_client -connect <hostname>:<port> -starttls smtp

هل يعمل؟ أي بروتوكول يختار؟ يجب أن ترى شيئًا مثل هذا في نهاية المخرجات:

SSL-Session:
    Protocol  : TLSv1.2
    Cipher    : ECDHE-RSA-AES128-GCM-SHA256

أو عند استخدام TLS 1.3:

New, TLSv1.3, Cipher is TLS_AES_256_GCM_SHA384

إليك أربعة تشغيلات داخل Docker:

root@foo-app:/# openssl s_client -connect mail.foo.com:587 -starttls smtp
CONNECTED(00000003)
139861698753664:error:1425F102:SSL routines:ssl_choose_client_version:unsupported protocol:../ssl/statem/statem_lib.c:1922:
---
لا توجد شهادة نظير متاحة
---
لم يتم إرسال أسماء سلطة الشهادات الخاصة بشهادات العميل
---
تم قراءة 320 بايت وكتابة 353 بايت خلال مصافحة SSL
التحقق: OK
---
جديد، (NONE)، التشفير هو (NONE)
إعادة التفاوض الآمنة غير مدعومة
الضغط: NONE
التوسيع: NONE
لم يتم التفاوض على ALPN
لم يتم إرسال البيانات المبكرة
رمز إرجاع التحقق: 0 (مقبول)
---
root@foo-app:/#
root@foo-app:/#
root@foo-app:/# openssl s_client -connect mail.foo.com:587 -starttls smtp -tls1_1
CONNECTED(00000003)
140427988595840:error:1425F102:SSL routines:ssl_choose_client_version:unsupported protocol:../ssl/statem/statem_lib.c:1922:
---
لا توجد شهادة نظير متاحة
---
لم يتم إرسال أسماء سلطة الشهادات الخاصة بشهادات العميل
---
تم قراءة 320 بايت وكتابة 174 بايت خلال مصافحة SSL
التحقق: OK
---
جديد، (NONE)، التشفير هو (NONE)
إعادة التفاوض الآمنة غير مدعومة
الضغط: NONE
التوسيع: NONE
لم يتم التفاوض على ALPN
جلسة SSL:
    البروتوكول  : TLSv1.1
    التشفير    : 0000
    معرف الجلسة:
    سياق معرف الجلسة:
    المفتاح الرئيسي:
    هوية PSK: None
    تلميح هوية PSK: None
    اسم مستخدم SRP: None
    وقت البدء: 1568985038
    المهلة   : 7200 (ثانية)
    رمز إرجاع التحقق: 0 (مقبول)
    المفتاح الرئيسي الممتد: لا
---
root@foo-app:/#
root@foo-app:/#
root@foo-app:/# openssl s_client -connect mail.foo.com:587 -starttls smtp -tls1_2
CONNECTED(00000003)
140184139936896:error:1425F102:SSL routines:ssl_choose_client_version:unsupported protocol:../ssl/statem/statem_lib.c:1922:
---
لا توجد شهادة نظير متاحة
---
لم يتم إرسال أسماء سلطة الشهادات الخاصة بشهادات العميل
---
تم قراءة 320 بايت وكتابة 258 بايت خلال مصافحة SSL
التحقق: OK
---
جديد، (NONE)، التشفير هو (NONE)
إعادة التفاوض الآمنة غير مدعومة
الضغط: NONE
التوسيع: NONE
لم يتم التفاوض على ALPN
جلسة SSL:
    البروتوكول  : TLSv1.2
    التشفير    : 0000
    معرف الجلسة:
    سياق معرف الجلسة:
    المفتاح الرئيسي:
    هوية PSK: None
    تلميح هوية PSK: None
    اسم مستخدم SRP: None
    وقت البدء: 1568985044
    المهلة   : 7200 (ثانية)
    رمز إرجاع التحقق: 0 (مقبول)
    المفتاح الرئيسي الممتد: لا
---
root@foo-app:/#
root@foo-app:/#
root@foo-app:/# openssl s_client -connect mail.foo.com:587 -starttls smtp -tls1_3
CONNECTED(00000003)
write:errno=0
---
لا توجد شهادة نظير متاحة
---
لم يتم إرسال أسماء سلطة الشهادات الخاصة بشهادات العميل
---
تم قراءة 262 بايت وكتابة 278 بايت خلال مصافحة SSL
التحقق: OK
---
جديد، (NONE)، التشفير هو (NONE)
إعادة التفاوض الآمنة غير مدعومة
الضغط: NONE
التوسيع: NONE
لم يتم التفاوض على ALPN
لم يتم إرسال البيانات المبكرة
رمز إرجاع التحقق: 0 (مقبول)
---
root@foo-app:/#

أرى رسالة خطأ “بروتوكول غير مدعوم” عند إجبار استخدام TLS بخلاف الإصدار 1.3 (باستخدام وسيطات إضافية لأمر openssl، انظر أدناه)، ورسالة “write:errno=0” فقط عند إجبار استخدام TLS 1.3. مع الأمر الخاص بك (بدون إجبار إصدار TLS محدد)، لا أرى أي إصدار محدد يُستخدم أو يُحاول.

إذا أمكن لأي شخص الإجابة على الأسئلة رقم 1 و2، فسيكون ذلك مفيدًا. أحتاج إلى التفكير في إمكانية التراجع عن الإصدار في أقرب وقت ممكن، ولكي أفعل ذلك، أحتاج إلى معرفة آخر إصدار كان يعمل بشكل صحيح.

أصبح لدي الآن 3682 وظيفة بريد إلكتروني فاشلة في طابور الانتظار. رسائل التحقق من إنشاء الحساب لا تُرسل، ولا أي شيء آخر.

يرجى تحرير /var/discourse/launcher واستبدال إصدار صورة القاعدة (image="discourse/base:2.0.20190906-0522") في السطر 91 بـ image="discourse/base:2.0.20190625-0946"

أعد بناء الحاوية بعد ذلك وشغّل الأوامر التي شغّلتها في E-mail sending not working after upgrade - #4 by rawtaz. لن يعمل TLS 1.3، ولكن هل مخرجات الأوامر الأخرى متشابهة؟ إذا لم تكن كذلك، فما الفرق؟

هل يمكنك إرسال رسالة خاصة لي باسم المضيف (hostname) لـ SMTP في حال كان متاحًا علنًا؟

شكرًا لك يا @gerhard! اقتراحك حل المشكلة. قمت بتغيير إصدار صورة الأساس وأعدت البناء، وعلى الفور بدأ المنتدى في إرسال رسائل البريد الإلكتروني المجدولة (حوالي 10 آلاف :D).

أعدت تشغيل الأوامر داخل الحاوية وحصلت على مخرجات أخرى (ناجحة). تحتوي هذه المخرجات على شهادات ومجموعة أخرى من العناصر، لذا ما لم تكن بحاجة فعلية إليها، أفضل عدم لصقها هنا. أخبرني إذا كان ذلك يمثل مشكلة وتحتاج إليها حقًا.

سأراسلك بشكل خاص باسم مضيف خادم البريد حتى تتمكن من استكشاف هذه المشكلة ومعالجتها بتفصيل أكبر - من فضلك احتفظ بها لنفسك :slight_smile: شكرًا!

تعديل: سأشير إلى مشاركتك الأخيرة كحل لأنها حلت المشكلة. ومع ذلك، من الواضح أننا بحاجة إلى تحديد ما يسبب ذلك في صورة الأساس الأحدث، حتى يتمكن المرء من التحديث في المستقبل.

نعم، البقاء على الصورة القديمة ليس حلاً طويل الأمد. تلك الصورة غير مدعومة فعليًا، وقد تبدأ الأمور في التعطّل…

هذه المشكلة مشابهة لـ Email SSL Errors after Update to 2.4.0.beta4. أقترح عليك تحديث SMTP لاستخدام TLSv1.2 وحجم مفتاح DH لا يقل عن 2048 بت.

كحل بديل، يجب أن تتمكن من إضافة أوامر sed إلى قسم run في نهاية ملف app.yml لإزالة الإعدادين التاليين من ملف /etc/ssl/openssl.cnf.

MinProtocol = TLSv1.2
CipherString = DEFAULT@SECLEVEL=2