AES-256-GCM غير موجود: قدرة العميل أم التفاوض؟
خطأان في OpenVPN يبدوان متشابهين: نسخة بلا الخوارزمية وأقران بلا شيفرة مشتركة. اقرأ --show-ciphers وdata-ciphers قبل تعديل الملف.
ملف تعريف OpenVPN يعمل في مكان آخر يبلغ بأن AES-256-GCM غير موجود، أو بأن الأقران لا يشتركون في أي شيفرة، فيكون أول ما يخطر تعديل الملف. هاتان الرسالتان تصفان فشلين مختلفين. الأولى تقول إن البرنامج المحلي لا يملك هذه الخوارزمية؛ والثانية تقول إن الطرفين يملكان خوارزميات لكن لا خيار مشترك بينهما. وتعديل الملف لا يصلح أيا منهما حتى تعرف أي الحالتين لديك.
اقرأ نص الخطأ الدقيق والبرنامج الذي أنتجه.
حدد نوع الخطأ الذي لديك
الرسالة عن شيفرة غير موجودة تأتي من تحليل الخيارات على الجهاز المحلي قبل إرسال أي حزمة. أي أن الملف التنفيذي الذي أمامك، أو المكتبة التي يرتبط بها، لا يوفر تلك الخوارزمية. أما الرسالة عن غياب شيفرة مشتركة فتصل لاحقا أثناء التفاوض، وتعني أن الطرفين يدعمان شيفرات لكنهما لا يتفقان على واحدة.
التمييز مهم لأن إحداهما مشكلة إصدار برمجي والأخرى مشكلة إعداد. الأولى يحسمها رقم إصدار. والثانية يحسمها مقارنة قائمتين.
فجوة في القدرات المحلية
النسخ المجتمعية القديمة أقدم من الإعدادات الافتراضية الحديثة، وقد يحمل تطبيق سطح مكتب محركه الخاص المختلف عن حزمة سطر الأوامر المثبتة إلى جانبه. نفذ الفحوص على الملف التنفيذي الذي أطلق الاتصال فعليا، ثم اختر نسخة مدعومة بدلا من محاولة تعليم برنامج قديم خوارزمية جديدة.
openvpn --version openvpn --show-ciphers | grep -i gcm openvpn --show-tls | head -5
إن لم يظهر AES-256-GCM في تلك القائمة فلن يضيفه أي سطر في الملف. الحل عميل أحدث أو نسخة مختلفة، وتصبح قيود القرين الأقدم مسألة تصميم منفصلة.
بالنسبة إلى عملاء OpenVPN 3 يختلف المحرك والتوجيهات المقبولة عن خط المجتمع 2.x، لذا قد يفشل نص الملف نفسه لأسباب لا علاقة لها بقائمة الشيفرات.
فجوة في التفاوض
حين يسرد الطرفان الخوارزمية، يبقى سؤال أي قائمة يقدمها كل جانب. غيرت نسخة OpenVPN المجتمعية اسم توجيه التفاوض: صار ncp-ciphers في 2.4 هو data-ciphers في 2.5، وفي 2.6 يخدم سطر cipher الأقدم التوافق والرجوع غالبا بدلا من تحديد المجموعة المتفاوض عليها.
لهذا قد يترك تغيير سطر cipher القديم فقط قائمة التفاوض كما هي. فالسطر القديم يهم للرجوع، وهو مهمة منفصلة. والخلط بينهما ينتج تعديلات لا تغير شيئا ظاهرا.
openvpn --version | head -2 grep -n -E '^(data-ciphers|ncp-ciphers|cipher|tls-cipher)' server.conf client.ovpn
قارن قائمتي الطرفين ورسالة رفض الخادم. إن كان التقاطع فارغا فاضبط القائمتين عن قصد بدلا من نسخ قيمة من مقال كتب لإصدار آخر. القائمة السخية جدا تضعف كل اتصال بهدوء. والقائمة الضيقة جدا تستبعد القرين الذي أردت الاحتفاظ به.
أبق التوافق صريحا
الرجوع لأجل قرين قديم قرار له كلفة: النشر كله يقبل خيارا أضعف كي يتصل جهاز واحد. اكتب ذلك صراحة، واحصره في القرين الذي يحتاجه.
شرطان يحددان النتيجة. إن كان الخطأ محليا فاستبدل النسخة. وإن كان تفاوضيا فاضبط القائمتين على الطرفين وسجل الإصدارات التي تدعمها.
ثم أبلغ عن الخطأ الدقيق مع إرفاق مخرجات الإصدار والقدرات. هذا الزوج يفصل الخوارزمية الناقصة عن الخلاف، ويوقف الجولة التالية من التعديلات التخمينية قبل أن تبدأ.