ملف P12 قديم يفشل على OpenSSL 3: كلمة مرور خاطئة أم شيفرة قديمة؟
ميّز بين عبارة مرور مكتوبة خطأً وحزمة RC2 قديمة يرفض OpenSSL 3 فكّها، ثم أعد ختم الملف دون نزع حماية المفتاح.
يأخذ مربّع حوار الاستيراد كلمة مرورك، ثم يدور لحظة، ثم يقول إنه لا يستطيع قراءة الحزمة. لا شيء في تلك الرسالة يخبرك ما إذا كنت قد أخطأت في كتابة عبارة المرور أم أن الملف خُتم بشيفرة لم يعد العميل يوفّرها. هذان عطلان مختلفان بإصلاحين مختلفين، والاختيار الخاطئ يؤدي إلى خفض إصدار العميل، وهو ما يؤجّل القرار فقط. ومراقبة المرحلة التي يتوقف عندها العميل تفصل بينهما في نحو دقيقة.
ما يحدث بين مربّع الحوار وقائمة الشهادات
ملف .p12 حاوية وليس شهادة. داخله حقيبة شهادات واحدة أو أكثر، وحقيبة مفتاح خاص مشفّرة بمفتاح مشتق من كلمة مرورك، إضافة إلى فحص سلامة يُسمّى MAC على الملف كله. فتحه يعني التحقق من ذلك الـMAC، وفكّ تشفير حقيبة المفتاح، ومطابقة الشهادة بالمفتاح الذي يخرج منها.
تظهر مشكلة كلمة المرور عند خطوة الـMAC. وتظهر مشكلة الشيفرة لاحقًا، عندما يجب فكّ تغليف حقيبة المفتاح ولا يملك البناء الذي يفكّها أي تنفيذ للخوارزمية المذكورة في الملف.
الحالة الثانية شائعة على الأنظمة الحالية لأن OpenSSL 3 نقل مجموعة من الخوارزميات القديمة إلى موفّر legacy اختياري. الحزم التي يصدّرها OpenSSL 1.x عادةً تختم الشهادات بـRC2 ببت 40 وتختم المفتاح الخاص بـTriple DES ثلاثي المفاتيح. وبناء OpenSSL 3 الافتراضي ما زال يتحقق من الـMAC بكلمة مرورك الصحيحة ثم يفشل عند الحقيبة، فلم تكن كلمة المرور خاطئة يومًا وإعادة كتابتها لا تغيّر شيئًا.
اقرأ الحاوية دون كتابة أي مفتاح إلى ملف
اطلب من بناء OpenSSL على جهازك تحليل الملف وقراءة النقطة التي يستسلم عندها. الفحص دون ملف إخراج يترك المفتاح مشفّرًا على القرص، وهذا هو السبب الوحيد الذي يجعل هذه الخطوة آمنة على مضيف مشترك.
openssl pkcs12 -in vpn-identity.p12 -info -nooutعلى حزمة legacy بكلمة المرور الصحيحة، يطبع هذا سمات الحقيبة ثم يتوقف عند digital envelope routines::unsupported. وبكلمة مرور خاطئة تحصل على Mac verify error: invalid password? قبل قراءة أي حقيبة. الرسالتان تشيران في اتجاهين متعاكسين، وهذه بالضبط هي المعلومة التي كتمها العميل.
إذا كان العطل هو عطل الخوارزمية غير المدعومة، فأعد تشغيل الأمر نفسه مع إضافة -legacy دون تغيير أي شيء آخر. هذا الخيار يحمّل موفّر legacy لتلك العملية وحدها. وهو لا يجعل عميل VPN يحلّل الحزم القديمة، ولا يمسّ سياسة التشفير على مستوى النظام، وهو قياس لا إصلاح، لأن الملف ما زال بحاجة إلى الاستبدال.
أي خطأ يعني أي مرحلة
جدول قصير يفصل بين النتائج الثلاث، والصياغة أهم من المكان الذي ظهر فيه مربّع الحوار.
| Text you see | Stage | What it tells you |
|---|---|---|
Mac verify error: invalid password? | Integrity check | Passphrase or cached credential, not the cipher |
digital envelope routines::unsupported | Bag decrypt | Algorithm missing from the default provider |
not enough data / header too long | Container format | Wrong encoding, edited file, or truncated download |
نص مثل not enough data أو header too long لا ينتمي إلى أي من المجموعتين الأوليين. هذه مشكلة تنسيق: ملف DER أُعيدت تسميته إلى .pem، أو نسخة أفسدها محرّر أعاد كتابة نهايات الأسطر، أو تنزيل غير مكتمل. قارن المجموع الاختباري بالذي أرسله المُصدر قبل أن تبدأ النظر في الشيفرات.
تعامل مع Mac verify error كدليل على كلمة المرور فقط. يعني أن الـMAC المحسوب من كتابتك لا يطابق القيمة المخزّنة، وهذا يحدث بخطأ مطبعي، أو بكلمة مرور مخزّنة مؤقتًا من استيراد سابق، أو بملف أُعيد تصديره بعبارة مرور مختلفة. ولا يقول شيئًا عن كون الخوارزميات داخله قديمة.
ابنِ حزمة يستطيع العميل فتحها فعلًا
بمجرد أن يؤكد محلّل legacy أن الملف سليم، فالإصلاح الدائم هو استبداله بنسخة يدعم العميل الهدف خوارزمياتها: AES-256-CBC لحقائب المفتاح والشهادات، وPBKDF2 مع SHA-256 للاشتقاق، وSHA-256 للـMAC. ويمكن لمسؤول PKI لديك تصدير ذلك من المادة المفتاحية نفسها، وتبقى الشهادة داخله هي التي تثق بها خوادمك أصلًا.
عندما تضطر إلى التحويل محليًا، اطلب من أداة pkcs12 إعادة ختم الحقائب بدل تفريغها أولًا. وأبقِ عبارتي المرور خارج سجل الصدفة بقراءتهما من ملف.
openssl pkcs12 -in vpn-identity.p12 -out vpn-identity-aes.p12 \
-keypbe AES-256-CBC -certpbe AES-256-CBC -macalg sha256 \
-passin file:old.pass -passout file:new.passالتحويل الناجح لا يقول شيئًا عن الانتهاء، أو استخدام المفتاح، أو مطابقة المفتاح الخاص، أو ما إذا كان الخادم يثق بسلسلة الإصدار. إعادة التغليف تغيير في النقل لا تجديد، وكل واحد من تلك لا يزال يحتاج فحصه الخاص.
تجاوز أي وصفة تكتب مفتاحًا وسيطًا غير محمي أو كلمة مرور إخراج فارغة لمجرد أن العميل قبل الملف بعد ذلك. حزمة قابلة للقراءة نُزعت منها الحماية نتيجة أسوأ من فشل الاستيراد الذي بدأت به.
تأكد من أن العميل استورد الملف الذي بنيته
التحليل النظيف في الطرفية يثبت أن الحاوية صالحة. ولا يثبت أن العميل اختارها، لأن ملفًا تعريفيًا متبقيًا قد يظل يشير إلى الملف القديم، وبعض العملاء يخزّنون هوية مستوردة تحت اسم لم تختره.
اطبع الهوية التي أنت على وشك استيرادها وقارنها بما يعرضه العميل في عرض الشهادات لديه.
openssl pkcs12 -in vpn-identity-aes.p12 -clcerts -nokeys -passin file:new.pass \
| openssl x509 -noout -subject -dates -fingerprint -sha256احذف إدخال الملف التعريفي القديم أولًا، ثم استورد. إذا سجّل العميل الموضوع أو البصمة التي حمّلها، فطابقها مع السطر أعلاه؛ وإذا عرض اسمًا ودّيًا فقط، فافحص تاريخ الانتهاء بدلًا من ذلك، لأنه أصعب في الالتباس مع شهادة أخرى من المُصدر نفسه.
يسرد مرجع PKCS12 خيارات الموفّر وعبارة المرور والإخراج المستخدمة هنا. إبقاء موفّر legacy خارج بيئة العميل هو المقصود: قِس به، واشحن دونه، واترك المفتاح الخاص محميًا على القرص.