البطاقة الذكية التي تحمل المفتاح الصحيح لا تزال بحاجة إلى من يخبرها أي كائن عليها يجب استخدامه. لا يريد OpenConnect في تلك الحالة ملف .key منسوخًا؛ بل يريد معرف URI من نوع PKCS#11 يسمّي الشهادة، وعندما يتعذر على البحث التلقائي إتمام المهمة، المفتاح الخاص المجاور لها. الجزء المزعج أن أي معرف URI صحيح نحويًا لا يثبت شيئًا. عليه أن يسمّي التسجيل الذي تثق به البوابة بالفعل، لا مجرد كائن ترضى البطاقة بفتحه.

ما يريده العميل بدلًا من مفتاح مُصدَّر

يقبل الخيار -c عادةً مسار ملف، لكن عندما تُحلَّل القيمة كمعرف URI من نوع PKCS#11 يعاملها OpenConnect كإشارة إلى كائن داخل الرمز المميز لا إلى ملف على القرص. ويعمل الخيار -k بالطريقة نفسها مع المفتاح الخاص. لا يُصدَّر أي شيء، ولا يغادر المفتاح الحماية التي توفرها البطاقة أبدًا. وما يحتاجه العميل منك هو اسم تتفق عليه وحدة الرمز المميز ومخزن الشهادات وتسجيل البوابة.

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

معرفان URI، مهمتان مختلفتان

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

يجيب معرف URI الخاص بالمفتاح عن مكان وجود المادة الخاصة المطابقة عندما يتعذر على OpenConnect استنتاجها. فمع ضبط -c وحده، يبني العميل بحثًا عن المفتاح من خصائص الشهادة؛ وتوريد -k يستبدل التخمين بإشارة صريحة إلى كائن. أما رقم PIN الخاص بالرمز المميز فهو مدخل ثالث غير ذي صلة: يفتح البطاقة للعملية، ولا يحدد كائنًا أبدًا.

openconnect --protocol=anyconnect \
  -c 'pkcs11:model=PKCS%2315%20emulated;manufacturer=piv_II;serial=1a2b3c4d;id=%01' \
  vpn.example.net

كل ما في تلك السلسلة المقتبسة بيانات. فالفواصل المنقوطة تفصل سمات URI، والهروب النسبي يرمّز الأحرف التي كانت ستعطّل التحليل، لذا يجب أن تصمد الوسيطة كاملة أمام الصدفة.

العثور على معرف URI المطابق لتسجيلك

يشحن GnuTLS أداة p11tool، التي تسرد ما يستطيع المستخدم الحالي الوصول إليه فعليًا عبر p11-kit. ابدأ بـ p11tool --list-tokens، ثم اسرد كائنات الشهادات على الرمز المميز الذي يهمك. أضف --login عندما لا تظهر الكائنات إلا بعد رقم PIN، وقارن الموضوع والمُصدر بسجل التسجيل بدلًا من اختيار أول ما يظهر.

إذا لم يظهر الرمز المميز إطلاقًا، فالمشكلة أدنى من OpenConnect: لا توجد وحدة مسجلة في p11-kit لتلك الوسيطة، أو أن الوحدة مسجلة لحساب مختلف. التسجيل على مستوى النظام يقع تحت /etc/pkcs11/modules، ويمكن لدليل خاص بكل مستخدم أن يحمل الشيء نفسه دون المساس بنسخة النظام. تحقق من أن مسار المزوّد في ملف الوحدة يشير إلى مكتبة ثبّتها برنامج القارئ فعليًا.

عند نسخ معرف URI من القائمة، احتفظ بالاقتباسين حوله. فالفواصل المنقوطة غير المقتبسة تقطع الوسيطة عند أول سمة، ثم يبلّغ العميل عن كائن لا يستطيع العثور عليه.

عندما يتخلى البحث التلقائي عن المفتاح

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

تأكد من وجود المفتاح وظهوره باستخدام p11tool --list-keys قبل لوم العميل. ثم تحقق من أن الكائن موسوم بأنه صالح للتوقيع أو فك التشفير، لأن مفتاحًا مولّدًا بسمات خاطئة لا يستطيع إكمال مصافحة مهما كان معرف URI صحيحًا. لا تنقل قيمة pkcs11-id مسلسلة من ملف تعريف OpenVPN إلى خيار OpenConnect؛ فالعميلان يستخدمان صيغتي معرف مختلفتين حتى وهما يتحدثان إلى البطاقة نفسها.

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

أعطال تبدو وكأنها مشاكل URI فقط

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

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

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

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