يقول عميل VPN لديك إن الشهادة تعذّر التحقق منها، ويتوقف مربع الحوار عند هذا الحد. الملف موجود، والخادم يعمل، والملف الشخصي نفسه عمل على حاسوب محمول آخر الشهر الماضي. وتحت ذلك التحذير المكوّن من سطر واحد، مرّر العميل شهادة القرين عبر أربع بوابات: جهة تصدر الشهادات قمت بتهيئتها تضمن مسار التوقيع، وهذا المسار يصل إلى الجهة، واسم القرين هو الاسم الذي طلبته، والشهادة صالحة الآن لهذا الغرض. اعرف البوابة التي أُغلقت، فالإصلاح عادةً ملف واحد؛ وإن تخطيت تلك الخطوة فسوف تعيد استيراد الحزمات طوال العصر.

اقرأ مربع الحوار قبل أن تحرّر الملف الشخصي

تُصاغ أخطاء الشهادات بواسطة المكتبة التي تقع في الأسفل، لا بواسطة منتج VPN الذي ثبّته، لذا فإن النص الدقيق هو دليلك الأول. تشير رسالة «تعذّر الحصول على شهادة المُصدر المحلية» إلى المسار أو إلى مرساة الثقة. وتشير رسالة «انتهت صلاحية الشهادة أو أنها ليست صالحة بعد» إلى الوقت. وتشير رسالة «غرض الشهادة غير مدعوم» إلى استخدام المفتاح الموسّع. ويخبرك عدم تطابق الاسم بالاسم الذي أراده. ولا يُصلَح أي من الأربعة بإعادة تثبيت العميل.

ارفع مستوى التسجيل قبل تغيير أي شيء. يبلّغ OpenVPN عن فشل التحقق حول المصافحة بمجرد تشغيله مع --verb 4، ويسجّل strongSwan قرارات هويته وسلسلته في سجل charon. ثم تأكد من الشهادة التي تفحصها، لأن الناس يختبرون عادةً الملف على القرص بينما يُضمّن الملف الشخصي نسخة أقدم. وعندما يُضمّن الملف الشخصي كتل PEM، تكون الشهادة المضمّنة هي موضوع الاختبار.

جهة إصدار الشهادات توقّع الهويات، لا الأذونات

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

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

أعد بناء المسار الذي يحاول العميل بناءه

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

openssl x509 -in server.crt -noout -subject -issuer -dates
openssl verify -CAfile root.crt -untrusted intermediate.crt server.crt
openssl verify -show_chain -CAfile root.crt -untrusted intermediate.crt server.crt

خروج الحالة صفر يعني أن المسار بُني من تلك الملفات؛ والفشل يسمّي الشهادة التي تعذّر الوصول إليها. إذا نجح openssl verify بينما يرفض العميل، فالفرق في ما يرسله الخادم فعلًا أو في أي ملف ثقة يحمّله الملف الشخصي. في OpenVPN يمكن أن ترافق الشهادات الوسيطة ملف شهادة الخادم أو أن تُقدَّم منفصلة مع --extra-certs، والحزمة التي تحمل جذرين مكتوبين تحت الاسم الموضوعي نفسه ستدفع أحد عملائك إلى الفرع الخطأ.

الاسم والغرض بوابتان منفصلتان

بناء السلسلة لا يسأل أبدًا إن كان الاسم لك. لا يتحقق OpenVPN منه إلا عندما يضبط الملف الشخصي --verify-x509-name، والعادة الأقدم بمطابقة الاسم الشائع وحده تنكسر مع شهادات تعيش هوياتها في subjectAltName. ونشرات IKEv2 تطابق الهوية المهيأة مع مدخلات SAN أو مع الاسم المميّز، بحسب العميل، وقيمة حرف بدل أو %any تعطّل بهدوء المقارنة التي ظننت أنك تملكها.

يأتي الوقت والغرض بعد ذلك. الحاسوب الذي تسبق ساعته بضع ساعات يرفض شهادة ليست صالحة بعد، والشهادة الوسيطة المنتهية تُفشل المسار بينما الورقة سارية. وأعطال الغرض تأتي من شهادة بلا serverAuth في استخدام المفتاح الموسّع، أو بـ keyUsage لا يسمح بتوقيع المصافحة، وهو ما يبلّغ عنه OpenSSL كغرض شهادة غير مدعوم. أعد الإصدار من القالب الصحيح؛ ولا شيء في تلك الرسالة يبرّر إيقاف التحقق.

الإبطال لا يعمل إلا إذا هيّأه أحد

لا تُستشار قائمة CRL أو استجابة OCSP تلقائيًا. على خادم OpenVPN، تُفحص شهادات العملاء مقابل قائمة فقط عندما يشير --crl-verify إلى واحدة. أما فحص شهادة الخادم من جهة العميل فيعتمد على التنفيذ وغالبًا غائب. ويحتاج strongSwan إلى إضافة الإبطال وسياسة قبل أن ينظر إلى CRL لقرين.

هذا يفسّر التذكرة التي ستصل إليك في النهاية: شهادة عميل مُبطلة ما زالت تتصل، ويستنتج الجميع أن الإبطال معطّل. لم يكن شيء يفحص. انشر قائمة CRL وحدّثها، أو أبقِ شهادات العملاء قصيرة العمر بما يكفي ليكون الإبطال القديم مهمًا لفترة وجيزة، وتدرّب على مسار الإبطال بشهادة مخبرية قبل أن تحتاجه أثناء حادثة.

ترتيب إصلاح يُبقي التحقق مفعّلًا

رتّب حسب العَرَض قبل أن تلمس الملفات، لأن كل صف في الجدول يرسلك إلى كائن مختلف.

Client saysMost likely gateFirst check
unable to get local issuer certificatetrust anchor or missing intermediateyour own openssl verify against the files the profile loads
expired or not yet validvalidity windowleaf and intermediate dates against the device clock
unsupported certificate purposeextended key usageserverAuth present, keyUsage allows the handshake
name mismatchpeer identitysubjectAltName entries versus the profile name

اعمل على القائمة في مرور واحد: تأكد من الملف الذي يحمّله الملف الشخصي، وابنِ المسار بنفسك، وتحقق من أن الخادم يرسل الشهادة الوسيطة، وقارن الساعة، واقرأ SAN، واقرأ EKU، ثم أعد الاتصال وراقب اختفاء سطر السجل نفسه. إذا تعذّر إعطاء جهاز أي CA إطلاقًا، فإن التثبيت بالتوقيع هو البديل الصادق، لأن OpenVPN 2.6 يقبل --peer-fingerprint ويضيّق الثقة إلى مفتاح واحد بدل إزالة الفحص. والمرجع لمعنى كل حقل من تلك الحقول هو RFC 5280.

مقالات ذات صلة