قبل بضعة أيام، قمت بترقية نظام 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 تغير في الإصدار الذي بدأت بتشغيله (مقارنة بالإصدار الذي كنت أستخدمه سابقًا). ما الذي يمكن أن يكون قد تغير، وهل هناك إعداد في أي مكان يمكنني تعديله؟ أم يجب أن أحاول التراجع عن الإصدار؟ أو هل هناك أي طريقة للحصول على معلومات إضافية من معالجة الوظائف حتى أتمكن من معرفة البروتوكول الذي يشتكي منه؟
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، فسيكون ذلك مفيدًا. أحتاج إلى التفكير في إمكانية التراجع عن الإصدار في أقرب وقت ممكن، ولكي أفعل ذلك، أحتاج إلى معرفة آخر إصدار كان يعمل بشكل صحيح.
يرجى تحرير /var/discourse/launcher واستبدال إصدار صورة القاعدة (image="discourse/base:2.0.20190906-0522") في السطر 91 بـ image="discourse/base:2.0.20190625-0946"
شكرًا لك يا @gerhard! اقتراحك حل المشكلة. قمت بتغيير إصدار صورة الأساس وأعدت البناء، وعلى الفور بدأ المنتدى في إرسال رسائل البريد الإلكتروني المجدولة (حوالي 10 آلاف :D).
أعدت تشغيل الأوامر داخل الحاوية وحصلت على مخرجات أخرى (ناجحة). تحتوي هذه المخرجات على شهادات ومجموعة أخرى من العناصر، لذا ما لم تكن بحاجة فعلية إليها، أفضل عدم لصقها هنا. أخبرني إذا كان ذلك يمثل مشكلة وتحتاج إليها حقًا.
سأراسلك بشكل خاص باسم مضيف خادم البريد حتى تتمكن من استكشاف هذه المشكلة ومعالجتها بتفصيل أكبر - من فضلك احتفظ بها لنفسك شكرًا!
تعديل: سأشير إلى مشاركتك الأخيرة كحل لأنها حلت المشكلة. ومع ذلك، من الواضح أننا بحاجة إلى تحديد ما يسبب ذلك في صورة الأساس الأحدث، حتى يتمكن المرء من التحديث في المستقبل.