مشكلة في SSL بعد العديد من عمليات إعادة البناء

ثالث منشور على التوالي… لأنه عندما أقوم بالتعديل، أظن أنه لا يظهر في الردود الجديدة.

لقد فعلت كل ما قلتم. لقد استوردت كل شيء. تم إيقاف أداة الاستيراد، وتم تشغيل التطبيق. لكن لا يزال لا يمكنني الاتصال بموقعي :frowning:

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

…أضع أصابعي على الأمل في أن يعرف أحد الإجابة

من الصعب تقديم إجابة مع هذه المعلومات المحدودة. كل ما نعرفه هو أن موقعك غير قابل للوصول.

  • هل تفحصت السجلات؟ ماذا تقول؟
  • هل انتظرت بضع لحظات إضافية بعد بدء التطبيق؟ فقد يستغرق الأمر بعض الوقت قبل أن يصبح الموقع قابلًا للوصول.

نظرًا لعدد المشاركات هنا المتعلقة بحالتك تحديدًا، فسيكون من الجدير بها تقسيمها إلى موضوع منفصل، حيث يبدو أن هذا الأمر مرتبط جزئيًا فقط ببرنامج الاستيراد.

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

بشأن أسئلتك، قمت بتثبيت discourse يدويًا على خادم Droplet من DigitalOcean. عمل كل شيء بشكل صحيح، وقد قمت أيضًا بالاستيراد من قبل. لكنني احتجت إلى إعادة استيراد كامل لأنني نسيت تعيين مسارات الرموز التعبيرية (smilies). لذلك، اضطررت إلى حذف كل شيء. ومنذ ذلك الحين بدأت المشاكل.

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

لكن منذ ذلك الحين لم أعد أستطيع الاتصال بالموقع. يقول أداة فحص discourse (Discourse Doctor) إن كل شيء على ما يرام باستثناء أنه لا يمكنه العثور على إصدار discourse الخاص بي. بخصوص سجلات الأخطاء (logs)، يرجى إخباري بالأمر المطلوب للتحقق منها وسأقوم بذلك. نعم، لقد انتظرت، وانتظرت، وانتظرت… ولا يزال لا يوجد اتصال.

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

تعديل: لذا اكتشفت كيفية التحقق من سجلات الأخطاء… وهي مليئة بأخطاء SSL. لذا أنا أحاول الآن إعادة تثبيت شهادة جديدة باستخدام هذا الرابط Set up HTTPS support with Let's Encrypt - أتمنى حقًا أن يحل هذا المشكلة.

تعني أخطاء SSL على الأرجح أنك حاولت طلب شهادة LE بشكل متكرر للغاية بالفعل. قد يكون نطاقك محظورًا مؤقتًا لدى LE. راجع الأمر عن كثب، وإذا كان الأمر كذلك، فاستخدم ربما نطاقًا فرعيًا في الوقت الراهن لتجاوز هذه المشكلة.

وبالنسبة لباقي الأمر: بما أنك تستخدم DO، فربما يكون من الجيد في المستقبل إنشاء لقطة (snapshot) على DO في كل مرة تصل فيها إلى خطوة ترغب في القدرة على العودة إليها في حال حدوث أي مشاكل.

شكرًا جزيلاً لك على النصيحة بخصوص لقطات النظام. سأحتفظ بذلك بالتأكيد في ذهني للمرة القادمة!

أيضًا، تمكنت من حل المشكلة بنسخ مجلد SSL مرة أخرى من النسخة الاحتياطية التي قمت بها. اتضح بطريقة ما أن الشهادات قد تحولت إلى ملفات بحجم 0 كيلوبايت؟ غريب. عندما أعيدت الملفات القديمة، تمكنت من الدخول.

شكرًا للجميع على مساعدتكم ودعمكم. وأعتقد الآن أن جميع منشوراتي السابقة كانت تنتمي أكثر إلى قسم الدعم أو SSL أو شيء مشابه (لكنني لم أكن أعرف ذلك وقت النشر بالطبع).

تعديل: تحديث، بعد إعادة بناء التطبيق، يبدو أن شهادة SSL تُحذف بطريقة ما في كل مرة. هل يطلب شهادة من Let’s Encrypt في كل إعادة بناء؟ إذا كان الأمر كذلك، فأنا أفهم أنه قد يرى أنني طلبتها كثيرًا… لقد قمت بإعادة البناء كثيرًا لمعرفة ما الخطأ.

لا. حسب علمي، يتحقق من تاريخ التجديد ويقوم بتجديده عند الحاجة.

يبدو أنه يمكنك الحصول على خمس شهادات خلال سبعة أيام:

يبدو أن أحد هذه الأخطاء ناتج عن عدم توجيه اسم النطاق الخاص بك إلى رقم IP الصحيح.

شكرًا لك يا JahDu، إذن أجد الأمر أكثر غرابةً بعد إعادة البناء أن مفاتيح SSL لم تُضبط بشكل صحيح.

@Jay، الأمر غريب حقًا لأنه كان يعمل من قبل، مع نفس عنوان IP وكل شيء. النطاق يشير إلى عنوان IP الصحيح.

Discourse مستضاف على نطاق فرعي لنطاق رئيسي، وكلاهما على خوادم مختلفة، وكان للنطاق الفرعي عنوان IP مختلف عن النطاق الرئيسي. لكن النطاق الفرعي مُدرج في إعدادات SSL.

كنت سأتحقق مرة أخرى من ملف app.yml، لكنه في منتصف عملية إعادة معالجة 100 ألف منشور (لكي يعمل أحد الإضافات) وتستغرق وقتًا طويلاً…

تعديل: تحققت مرة أخرى من ملف app.yml ولم يتغير شيء منذ أن كان كل شيء يعمل بشكل صحيح.
من أين أبدأ البحث الآن؟

لقد قمت للتو بإعادة استيراد أخرى. هذه المرة دون إعادة بناء التطبيق. قمت باستعادة نسخة احتياطية ثم استوردت قاعدة بيانات phpbb3. بعد الاستيراد، مرة أخرى، اختلت مفاتيح SSL. لم أقم بإعادة بناء أي شيء، فقط قمت بتشغيل وإيقاف حاويات app.yml و import.yml.

لقد حيرتني الأمور. هل يؤدي استعادة نسخة احتياطية عبر لوحة تحكم المسؤول إلى الإخلال بـ SSL؟ لم أتحقق من مجلد SSL إلا بعد الاستيراد، لذا لا أعرف متى حدث ذلك.

من يا ترى يمكنه توضيح هذا الأمر؟

هل هناك أي تفاصيل حول مشكلة SSL؟ مثلًا من السجل؟ لا يزال افتراضي أن نطاقك محظور من قبل LE، ولكن دون تفاصيل من السجل، من الصعب التحديد.

ما يحدث هو أن الملفات الموجودة في مجلد SSL تُستبدل بطريقة ما بحيث تصبح ملفات .key و/أو .cer بحجم 0 كيلوبايت بدلاً من الحجم الصحيح الذي يتجاوز 3 كيلوبايت. يتأثر ملف واحد أو اثنين فقط، وليس جميعها، حيث تتعرض “للفساد” وتصبح بحجم 0 كيلوبايت. أقوم بحل المشكلة بنسخ الملفات الاحتياطية واستبدالها، لكن هذا مجرد حل مؤقت.

تظهر السجلات (قبل إصلاح الملفات) نفس الخطأ مرارًا وتكرارًا:

nginx: [emerg] cannot load certificate “/shared/ssl/[mydomain]_ecc.cer”: BIO_new_file() failed (SSL: error:02001002:system library:fopen:No such file or directory:fopen(‘/shared/ssl/[domain]_ecc.cer’,‘r’) error:2006D080:BIO routines:BIO_new_file:no such file)
nginx: [emerg] cannot load certificate “/shared/ssl/[domain]_ecc.cer”: PEM_read_bio_X509_AUX() failed (SSL: error:0909006C:PEM routines:get_name:no start line:Expecting: TRUSTED CERTIFICATE)

يرجى مراجعة /shared/letsencrypt/acme.sh.log داخل الحاوية لمعرفة ما يحدث.

آه، لم أكن أعرف أن هناك سجلات هناك أيضًا :slight_smile: شكرًا لك على التوضيح!

كثير من الأمور تحدث هناك، يبدو أنه كان يجدد الشهادات مع كل إعادة بناء؟ لأن هناك الكثير من عمليات التجديد الجارية. وصحيح ما قاله @helmi، أعتقد أن هذا هو ما تقصده:

[السبت 25 يناير 2020 06:48:31 مساءً بتوقيت UTC] خطأ في إنشاء طلب جديد. لم يتم العثور على Le_OrderFinalize. {
“type”: “urn:ietf:params:acme:error:rateLimited”,
“detail”: "خطأ في إنشاء طلب جديد :: تم إصدار عدد كبير جدًا من الشهادات بالفعل لمجموعة النطاقات المحددة: $
“status”: 429

إذًا… كيف أتجاوز ذلك؟

تعديل: وفقًا لـ letsencrypt:

إذا وصلت إلى حد المعدل، فلا يمكننا إعادة تعيينه مؤقتًا. سيتعين عليك الانتظار حتى ينتهي حد المعدل بعد أسبوع.

ثم وجدت Rate Limits - Let's Encrypt

إذًا… أعتقد أنني سأضطر للانتظار أسبوعًا إذن…

تعديل 2: تفحصت https://crt.sh/ ورأيت فقط 10 شهادات للأسبوع الماضي؟ وليس 50…

سؤال: متى تعتبر الشهادة تجديدًا؟ فقط عند إعادة بناء التطبيق، أظن؟

هل لديك اسم مضيف بحالة مختلطة؟ ظننت أن الكود يحول الآن الأحرف إلى صغيرة، لكن هذا مجرد تخمين. أنا متأكد إلى حد كبير أن إعادة البناء لا تطلب عادةً شهادة جديدة إذا كانت الشهادة صالحة.

هل تقصد كما هو مُعرّف في ملف app.yml تحت DISCOURSE_HOSTNAME؟
لا، كل الحروف صغيرة.

الطريقة الوحيدة التي أعرفها لتصل إلى هذا الحد هي إذا فشلت طلبات الشهادات الخاصة بك لسبب ما.

شكرًا لك :slight_smile: كيف/أين يمكنني التحقق مما إذا كانت قد فشلت؟ هل تعرف الخطأ الذي يجب أن أبحث عنه في السجلات؟

إذا ذهبت إلى منتدى Let’s Encrypt وأنشأت موضوعًا جديدًا في فئة المساعدة، وأملأت النموذج الذي يُعرض عليك، فيمكنهم التحقق من نطاقك (نطاقاتك) وإخبارك بأي مشكلة (مشاكل) قد تكون موجودة. كما يمكنهم مساعدتك في تصحيح أي مشكلة (مشاكل).
كملاحظة جانبية: يوصي Let’s Encrypt باستخدام وضع “المرحلة التجريبية” لتجنب الوصول إلى حدود الشهادات التي تواجهها في وضع الإنتاج. يتم تجديد حد 5 محاولات فاشلة بعد ساعة واحدة. :wink:

شكرًا لك يا جيم، سأفعل ذلك عندما تعود الأخطاء.
لقد قمت للتو بإعادة البناء مرة أخرى، وبالفعل لم يكن هناك خطأ في SSL!