عميل مسحوب ما زال يتصل: القائمة لم تصل قط
السحب مُدخل في التحقق من الشهادة، وليس أمرًا يُنهي الجلسة. قارن كيف يرى الاتصال الجديد والنفق العامل قائمة الإلغاء.
السحب لا يتسلل أبدًا إلى نفق عامل ليحذف جلسة. القائمة مُدخل في التحقق من الشهادة، وتُقرأ خلال تبادل قناة التحكم الذي يبدأ جلسة TLS. هذه الحقيقة الواحدة تفسر المفاجأتين: عميل مسحوب يعيد الاتصال لأن القائمة لم تصل قط إلى جهة التحقق، وجلسة قائمة تبقى حية لأن أحدًا لم يعد التحقق من أي شيء.
القائمة مُدخل، وليست إجراءً
أثناء إنشاء الجلسة يتحقق الخادم من شهادة العميل مقابل مراسي الثقة لديه، وتضيف توجيهات السحب بحثًا في القائمة إلى ذلك القرار. يحدث التحقق على الخادم، فلا يرى العميل أن شهادته قد سُحبت ويواصل تقديم الشهادة نفسها. لذلك فإن ملف تعريف ما زال يتصل يثبت فقط أن جهة تحقق ما قبلت السلسلة، لا أن السحب فشل.
القائمة نفسها كائن موقّع له تاريخ إصدار وتاريخ تحديث تالٍ. القائمة غير ذات الصلة، أو الموقعة من جهة أخرى، أو التي مرّ تاريخ تحديثها التالي ليست بديلاً عن القائمة الحالية، وهل تُرفض القائمة القديمة أو تُقبل بصمت يعتمد على النشر.
الاتصال الجديد مقابل الجلسة العاملة
يُقيَّم السحب عند إنشاء الجلسة أو إعادة التفاوض عليها، لا مقابل قناة البيانات مع كل حزمة. العميل المتصل بالفعل يملك مفاتيح حركة المرور، فيواصل تمرير الحزم بعد ظهور شهادته في القائمة. الفاصل الافتراضي لإعادة التفاوض يُقاس بالساعات، ولهذا يمكن لقائمة محدّثة أن تسري على القادمين الجدد بينما يبقى النفق العامل قائمًا.
| Situation | What the list does | When it applies |
|---|---|---|
| Fresh connection | Blocks the handshake | At verification, immediately |
| Renegotiation | Blocks the new exchange | At the next renegotiation interval |
| Established data channel | Nothing | Until the session ends |
الإنفاذ الفوري يتطلب إجراءً متعمدًا لا القائمة وحدها. إعادة تشغيل الخدمة تُجبر كل عميل على إعادة الاتصال، بينما إنهاء جلسة واحدة عبر واجهة الإدارة يترك البقية دون مساس. اختر واحدًا لكل حادثة ودوّن أيّهما استخدمت. للخيارين أثر مختلف الحجم، وهذا هو القرار الحقيقي.
سلّم الملف الذي تقرأه جهة التحقق فعلاً
يجب توليد القائمة من سجل الجهة ثم نسخها إلى كل جهاز يتحقق من الشهادات. توليدها على مضيف CA وعدم تثبيتها أبدًا على الخادم هو العطل الأكثر شيوعًا، ويبدو تمامًا كميزة سحب معطلة بالكامل.
ca ca.crt
cert server.crt
key server.key
crl-verify /etc/openvpn/crl.pem
تفصيلان يحددان ما إذا كان الملف يُقرأ فعلاً. المسار النسبي يُحل مقابل دليل التهيئة، لذا قد لا يُعثر أبدًا على نسخة تُركت في المجلد الرئيسي لمشغّل. والخدمة عادةً تتخلى عن الامتيازات بعد البدء، فيحتاج حساب التشغيل إلى صلاحية بحث في كل دليل أب وإلى صلاحية قراءة على الملف. تحقق من الاثنين بحساب التشغيل لا بـ root، وإلا أثبت الاختبار الشيء الخطأ.
على مضيفات systemd قد تُخفي وحدة مشددة المسار أيضًا، بعرض للقراءة فقط أو بدليل نظام محمي. من داخل الخدمة لا يُميَّز ذلك عن ملف مفقود، فافحص قيود الوحدة قبل البحث عن خطأ في الصلاحيات. اقرأ ملف الوحدة قبل لوم نمط الملف.
أكّد على الخادم، لا على العميل
سجل الخادم يسمّي ما حدث: فتح القائمة، أو تحميلها، أو فشل التحقق بالرقم التسلسلي المسحوب. العميل لا يبلّغ إلا عن فشل مصافحة عام، ولهذا تكون سجلات العميل مكانًا سيئًا للبحث عن قرار السحب.
تحقق بمحاولة جديدة من ملف التعريف المسحوب ثم توقف. الاتصال الناجح من ذلك الملف هو الإشارة لفحص مسار الملف وحساب التشغيل، لا لافتراض أن القائمة كانت خاطئة. أبقِ تلك المحاولة الناجحة كاختبار قبول، ولا تحسب إعادة اتصال لم تراقبها.
ما لا يسحب شيئًا
حذف ملف التعريف من حاسوب محمول، أو إزالة ملف الشهادة من العميل، أو إخبار المستخدم بالتوقف عن الاتصال لا يغيّر شيئًا على الخادم. تبقى الشهادة صالحة حتى تسجّل الجهة السحب وتقرأ جهة التحقق القائمة الناتجة.
ولهذا يستحق السلسلة أن تُكتب: سجّل السحب، وولّد القائمة ووقّعها، ووزّع ذلك الملف بالضبط، وأكّد أن حساب الخدمة يستطيع قراءته. كل حلقة قصيرة، وأي حلقة مفقودة تترك عميلاً مسحوبًا يتصل بسرور. قائمة تحقق من أربعة أسطر أفضل من افتراض بلا سطر.