أدوات المطور · التشفير ووحدة فك التشفير Base64
أوضح PEM: لماذا تكون الشهادات والمفاتيح Base64 بين BEGIN و END
· خلفية
base64 ترميز
الملف PEM هو ملف DER ثنائي ملفوف في Base64 مع خطوط درع مميزة. يشرح هذا المنشور أصول التنسيق وقواعد الخط الخاصة به وما يمكنك وما لا يمكنك تعلمه عن طريق فك تشفيره.
الشهادة التي "تشبه النص" ولكنها تفشل في التحليل - خطأ مطبعي في الرأس، ورجوع إلى السطر الأول والتنسيق الموجود أسفله
الملف PEM هو ملف ثنائي مشفر بـ Base64 وملفوف في تسميات نصية. يأتي الاسم من البريد المحسّن للخصوصية (RFC 1421، 1992)، والذي يستخدم هذا التنسيق للرسائل المشفرة. لا يزال التنسيق موجودًا اليوم في TLS الشهادات، وSSH المفاتيح، وGPG المفاتيح. البنية بسيطة: سطر يقول -----BEGIN CERTIFICATE----- (أو BEGIN PRIVATE KEY، BEGIN PUBLIC KEY، وما إلى ذلك)، متبوعًا بـ 64-أسطر أحرف من النص base64، متبوعة بـ -----END CERTIFICATE-----.
يتم فك تشفير نص Base64 إلى تنسيق ثنائي يسمى DER (قواعد التشفير المميزة)، وهي طريقة لإجراء تسلسل للبيانات المنظمة (على وجه التحديد، ASN.1 الهياكل). يمنحك فك تشفير base64 ثنائيًا؛ تتطلب قراءة الثنائي فهم ASN.1، وهو أمر معقد. يوجد الدرع PEM نظرًا لصعوبة إرسال الملفات الثنائية وتحريرها عبر البريد الإلكتروني. قد يتلف ملف الشهادة في شكل ثنائي خالص عند تمريره عبر أنظمة البريد القديمة، USENET، أو نماذج الويب.
درع النص المرئي في كتلة PEM — تسميات حول نص Base64
من خلال تشفير الملف الثنائي باستخدام Base64 وتغليفه في تسميات نصية، تصبح الشهادة بأكملها نصًا 7 بت ASCII يبقى بعد أي نقل. يمكن لمحرر النصوص فتحه. لن يفسده نظام البريد. السطران -----BEGIN و----END عبارة عن تسميات للبشر والأدوات الآلية؛ فهي تشير بوضوح إلى نوع البيانات الموجودة بداخلها. تحمل الشهادة اسم CERTIFICATE؛ المفتاح الخاص يحمل العلامة PRIVATE KEY.
لم يتم التحقق من الملصق بواسطة برنامج التشفير؛ إنها مجرد تلميح للبشر والأدوات. يأتي حد سطر الأحرف 64 في PEM من RFC 1421 ونفس المنطق MIME كقاعدة البريد الإلكتروني 64: كانت أنظمة البريد القديمة لها حدود لطول الأسطر، و64 أحرف تناسب محطة الثمانينات. PEM يغلف مخرجات base64 عند 64 أحرف بنهاية سطر (CR LF على Windows، LF على Unix).
من النص المسمى إلى وحدات البايت التي تم فك تشفيرها - لا يقوم هذا المستودع بإنشاء سجل التنسيق
عند فك تشفير شهادة PEM، يجب على المحلل اللغوي إزالة خطوط الدرع (-----BEGIN...، -----END...) وفواصل الأسطر، ثم يقوم base64 بفك تشفير الباقي. يمكن أن يؤدي رجوع حرف الإرجاع أو التسمية غير المتطابقة إلى تعطيل التحليل. التفاف السطر ليس جزءًا من معيار base64 (RFC 4648 base64 غير مغلف)؛ فهو خاص بـ PEM. يوجد داخل Base64 ملف ثنائي مشفر بـ DER. DER هو ASN.1 (ترميز بناء الجملة الملخص)، وهي مواصفات معقدة لتمثيل هياكل البيانات.
الشهادة عبارة عن سجل منظم يحتوي على اسم موضوع ومفتاح عام وتوقيع وبيانات التعريف. ASN.1 لا يصف البايتات مباشرة؛ فهو يصف كيفية ترميز البنية.
تشريح الكتلة كمدخل لهذه الأداة - قم بإزالة الملصقات وتمرير جسم Base64 فقط
يبدأ الترميز بثلاثة توائم ذات قيمة العلامة. على سبيل المثال، يتم ترميز SEQUENCE في ASN.1 كعلامة 0x30، متبوعة بطول المحتويات، متبوعة بالمحتويات نفسها. تبدأ الشهادة دائمًا بالبايتات 0x30 0x82 (التسلسل، الطول المشفر بالبايتتين)، والذي يظهر كـ MII في base64.
التحقق من الشهادة دون تحليلها: الأحرف الثلاثة الأولى من نص الشهادة PEM تكون دائمًا تقريبًا MII (وهو 0x30 0x82 في base64، بداية SEQUENCE). إذا لم يتم فك تشفير الكتلة PEM إلى 0x30، فهذا يعني أن base64 تالف أو أن التسمية خاطئة. يمكن لأداة التشفير وفك التشفير Base64 فك تشفير الجسم وإظهار الشكل السداسي: الصق خطوط base64 (بدون درع -----BEGIN وEND)، وقم بإزالة فواصل الأسطر، وفك التشفير.
ما يكشفه فك التشفير: البايتات الثنائية، وليس حقول الشهادة التي تم تحليلها
إذا كان الإخراج ثنائيًا يبدأ بـ 30 82، فمن المحتمل أن يكون بنية شهادة صالحة. إذا كانت هراء أو نصًا، فهذا يعني فشل فك التشفير أو أن Base64 خاطئ. أخطاء PEM الشائعة: عدم تطابق التسمية (على سبيل المثال، نص الشهادة مع تسمية PRIVATE KEY)، أو مشكلة نهاية السطر في Windows (يختنق بعض المحللين اللغويين عند CRLF)، أو خطأ مطبعي في سطر الدرع (مسافات أو أحرف إضافية)، أو فواصل أسطر مفقودة.
تتوقع الأدوات -----BEGIN CERTIFICATE----- وليس -----BEGIN CERT----- أو BEGIN CERTIFICATE. يمكن أن يؤدي نسخ PEM ولصقه من متصفح الويب أو PDF إلى تقديم علامات اقتباس Unicode أو علامات الاقتباس الذكية بدلاً من علامات الاقتباس ASCII، مما يؤدي إلى كسر التسمية. يعد لصق مفتاح خاص في حقل الشهادة خطأً شائعًا؛ سيرفضها المحلل اللغوي لأن التسمية غير متطابقة. PEM يدعم كتل متعددة في ملف واحد.
مثال عملي: فك تشفير نص قصير وفحص البايتات دون تأكيد توقيع الشهادة
قد يحتوي ملف المفتاح SSH على مفتاح خاص (المسمى PRIVATE KEY) ومفتاح عام (المسمى PUBLIC KEY)، أو كتل شهادات متعددة. يقرأ المحلل الملف من الأعلى، ويبحث عن الأسطر التي تبدأ بـ -----BEGIN. عندما يجد واحدًا، فإنه يقرأ حتى -----END مع التسمية المطابقة والمستخلصات وbase64-يفك تشفير الجسم ويعالجه. ثم يستمر في البحث عن الكتلة التالية.
تكون سلسلة الشهادات المتسلسلة عن طريق الخطأ (كتل PEM المتعددة للشهادة والوسائط الخاصة بها) في ملف واحد صالحة إذا كانت جميع التسميات صحيحة. تم توحيد تنسيق PEM للبريد المحسّن للخصوصية (RFC 1421) في أوائل التسعينيات.
ما لا يغطيه هذا — تحليل بنيات ASN.1 وتشفير المفتاح الخاص وحزم PKCS#12
RFC 7468 (2015) قام بتحديث التعريف، وتوضيح قواعد طول الخط، وتنسيق خط الدرع، وحالات الحافة. تشير معظم الأدوات والمعايير إلى RFC 7468 الآن. توجد تنسيقات ثنائية إلى نص أخرى (مثل DER-to-hex لبعض البروتوكولات)، ولكن PEM مع تسميات base64 وASCII هي المعيار الفعلي للتشفير وTLS لأنها قابلة للقراءة من قبل الإنسان، ونص عادي، وسهل النسخ أو الإرسال.
إنشاء كتلة PEM: خذ الملف الثنائي DER (على سبيل المثال، شهادة من مكتبة تشفير)، وقم بتشفيره إلى base64، ولف النتيجة في 64 أحرف مع فواصل الأسطر، وأحاطها بـ -----BEGIN CERTIFICATE----- و----END CERTIFICATE----- خطوط. تحليل كتلة PEM: ابحث عن خطوط -----BEGIN و -----END، واستخرج نص base64 (إزالة الدرع وفواصل الأسطر)، وفك تشفير base64 للحصول على الثنائي، ثم قم بتحليل الثنائي DER وASN.1.
الوجبات الجاهزة: PEM هو Base64 مع التصنيفات - كيف يمنحك برنامج التشفير ووحدة فك التشفير Base64 مكانًا محليًا لتجربة نص Base64 للكتلة، بالكامل في المتصفح
تقوم معظم الأدوات بأتمتة هذا الأمر؛ نادرًا ما تقوم ببناء PEM يدويًا. لكن فهم البنية يكون مفيدًا عند تصحيح خطأ في التحليل أو عند التحقق يدويًا من الشهادة. تبدو شهادة PEM كنص، ولكن محتواها عبارة عن بيانات ثنائية. قراءة تسميات البداية والنهاية لا تخبرك بما تحتويه الشهادة؛ يجب عليك فك تشفير base64 وتحليل ASN.1 لرؤية اسم الموضوع والمفتاح العام والمصدر وانتهاء الصلاحية.
يمكن لأداة التشفير وفك التشفير Base64 فك تشفير النص حتى تتمكن من فحص البايتات القليلة الأولى. للتحليل الكامل، تحتاج إلى محلل ASN.1 (تحتوي معظم لغات البرمجة على مكتبات لهذا الغرض). الفكرة الأساسية هي أن PEM عبارة عن تنسيق حاوية: فهو يحتوي على أي بيانات مشفرة بـ DER، وليس الشهادات فقط. يخبرك الملصق بالاستخدام المقصود، ولكن يجب على المحلل اللغوي التعامل مع نوع البيانات بشكل صحيح.