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

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

تحقق من المكوّن الذي يتخذ قرار القبول

سمِّ العملية التي تتحقق من شهادة العميل، لأن هذه العملية وحدها تستطيع إنفاذ قائمة. على خادم OpenVPN يكون ذلك هو الخادم الخفي نفسه، مُهيَّأً مع crl-verify. في ocserv يكون ذلك هو السطر crl في ocserv.conf. في strongSwan تكون المدخلات هي قوائم CRL المحمَّلة إلى جانب strictcrlpolicy. قد يكون وكيل أو جهاز يُنهي TLS أمام الـ VPN هو المُتحقِّق الحقيقي أيضًا، وإن كان كذلك فإن الخادم الخفي خلفه لا يرى شهادة العميل أبدًا.

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

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

تحقق من المُصدِر الذي وُقِّعت القائمة من أجله

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

أكِّد الاقتران قبل لمس الخادم الخفي. يجب أن يطابق المُصدِر الموجود في الشهادة subject القائمة:

openssl x509 -in client.crt -noout -issuer -serial
openssl crl  -in intermediate.crl -noout -issuer -lastupdate -nextupdate

عندما يأتي كلاهما من نفس CA، فإن الرقم التسلسلي المطبوع للشهادة هو القيمة التي يجب أن تظهر في القائمة. إن لم يتطابقا، فأنت تحمل CRL الخطأ أو النسخة الخطأ منه.

الصلاحية تنتمي إلى الفحص نفسه. nextUpdate في الماضي يجعل القائمة قديمة، والمُتحقِّق الذي يفشل مغلقًا سيرفض حينها كل عميل بدلًا من الملغى فقط.

تحقق من أن الرقم التسلسلي موجود في النسخة التي حمّلها الخادم الخفي

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

openssl crl -in intermediate.crl -noout -text | grep -i -A2 'Serial Number'
openssl ca -revoke client.crt
openssl ca -gencrl -out intermediate.crl

ثم تحقق من كيفية التقاط تطبيقك للملف. يقرأ OpenVPN مسارًا مُعطى لـ crl-verify مرة واحدة عند بدء التشغيل، لذا تحتاج القائمة الجديدة إلى إعادة تشغيل أو إشارة إعادة تشغيل؛ الخيار نفسه الموجَّه إلى مجلد يُقرأ من جديد عند كل اتصال، ولهذا يوجد وضع المجلد. يحتاج strongSwan إلى إعادة تحميل بيانات اعتماده، مثلًا باستخدام swanctl --load-creds. كون الملف على القرص صحيحًا وكون المُتحقِّق يستخدمه حقيقتان مختلفتان.

تحقق من السياسة لقائمة مفقودة أو منتهية الصلاحية

هذا هو القرار الذي لا تتخذه كثير من عمليات النشر صراحة أبدًا، وهو يحدد ما إذا كان الإلغاء يحميك أم يُقفل الجميع خارجًا. Fail-closed يعني أنه بدون معلومات إلغاء صالحة للاستخدام تحدث الرفض؛ fail-open يعني أن المُتحقِّق يمضي بدونها. يعرض strongSwan الخيار باسم strictcrlpolicy. يرفض OpenVPN مع crl-verify البدء على ملف لا يستطيع قراءته أو تحليله، وتظهر القائمة منتهية الصلاحية كخطأ تحقق TLS بشأن CRL منتهي الصلاحية بدلًا من قبول صامت.

State of the revocation dataFail-closed resultFail-open result
List missing or unreadableVerification fails, so expect an outageEvery client connects, including the revoked one
List past nextUpdateValidation errors until a fresh list is deployedOld status is trusted indefinitely
Revoked serial present in the loaded listHandshake rejected for that certificateHandshake rejected for that certificate

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

تحقق من الجلسة النشطة، ثم من نسخ المفتاح

يُقيَّم الإلغاء أثناء التحقق من الشهادة، وهو يحدث عند الاتصال وعند إعادة التفاوض. تتواصل الجلسة القائمة حتى تعيد التفاوض، والقيمة الافتراضية لـ OpenVPN هي مرة كل ساعة مع reneg-sec 3600. إن كان على الشخص أن يخرج من الشبكة الآن، فأنهِ الجلسة إلى جانب نشر القائمة، ثم أكِّد أن إعادة الاتصال مرفوضة.

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

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

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