OpenVPN: tls-ciphersuites مقابل tls-version-min — ما الذي يفرضه كل منهما
قائمة مجموعات TLS 1.3 لا تحدّ من إصدار البروتوكول، وshow-tls يعرض الدعم المحلي فقط. افحص السياسة والمجموعات والنتائج المتفاوض عليها كلًا على حدة.
تُدمَج ثلاث حقائق مختلفة في سطر واحد في معظم نقاشات OpenVPN حول TLS: ما يستطيع بناء عميلك فعله، وما يسمح به الملف الشخصي، وما تفاوضت عليه الجلسة فعليًا. قائمة مختصرة لمجموعات TLS 1.3 لا تجيب إلا عن السؤال الأوسط إجابة ناقصة، ولا تقول شيئًا عن الحد الأدنى لإصدار البروتوكول. راجع الفحوصات أدناه بالترتيب وتوقف عند أول فحص لا يصمد، لأن كل فحص لاحق يفترض أن الفحوصات السابقة قد حُسمت.
افحص البناء قبل أن تقرأ أي قائمة
لا يمكن لتوجيه إعداد أن يضيف دعمًا لبروتوكول إلى برنامج ثنائي يفتقر إليه. ابدأ بلافتة الإصدار، التي تسمّي مكتبة التشفير المُجمَّعة:
openvpn --version
بناء 2.6 مرتبط بـ OpenSSL يقبل tls-cipher كما يقبل tls-ciphersuites. والبناء المرتبط بـ mbed TLS لا يملك أي اختيار لمجموعات TLS 1.3 على الإطلاق، ويصنّف دليل 2.6 الخيار tls-ciphersuites كخيار خاص بـ OpenSSL. وإذا أُعيد بناء الخادم بواجهة خلفية مختلفة، فقد يتغير سلوك الملف الشخصي نفسه دون أن يتغير سطر واحد من الإعداد.
ما دمت هنا، شغّل openvpn --show-tls واحتفظ بالمخرجات. فهي الجرد الذي ستقارن به لاحقًا، وتكلفة التقاطها زهيدة قبل أن يبدأ أي شخص في تحرير الملفات الشخصية.
اكتب اللافتة والقائمة في تذكرة التغيير، لا في نافذة محادثة. وعندما يختلف شخصان حول ما إذا كان بإمكان عميل تقديم مجموعة ما بعد ستة أسابيع، يحسم المخرجات الملتقطة الأمر في سطر واحد.
افصل حدود الإصدار عن قوائم التشفير
في دليل 2.6 هذه ثلاثة عناصر تحكم، لا عنصر واحد:
- يحدّد
tls-cipherسياسة التشفير في TLS 1.2 وما قبله، وتُمرَّر إلى قائمة تشفير OpenSSL؛ - يختار
tls-ciphersuitesمجموعات TLS 1.3؛ - يحدّ
tls-version-minوtls-version-maxإصدارات البروتوكول المسموح للاتصال باستخدامها.
لذا فإن قائمة مجموعات TLS 1.3 المشذّبة بعناية لا تثبت شيئًا عن إصدار أقدم لا يزال مسموحًا به. وإذا كان الشرط هو «TLS 1.3 فقط»، فإن الحد الأدنى للإصدار هو الذي يحمله، وقائمة المجموعات لا تضيّق إلا الخيارات داخل ذلك الحد:
tls-version-min 1.3
tls-ciphersuites TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256
هذا الزوج يؤدي مهمتين. حذف أحد السطرين يترك الآخر يفرض أقل مما تظن، وهو بالضبط الخلل الذي وُجد هذا الفحص كله لالتقاطه.
قناة البيانات عنصر تحكم رابع. يتفاوض data-ciphers على التشفير المتماثل داخل النفق، ولا تقول نتيجته شيئًا عن إصدار TLS لقناة التحكم. ورؤية AES-256-GCM في ملخص الجلسة ليست دليلًا على TLS 1.3 في أي اتجاه.
اقرأ show-tls كجرد محلي
يسرد --show-tls المجموعات التي تدعمها مكتبة التشفير التي رُبط بها هذا البرنامج الثنائي، بترتيب الأفضلية. وهو ليس تقريرًا من البوابة. ويوضح الدليل صراحة أن القائمة تأتي من المكتبة المحلية، ما يعني أن حاسوبًا محمولًا يعمل بـ OpenSSL 3.x وموجّهًا يعمل ببناء أقدم سيطبعان قائمتين مختلفتين وهما يتحدثان إلى الخادم نفسه.
| Evidence | What it actually describes |
|---|---|
--show-tls output | Capabilities of this client build and its library |
| Profile directives | What this attempt is allowed to offer |
| Session log line | What this one negotiation selected |
لنفترض أن عميلًا يدعم المجموعات A وB وC وأن جلسة واحدة تختار B. هذا لا يثبت شيئًا عن ما إذا كان الخادم يسمح بـ A أو C، ولا عن ما إذا كان B هو خياره الوحيد المسموح. أبقِ الصفوف الثلاثة منفصلة، وستحل معظم خيوط TLS المربكة نفسها.
لا يزال الاحتفاظ بالجرد مجديًا. عندما تفشل جلسة، تُظهر مقارنة قائمة المكتبة بقائمة الملف الشخصي ما إذا كانت للعميل أي فرصة لتقديم ما أراده الخادم. وتُظهر أيضًا ما إذا كان تغيير في الواجهة الخلفية قد أزال بهدوء TLS_CHACHA20_POLY1305_SHA256 من المجموعة التي يعتمد عليها العملاء الأقدم — وهو نوع الانحدار الذي يظهر في صورة حفنة من المستخدمين يفشلون في الاتصال بينما لا يلاحظ الآخرون شيئًا.
اسأل البوابة سؤالًا تستطيع الإجابة عنه
إذا كنت تدير الخدمة، فافحص الإعداد الفعلي للنسخة العاملة بدلًا من ملف على القرص. فقد يكون OpenVPN قد بدأ بمسار --config مختلف، أو يجلب تضمينات، أو لم يُعَد تشغيله منذ التعديل. وسياسة الخدمة العاملة هي ما يواجهه العملاء.
إذا لم تكن تديره، فاطلب من المشغّل متطلبات العملاء المدعومة أو اختبار قبول محدود النطاق. فالمحاولة المرفوضة ليست تلقائيًا مجموعة مرفوضة: فقد ينهي الحد الأدنى للإصدار، أو فحوص هوية الشهادة مثل remote-cert-tls، أو عدم التطابق بين tls-auth و tls-crypt التبادل قبل أن يصبح اختيار المجموعة مهمًا. اقرأ خطأ الخادم قبل تغيير قائمة العميل، لأن «فشل المصافحة» يغطي أربعة أسباب مختلفة وواحدًا فقط منها هو عدم تطابق التشفير.
توجيه openssl s_client إلى منفذ VPN لا يعيد إنتاج السؤال أيضًا. تعمل قناة التحكم داخل تأطير OpenVPN نفسه، لذا يختبر مسبار TLS خام بروتوكولًا مختلفًا على منفذ يتوقع شيئًا آخر. وأي استنتاج يُستخلص منه يتعلق بالمسبار، لا بالنفق.
سجّل نتيجتين وابقِهما منفصلتين
تنتج جلسة مسموح بها جديدة سطرًا لقناة التحكم يسمّي إصدار البروتوكول والتشفير المختار، وسطرًا منفصلًا لقناة البيانات يسمّي تشفير النفق. التقط كليهما مع إصدار العميل واسم الملف الشخصي، ودوّن أي نسخة من الخادم أجابت:
openvpn --config office.ovpn --verb 4 2>&1 | tee session.txt
ثم اقرأ السطرين من ذلك الملف بدلًا من الذاكرة. الزوج هو الدليل؛ فاسم المجموعة وحده تفضيل، وحد الإصدار بيان منفصل عمّا يرفضه الخادم.
نفّذ الفحوصات بهذا الترتيب. أكّد البناء والواجهة الخلفية باستخدام --version. التقط --show-tls قبل تغيير أي شيء. اذكر الحد الأدنى للإصدار المطلوب منفصلًا عن قائمة المجموعات. أكّد السياسة الفعلية للنسخة العاملة مع مالكها. راقب جلسة مسموحًا بها واحدة، وإن سمحت الخطة، محاولة مرفوضة واحدة بإصدار أقدم. سجّل نتائج قناة التحكم وقناة البيانات كاستنتاجات منفصلة.
إذا لم يستطع عميل مطلوب تلبية حد أدنى جديد، فاتخذ قرار الترحيل أو الاستثناء صراحةً بدلًا من خفض قاعدة قبول غير ذات صلة بهدوء لجعل الطرح يبدو منتهيًا.