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

اعثر على الشهادة التي يحمّلها العميل فعلًا

يقبل OpenVPN الجهة الموقّعة بصيغتين، والصيغة تحدّد أي البايتات تهم. يمكن لملف التعريف أن يشير إلى ملف خارجي عبر ca، أو أن يضمّن الشهادة داخل كتلة <ca> في ملف التعريف نفسه. وعندما يوجد الاثنان، تفوز الكتلة المضمّنة ولا يُفتح الملف المجاور لملف التعريف أبدًا.

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

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

بصم النسختين باستخدام openssl

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

openssl x509 -in /etc/openvpn/office/ca.crt -noout -fingerprint -sha256
openssl x509 -in ~/profiles/lab-ca.pem -noout -fingerprint -sha256

إغراء توجيه openssl إلى ملف التعريف نفسه قائم، لكنه يقرأ أول كتلة شهادة تظهر في الملف، وملف التعريف عادةً يحمل <cert> قبل <ca>. استخرج كتلة الجهة الموقّعة ثم بصم الملف المستخرج، لأنها النسخة التي سيستخدمها العميل فعلًا.

sed -n '/^<ca>$/,/^<\/ca>$/p' office.ovpn | sed '1d;$d' > /tmp/office-ca.pem
openssl x509 -in /tmp/office-ca.pem -noout -fingerprint -sha256

تطابق البصمات يعني أن مادة الثقة نفسها وأن خطأ السلسلة له سبب آخر، وهو تحقيق مختلف. اختلاف البصمات يعني شهادات مختلفة، ومن هنا يبدأ القسم التالي.

اقرأ عدم التطابق قبل افتراض هجوم

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

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

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

أصلح الثقة دون إيقاف التحقق

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

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

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

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