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

سمِّ الكائن قبل أن تسمّي القيمة

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

سجّل الخوارزمية أيضًا. SHA-256 هو التوقع المعتاد اليوم، لكن الأدوات الأقدم كانت تطبع SHA-1 ما لم تطلب غير ذلك، وقيمة سداسية من 40 محرفًا علامة على أنك على وشك مقارنة شيئين مختلفين.

اجلب القيمة المتوقعة عبر قناة ثانية

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

اطلب القيمة كاملة والخوارزمية، لا بادئة أبدًا. النقطتان وحالة الأحرف لا تهمّان، لكن الاقتطاع يحوّل فحصًا من 256 بت إلى لعبة تخمين.

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

استخرج القيمة من جهتك

في ملف شهادة، الأمر هو openssl x509 -in server.crt -noout -fingerprint -sha256. خلاصة التجزئة الصريحة مهمة: بدونها يعتمد الناتج على إصدار OpenSSL لديك. الناتج سلسلة سداسية مفصولة بنقطتين، لذا أزل النقطتين وحوّل الطرفين إلى أحرف صغيرة قبل المقارنة.

لنقطة طرفية تتحدث TLS مباشرة، اتصل وادفع الشهادة إلى الخارج: openssl s_client -connect vpn.example.com:443 -servername vpn.example.com < /dev/null | openssl x509 -noout -fingerprint -sha256. هذا يعمل للوحة إدارة ويب أو مستمع TLS، لا لـ OpenVPN الذي تقع قناة تحكمه داخل النفق. مع OpenVPN، اقرأ الشهادة من الملف الشخصي على القرص بدلًا من محاولة التقاطها من المقبس.

ينبغي أن تكون المقارنة آلية. طبّع القيمتين باستخدام tr -d ':' وطيّ حالة الأحرف، ثم قارن السلسلة كاملة. المقارنة بالعين هي الطريقة التي تخفي بها بادئة مطابقة اختلافًا في البايت الأخير. إذا اختلفت السلسلتان، فاعتبرها مختلفة فعلًا قبل أن تبحث عن تفسير.

شروط التوقف

توقف إذا اختلف الكائن، لأن بصمة CA لا تبرئ شهادة طرفية وشهادة طرفية لا تبرئ CA. توقف إذا اختلفت الخوارزمية، لأن قيمة SHA-1 مقارنة بقيمة SHA-256 لا تخبرك بشيء. توقف إذا طابقت البصمة لكن الشهادة منتهية أو ملغاة أو صادرة لاسم مختلف؛ فالتجزئة المطابقة ليست فحص صلاحية ولا تصلح سلسلة مكسورة. توقف أيضًا إذا لم يطابق الرقم التسلسلي الرقم التسلسلي في السجل الذي تتحقق منه، لأن ذلك أرخص طريق لرصد شهادة مُستبدلة.

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

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

بعد المقارنة

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

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

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