خطأ curl رقم 77: مواقع التحقق من الشهادة عند تثبيت VPN
الخطأ 77 هو فشل في مدخل CA المحلي، وليس شهادة خادم سيئة. اعثر على ملف الثقة الذي يقرأه curl، وأصلحه، وافحص السكربت قبل تشغيله.
تلصق أمر التثبيت ذا السطر الواحد من درس ما، وتضغط Enter، فيظهر لك curl: (77). تذكر الرسالة مواقع التحقق من الشهادة، فيميل حدسك إلى افتراض أن شهادة مزود VPN معطوبة والبحث عن خيار يتخطى التحقق. هذا الفهم خاطئ، والعمل بمقتضاه يحوّل مشكلة ملف محلية إلى قرار أمني. عد إلى البداية خطوة بخطوة.
الخطوة 1: اقرأ ما يعنيه الرقم
الخطأ 77 يتعلق بمدخل CA المحلي: لم يستطع curl قراءة مادة الشهادة التي طُلب منه الوثوق بها أو تحميلها. الخطأ 60 هو الخاص بالطرف الآخر، حيث سلسلة الخادم لا تُتحقق. يظهران متجاورين في الدروس ويعنيان أمرين متعاكسين.
إذا قال مخرجاتك 77، فالخادم لم يكن المشكلة قط. لم يستطع العميل فتح الملف الذي أراد استخدامه للفحص، وهذه مشكلة مسار أو صلاحيات أو حزمة على جهازك.
الخطوة 2: اقرأ الأمر الذي نسخته
الأوامر المنسوخة تخفي أحرفًا. الحرف الصغير -l هو --list-only، ويُطبق على سرد البروتوكولات. الحرف الكبير -L هو --location، ويتبع إعادة توجيه HTTP. وهما ليسا تهجئتين بديلتين، والدرس الذي يكتب أحدهما وهو يصف الآخر يدفع الناس إلى مسار إعادة توجيه لم يُقصد قط.
اتباع إعادة توجيه لا يصلح مسار مخزن الثقة، ولا يثبت أن المضيف النهائي هو الناشر الذي قصدته. إذا جاء الأمر من منشور منتدى، فأعد كتابته من تعليمات المشروع نفسها بدلًا من الوثوق باللصق.
الخطوة 3: اعرف أي مدخل CA يستخدم ذلك البناء
ابدأ بتحديد الملف التنفيذي، لأن الجواب يعتمد على طريقة تجميعه:
curl --versionسجّل الإصدار وخلفية TLS. البناء الذي يستخدم مخزن ثقة أصليًا يقرأ مخزن النظام عبر مكتبة TLS، أما البناء الموجّه إلى حزمة فيقرأ ملفًا. ويمكن لـ --cacert صريح أو إعداد CURL_CA_BUNDLE أو غلاف shell أن يتجاوز أيًّا منهما، لذا قد لا تمسّ حزمة التثبيت الملف الذي يفشل فعليًا.
بالنسبة لمخزن قائم على ملف، افحص ثلاثة أمور بالترتيب: هل المسار موجود، وهل يستطيع الحساب المستدعي قراءته، وهل يحتوي مادة CA التي تتوقعها. الحزمة ذات الصلاحيات الخاطئة تفشل تمامًا كالمفقودة، وكلتاهما تفشل قبل أي محادثة شبكية عن الخادم.
الخطوة 4: أصلح المدخل، لا التحقق
استعد إعداد الثقة المدعوم عبر الجهة التي تملكه: حزمة التوزيع، أو إدارة الإعدادات، أو متغير البيئة الموثّق. الهدف هو مدخل CA صحيح وقابل للقراءة لذلك الملف التنفيذي.
لا تحوّل عنوان URL إلى HTTP، ولا تضف --insecure، ولا تثق بشهادة منسوخة من تنزيل غير مفسر. كل واحدة من تلك التغييرات تغيّر ما تقبله بدلًا من إصلاح ما لم يستطع curl قراءته، والتغيير غالبًا يعيش أطول من الحادثة.
إن فهرس أخطاء curl هو المرجع للأرقام، وهو قصير بما يكفي لقراءته مرة واحدة بتأنٍ.
الخطوة 5: نزّل، وانظر، ثم نفّذ
اجلب المثبّت إلى ملف بدلًا من تمريره إلى shell في الأمر نفسه. هذا التغيير الواحد يفصل نقلًا يمكنك فحصه عن كود يعمل بصلاحياتك.
curl -fL -o vpn-installer.sh https://example.invalid/install.sh
file vpn-installer.sh
head -n 40 vpn-installer.shتحقق من أن الرد هو السكربت الذي توقعته وليس صفحة خطأ HTML أو إشعار إعادة توجيه أو ملفًا فارغًا. إذا وفّر الناشر مجموع تحقق أو توقيعًا، فتحقق منه عبر عملية الإصدار الموثّقة لديهم بدلًا من قيمة مذكورة في خيط المنتدى نفسه.
تذكّر ما فعله HTTPS وما لم يفعله. لقد صادق على النقل إلى المضيف الذي اتصلت به؛ ولم يراجع محتوى السكربت، ولا يخبرك إن كان الناشر جديرًا بالثقة.
الخطوة 6: أبقِ خطوات التثبيت منفصلة
تنزيل الملف، وتثبيت العميل، وتهيئة النفق، والتحقق من المسارات هي أربع عمليات بأربعة أنماط فشل مختلفة. تنفيذها واحدة تلو الأخرى يعني أن الخطأ لاحقًا في التسلسل له سبب واضح واحد بدلًا من أربعة مرشحين.
إذا نجح التثبيت وارتفع النفق، فتحقق من المسارات ومن وجهة حقيقية واحدة قبل إغلاق التذكرة. يُعتبر خطأ curl مُصلحًا عندما يعمل مرة أخرى أمر بسيط مثل curl -I https://example.invalid، لا عندما يتوقف المثبّت عن الشكوى.