قد ترفض عملية تثبيت أو إعادة بناء Discourse شهادة Let’s Encrypt صالحة مع ظهور الخطأ التالي:
C=US, O=Let's Encrypt, CN=YR2
error 2 at 1 depth lookup: unable to get issuer certificate
error fullchain.cer: verification failed
تمكنت من إعادة إنتاج هذا الخطأ مباشرة بعد إصدار شهادة RSA بنجاح. يؤدي الفشل في الفحص إلى طلب غير ضروري باستخدام --force، مما قد يؤدي إلى ظهور أخطاء HTTP 429 / rateLimited / “عدد كبير من الشهادات”. في التثبيت الخاص بي، تم حظر إصدار شهادات ECDSA ولم يبدأ HTTPS.
مع سلاسل الشهادات المتأثرة، يمكن لكل عملية إعادة بناء أو إعادة تشغيل للحاوية أن تُطلق إعادة إصدار قسرية غير ضرورية لشهادات RSA وECDSA، حتى لو كانت لا تزال صالحة. تستهلك عمليات إعادة الإصدار الناجحة حصة Let’s Encrypt، لذا فإن إعادة البناء أو إعادة التشغيل المتكررة يمكن أن تصل بسرعة إلى حد المعدل.
قد يبقى هذا الأمر دون ملاحظة بينما يستمر HTTPS في العمل باستخدام الشهادات المثبتة بالفعل. حذف مثيل وإعادة تثبيته باستخدام اسم المضيف (hostname) نفسه لا يعيد ضبط تلك الحصة. إذا كانت الشهادات المطلوبة مفقودة في التثبيت الجديد، يمكن أن يمنع إصدار الشهادات المقيد بالمعدل بدء تشغيل HTTPS.
الإصلاح
في templates/web.letsencrypt.ssl.template.yml، داخل cert_exists()، استبدل:
- openssl verify -CAfile <(openssl x509 -in ca.cer) fullchain.cer
+ openssl verify -untrusted ca.cer fullchain.cer
اترك بقية الدالة كما هي. يجب تضمين القالب المُصحح في إعادة بناء الحاوية التالية لتحديث /usr/local/bin/letsencrypt.
إذا كنت مقيدًا بالمعدل بالفعل، فإن هذا التصحيح لا يعيد ضبط الحصة. قم بتطبيق الإصلاح والالتزام بوقت retry after قبل محاولة أي إصدار إضافي.
تأكيد مشكلة التحقق من السلسلة
من داخل الحاوية، من دليل الشهادة المتأثر (/shared/letsencrypt/<hostname>، أو <hostname>_ecc)، قارن بين:
openssl verify -CAfile <(openssl x509 -in ca.cer) fullchain.cer
openssl verify -untrusted ca.cer fullchain.cer
في الحالة المعاد إنتاجها، يفشل الأمر الأول مع الخطأ 2؛ بينما يعيد الأمر الثاني:
fullchain.cer: OK
السبب والتحقق
يقوم openssl x509 -in ca.cer بقراءة الشهادة الأولى فقط من حزمة المُصدر. في سلسلة YR2 المرصودة، يُسقط الشهادة Root YR الموقعة بشكل متقاطع (cross-signed) اللازمة للوصول إلى ISRG Root X1.
يقدم -untrusted ca.cer حزمة المُصدر الكاملة مع الحفاظ على نقاط الثقة (trust anchors) في مخزن النظام، مما يحافظ على نية إصلاح عام 2021 (#576).
تحققت من سلاسل RSA وECDSA الفعلية داخل الحاوية. أعادت إعادة البناء الكاملة مع التصحيح استخدام كلا الشهادتين الموجودتين مسبقًا: رسالتا Skip، وتم تثبيت كلا السلسلتين، ونجح اختبار nginx -t.