فشل Let's encrypt لـ IP خلف جدار ناري

أهلاً بالجميع،

بعد تثبيت Discourse، أتلقى خطأ HTTP 502، ويقول السجل:

$ sudo ./launcher logs app
تم اكتشاف بنية x86_64.
run-parts: executing /etc/runit/1.d/00-ensure-links
run-parts: executing /etc/runit/1.d/00-fix-var-logs
run-parts: executing /etc/runit/1.d/01-cleanup-web-pids
run-parts: executing /etc/runit/1.d/anacron
run-parts: executing /etc/runit/1.d/cleanup-pids
تنظيف ملفات PID القديمة
run-parts: executing /etc/runit/1.d/copy-env
run-parts: executing /etc/runit/1.d/letsencrypt
[الثلاثاء 06 يونيو 2023 01:51:07 مساءً بالتوقيت العالمي المنسق] استخدام CA: https://acme-v02.api.letsencrypt.org/directory
[الثلاثاء 06 يونيو 2023 01:51:07 مساءً بالتوقيت العالمي المنسق] مفتاح حساب الإنشاء جيد.
[الثلاثاء 06 يونيو 2023 01:51:07 مساءً بالتوقيت العالمي المنسق] تسجيل الحساب: https://acme-v02.api.letsencrypt.org/directory
[الثلاثاء 06 يونيو 2023 01:51:09 مساءً بالتوقيت العالمي المنسق] مسجل
[الثلاثاء 06 يونيو 2023 01:51:09 مساءً بالتوقيت العالمي المنسق] ACCOUNT_THUMBPRINT='V5GxRKC8yO-5jvYjc3WlSSMbTABmaNtxUNs8XVoL1R8'
[الثلاثاء 06 يونيو 2023 01:51:09 مساءً بالتوقيت العالمي المنسق] إنشاء مفتاح النطاق
[الثلاثاء 06 يونيو 2023 01:51:10 مساءً بالتوقيت العالمي المنسق] مفتاح النطاق موجود هنا: /shared/letsencrypt/<my domain>/<my domain>.key
[الثلاثاء 06 يونيو 2023 01:51:10 مساءً بالتوقيت العالمي المنسق] نطاق واحد='<my domain>'
[الثلاثاء 06 يونيو 2023 01:51:10 مساءً بالتوقيت العالمي المنسق] الحصول على رمز مصادقة النطاق لكل نطاق
[الثلاثاء 06 يونيو 2023 01:51:13 مساءً بالتوقيت العالمي المنسق] الحصول على جذر الويب للنطاق='<my domain>'
[الثلاثاء 06 يونيو 2023 01:51:13 مساءً بالتوقيت العالمي المنسق] التحقق من: <my domain>
[الثلاثاء 06 يونيو 2023 01:51:15 مساءً بالتوقيت العالمي المنسق] قيد الانتظار، تقوم CA بمعالجة طلبك، يرجى الانتظار. (1/30)
[الثلاثاء 06 يونيو 2023 01:51:19 مساءً بالتوقيت العالمي المنسق] قيد الانتظار، تقوم CA بمعالجة طلبك، يرجى الانتظار. (2/30)
[الثلاثاء 06 يونيو 2023 01:51:23 مساءً بالتوقيت العالمي المنسق] قيد الانتظار، تقوم CA بمعالجة طلبك، يرجى الانتظار. (3/30)
[الثلاثاء 06 يونيو 2023 01:51:27 مساءً بالتوقيت العالمي المنسق] <my domain>: خطأ التحقق:202.117.43.203: جلب http://<my domain>/.well-known/acme-challenge/UuD6jm6XJAaoXG7lE_IKfNVuHtqB4dokQXm-ll0bmrk: انتهاء المهلة أثناء الاتصال (مشكلة جدار حماية محتملة)
[الثلاثاء 06 يونيو 2023 01:51:27 مساءً بالتوقيت العالمي المنسق] يرجى التحقق من ملف السجل لمزيد من التفاصيل: /shared/letsencrypt/acme.sh.log
تعذر فتح ca.cer للقراءة، لا يوجد مثل هذا الملف أو الدليل
140104391968064:error:02001002:system library:fopen:No such file or directory:../crypto/bio/bss_file.c:69:fopen('ca.cer','r')
140104391968064:error:2006D080:BIO routines:BIO_new_file:no such file:../crypto/bio/bss_file.c:76:
تعذر تحميل الشهادة
خطأ في تحميل الملف /dev/fd/63

...
nginx: [emerg] cannot load certificate "/shared/ssl/ics.yhdang.top.cer": PEM_read_bio_X509_AUX() failed (SSL: error:0909006C:PEM routines:get_name:no start line:Expecting: TRUSTED CERTIFICATE)
nginx: [emerg] cannot load certificate "/shared/ssl/ics.yhdang.top.cer": PEM_read_bio_X509_AUX() failed (SSL: error:0909006C:PEM routines:get_name:no start line:Expecting: TRUSTED CERTIFICATE)
nginx: [emerg] cannot load certificate "/shared/ssl/ics.yhdang.top.cer": PEM_read_bio_X509_AUX() failed (SSL: error:0909006C:PEM routines:get_name:no start line:Expecting: TRUSTED CERTIFICATE)

أفترض أن هذا يحدث لأن Discourse يحاول إنشاء شهادة تلقائيًا، والتحقق منها عبر وضع HTTP، عن طريق الوصول إلى عنوان URL المدرج. ومع ذلك، فإن عنوان IP الخاص بي يقع تحت جدار حماية مؤسسي وبالتالي لا يمكنه السماح لعنوان IP خارجي بالوصول، ولا يمكن لـ CA ذلك.

لقد علمت أيضًا من موقع Let’s Encrypt أنه يمكن استخدام تحدي DNS إذا لم يكن HTTP متاحًا، ولكني لست متأكدًا من كيفية القيام بذلك في Discourse.

شكرا.

إعجاب واحد (1)

أنت على حق.

يجب أن تكون قد تلقيت تحذيرًا من Discourse-setup يفيد بأنه لم يتمكن من الاتصال.

إنه غير مدعوم. إذا كنت ترغب في تشغيل طلب شهادة خلف جدار حماية، فستحتاج إلى إيجاد طريقة أخرى للحصول على شهادة. قد ترى السماح بـ SSL / HTTPS لإعداد Discourse Docker الخاص بك

إعجاب واحد (1)

مرحباً @pfaffman ، شكراً جزيلاً على معلوماتك! باتباع التعليمات في هذا المنشور، تظهر صفحة الترحيب في Discourse أخيراً.

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

أتساءل عما إذا كانت هذه المشكلة تتعلق بـ Discourse، وأنا مهتم بمعرفة طرق تصحيح هذه المشكلة فعلياً. شكراً.

أيضًا، نظرًا لأن sshd.template.yml أصبح مهملًا، يجب عليّ تعديل /etc/nginx/conf.d/discourse..conf يدويًا لتعديل ssl_certificate و ssl_certificate_key للإشارة إلى /shared/ssl/ssh.crt و /shared/ssl/ssh.key (القيمة الافتراضية هي /shared/ssl/<domain name>.cer)، وإلا فلن يعمل nginx بسبب مشاكل الشهادة، مع شكوى مثل:

[emerg] 5834#5834: cannot load certificate "/shared/ssl/<domain name>.cer": PEM_read_bio_X509_AUX() failed (SSL: error:0909006C:PEM routines:get_name:no start line:Expecting: TRUSTED CERTIFICATE)

أنا أفكر فيما إذا كانت هذه هي النقطة التي تسبب المشاكل.

لا تحتاج إلى قالب sshd ويجب عليك إزالة الإشارة إليه.

ستقوم فقط بتعديل الأسطر الموصى بها الأخرى لوضع المعلومات الصحيحة في تكوين nginx.

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

إعجاب واحد (1)

يجب عليك فقط استخدام قالب web.sslليس قالب web.letsencrypt.ssl). يحتوي ملف yml النموذجي على الأسطر التالية:

  ## Uncomment these two lines if you wish to add Lets Encrypt (https)
  #- "templates/web.ssl.template.yml"
  #- "templates/web.letsencrypt.ssl.template.yml"

قم فقط بإلغاء التعليق على السطر الأول:

  ## Uncomment these two lines if you wish to add Lets Encrypt (https)
  - "templates/web.ssl.template.yml"
  #- "templates/web.letsencrypt.ssl.template.yml"

سيؤدي ذلك إلى إعداد nginx لـ SSL باستخدام /shared/ssl/ssl.crt و /shared/ssl/ssl.key. مع ذلك، تحتاج فقط إلى التأكد من أن لديك شهادة ومفتاح صالحين في هذين المسارين. بافتراض أنك قمت بالتثبيت في الموقع القياسي، فإن المسار إلى هذا الدليل على النظام المضيف هو /var/discourse/shared/standalone/ssl/.

إعجابَين (2)

شكراً جاي وسيمون، تم حل مشكلتي.

في نهاية المطاف، وجدت أن شهادة Cloudflare هي السبب. التبديل إلى تحدي DNS عبر Let’s Encrypt يعمل بشكل رائع.

الآن لدي معرفة أكبر قليلاً حول كيفية عمل Discourse داخليًا. رائع!


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

إعجابَين (2)

لا. تم تصميم الإعداد بطريقة واحدة بسيطة للتثبيت تعمل (في الغالب) دائمًا. سيكون التثبيت خلف جدار ناري لا يسمح بالوصول من الويب العام صعب الدعم.

يسعدني أنك تمكنت من حل المشكلة!

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.