bg-tutorials

كيفية إنشاء CSR لشهادة توقيع التعليمات البرمجية (Code Signing Certificate) باستخدام OpenSSL

يوضح هذا الدليل كيفية إنشاء طلب توقيع الشهادة (CSR) لشهادة توقيع الكود (code signing certificate) عند العمل مع OpenSSL، وكذلك، وبنفس القدر من الأهمية، الحالات التي لا ينطبق فيها هذا النهج بعد الآن. منذ 1 يونيو 2023، تغيرت قواعد مفاتيح توقيع الكود، لذلك لم تعد سلطات إصدار الشهادات تقبل سير العمل القديم القائم على OpenSSL فقط عبر البرمجيات لإصدار شهادة توقيع كود موثوقة علنًا. اقرأ المتطلبات أدناه أولًا، ثم اتبع المسار الذي يتوافق مع كيفية تخزين مفتاحك.

مهم: يجب أن تكون مفاتيح توقيع الكود موجودة على جهاز عتادي

بموجب متطلبات خط الأساس لتوقيع الكود الصادرة عن CA/Browser Forum، والمعمول بها منذ 1 يونيو 2023، يجب إنشاء وتخزين المفتاح الخاص لكل شهادة توقيع كود موثوقة علنًا، سواء كانت شهادة قياسية (OV) أو شهادة التحقق الموسع (EV)، في وحدة تشفير عتادية تستوفي معيار FIPS 140-2 Level 2، أو Common Criteria EAL4+، أو معيارًا مكافئًا. يجب أن يكون المفتاح غير قابل للتصدير. كانت شهادات توقيع الكود من نوع EV تتطلب دائمًا استخدام العتاد؛ وقد وسّعت هذه القاعدة نفس الحماية لتشمل الشهادات القياسية أيضًا.

النتيجة العملية لذلك: المفتاح الخاص وطلب CSR الذي يُنشأ بالكامل من خلال البرمجيات باستخدام OpenSSL العادي على حاسوب محمول أو خادم لم يعد مقبولًا لإصدار شهادة توقيع كود موثوقة علنًا. توقفت سلطات إصدار الشهادات عن دعم إنشاء المفاتيح عبر المتصفح وطلبات CSR البرمجية لهذه المنتجات. أصبح مفتاحك الآن موجودًا في أحد هذه الأماكن:

  • رمز عتادي (hardware token) يُشحن إليك (على سبيل المثال YubiKey أو SafeNet/Thales eToken). مع طريقة التسليم عبر الرمز + الشحن، تقوم سلطة إصدار الشهادات بإنشاء المفتاح على الجهاز والتعامل مع طلب CSR، لذا لن تحتاج إلى إنشاء واحد باستخدام OpenSSL.
  • وحدة أمان عتادية (HSM) تتحكم بها أنت، سواء كانت محلية أو قائمة على الحوسبة السحابية. هنا تقوم بإنشاء المفتاح داخل وحدة HSM وإصدار طلب CSR مع شهادة تصديق للمفتاح تُثبت أن المفتاح تم إنشاؤه في عتاد فعلي.
  • خدمة توقيع سحابية تحتفظ بالمفتاح داخل وحدة HSM متوافقة نيابة عنك.

اختر المسار المناسب لك بناءً على كيفية استلامك وتخزينك للشهادة. للحصول على نظرة عامة، راجع دليل طرق تسليم شهادات توقيع الكود. للحصول على خطوات إنشاء طلب CSR وشهادة التصديق المستندة إلى العتاد، اتبع الدليل الذي يتوافق مع جهازك:

إذا كنت تستخدم وحدة HSM من جهة مصنّعة مختلفة، فقم بإنشاء طلب CSR باستخدام أدوات ذلك المصنّع لضمان بقاء المفتاح داخل العتاد. لا يزال أمر req في OpenSSL الذي سيُعرض لاحقًا يلعب دورًا في تلك سير العمل عند استخدام OpenSSL للتحكم بوحدة HSM من خلال مزوّد أو محرك (engine)، ولكن يجب أن يشير إلى مفتاح موجود مسبقًا في الوحدة، ولا يمكن أبدًا أن يكون ملف مفتاح برمجي عادي بالنسبة لشهادة موثوقة علنًا.

متى تظل طريقة OpenSSL البرمجية قابلة للتطبيق

ينتج سير العمل البرمجي أدناه ملف مفتاح على القرص. وهذا مقبول فقط في الحالات التي لا تكون فيها شهادة توقيع كود موثوقة علنًا، مثل:

  • التوقيع الداخلي أو التجريبي باستخدام سلطة إصدار شهادات خاصة/مؤسسية، حيث تحكم سياستك الخاصة، وليس قواعد CA/Browser Forum العامة، طريقة تخزين المفتاح.
  • تعلم بنية أوامر OpenSSL قبل الانتقال إلى رمز عتادي أو وحدة HSM.
  • تحضير تفاصيل الموضوع (subject) وصياغة الأمر التي ستستخدمها مرة أخرى عند إنشاء طلب CSR الفعلي مقابل مفتاحك العتادي.

لا تقدّم مفتاحًا وطلب CSR تم إنشاؤهما برمجيًا إلى سلطة إصدار شهادات عامة للحصول على شهادة توقيع كود من نوع OV أو EV. سيتم رفضهما. مع وضوح هذا الحد، فيما يلي عملية OpenSSL والأوامر المستخدمة فيها.

1. تحميل وتثبيت OpenSSL

إذا لم يكن OpenSSL موجودًا على حاسوبك بعد، قم بتحميل إصدار حديث (OpenSSL 3.x أو أحدث) لنظام التشغيل الخاص بك وتثبيته. يأتي نظام macOS ومعظم توزيعات Linux مع OpenSSL مثبتًا مسبقًا؛ أما في Windows، فعادةً ستحتاج إلى تثبيت نسخة من طرف ثالث. تأكد من التثبيت والإصدار باستخدام:

openssl version

2. افتح الوحدة الطرفية وقم بتشغيل OpenSSL

في Windows، اضغط على مفتاح Windows + R، ثم اكتب cmd واضغط Enter. بالنسبة للأوامر التي تكتب ملفات في مجلدات محمية، شغّل موجه الأوامر (Command Prompt) كمسؤول: انقر بزر الفأرة الأيمن على أيقونة موجه الأوامر واختر Run as administrator. يمكنك أيضًا كتابة cmd في شريط البحث بشريط المهام وفتح موجه الأوامر من هناك. في macOS أو Linux، افتح تطبيق الوحدة الطرفية.

إذا لم يكن الملف التنفيذي لـ OpenSSL موجودًا في مسار النظام على Windows، انتقل إلى مجلد تثبيته أولًا، باستخدام المسار الذي يتوافق مع نسختك:

cd OpenSSL-Win32bin
cd "Program FilesOpenSSL-Win64bin"

3. إنشاء المفتاح الخاص وطلب CSR

ابدأ أولًا بإنشاء المفتاح الخاص. تتطلب شهادات توقيع الكود مفتاحًا قويًا: استخدم مفتاح RSA بحجم 3072 بت (أو أكبر)، وهو الحد الأدنى الشائع لتوقيع الكود، أو مفتاح ECDSA على المنحنى P-256. لإنشاء مفتاح RSA بحجم 3072 بت:

openssl genrsa -out code_signing_key.key 3072

ثم أنشئ طلب CSR من هذا المفتاح. يستخدم OpenSSL خوارزمية SHA-256 لتوقيع الطلب افتراضيًا في الإصدارات الحالية:

openssl req -new -key code_signing_key.key -out code_signing_csr.txt

4. تعبئة حقول طلب CSR

يطلب OpenSSL منك تفاصيل تحدد هوية صاحب الشهادة. أدخل معلومات دقيقة وحديثة تتطابق مع سجلات مؤسستك القانونية، لأن سلطة إصدار الشهادات ستقوم بالتحقق منها. استبدل الأمثلة أدناه بتفاصيلك الخاصة:

  • البلد (C): رمز البلد المكوّن من حرفين حيث تم تسجيل شركتك أو حيث تقيم، على سبيل المثال US.
  • الولاية أو المقاطعة (ST): الاسم الكامل للولاية أو المقاطعة، على سبيل المثال California.
  • المنطقة المحلية (L): المدينة التي تم فيها تسجيل شركتك، على سبيل المثال San Jose.
  • اسم المؤسسة (O): الاسم القانوني الرسمي لمؤسستك، أو اسمك القانوني الكامل إذا كانت الشهادة لفرد، على سبيل المثال GPI Holding LLC.
  • الوحدة التنظيمية (OU): القسم الذي يطلب الشهادة، على سبيل المثال IT. هذا الحقل اختياري.
  • الاسم الشائع (CN): الاسم القانوني لمؤسستك، أو اسمك الكامل في حال كانت الشهادة لفرد. بالنسبة لتوقيع الكود، الاسم الشائع هو الهوية التي تظهر كناشر البرنامج.
  • عنوان البريد الإلكتروني: عنوان بريد إلكتروني صالح للتواصل.

يمكنك ترك حقل كلمة السر التحدي (challenge password) وحقل اسم الشركة الاختياري فارغين: فقط اضغط Enter عند تلك المطالبات.

يمكنك أيضًا دمج الخطوتين 3 و 4 في أمر واحد. توفر العلامة -subj تفاصيل الموضوع مباشرة بحيث لا يطلبها OpenSSL منك، وتترك -nodes المفتاح غير مشفّر على القرص (أعاد OpenSSL 3.x تسمية هذه العلامة إلى -noenc، لكن -nodes لا تزال تعمل). لاحظ أن القيمة تستخدم علامات اقتباس مستقيمة، لا منحنية، وأن السلسلة كاملة محاطة بزوج واحد من علامات الاقتباس:

openssl req -new -newkey rsa:3072 -nodes -keyout code_signing_key.key -out code_signing_csr.txt -subj "/C=US/ST=California/L=San Jose/O=GPI Holding LLC/OU=IT/CN=GPI Holding LLC"

5. تحقق من طلب CSR

قبل تقديم أي شيء، تأكد من أن طلب CSR صالح وأن تفاصيله صحيحة. يعرض هذا الأمر الموضوع المفكوك التشفير ويتحقق من توقيع الطلب:

openssl req -noout -text -verify -in code_signing_csr.txt

تحقق من أن سطر الموضوع (Subject) يعرض البلد والمؤسسة والاسم الشائع تمامًا كما تنوي، وأن حجم المفتاح العام يبلغ 3072 بت أو أكثر (أو أنه مفتاح ECDSA)، وأن خوارزمية التوقيع هي SHA-256. يجب أن تشاهد أيضًا رسالة verify OK، التي تؤكد أن طلب CSR تم توقيعه بواسطة المفتاح الخاص المطابق له.

6. نقل المفتاح الخاص وطلب CSR إلى مجلد آمن

انقل المفتاح الخاص وطلب CSR من مجلد OpenSSL إلى مجلد تتحكم فيه أنت. احتفظ بسرية المفتاح الخاص ولا تشاركه أبدًا مع أي شخص خارج مؤسستك: فأي شخص يحصل عليه يمكنه توقيع برامج باسمك. في Windows، أنشئ مجلدًا وانقل الملفات إليه:

md c:codesigningcertificates
move code_signing_key.key c:codesigningcertificates
move code_signing_csr.txt c:codesigningcertificates

7. تقديم طلب CSR إلى سلطة إصدار الشهادات (CA)

افتح ملف CSR في أي محرر نصوص عادي، مثل Notepad، وانسخ محتواه بالكامل، بما في ذلك سطري —–BEGIN CERTIFICATE REQUEST—– و —–END CERTIFICATE REQUEST—–، إلى نموذج التسجيل خلال عملية طلب الشهادة. تبدو كتلة طلب CSR كما يلي:

-----BEGIN CERTIFICATE REQUEST-----
MIICvDCCAaQCAQAw...
...base64 encoded request...
-----END CERTIFICATE REQUEST-----

تذكّر القاعدة المذكورة في بداية هذا الدليل: بالنسبة لشهادة توقيع كود موثوقة علنًا، يجب أن يتوافق طلب CSR الذي تقدمه مع مفتاح تم إنشاؤه والاحتفاظ به في عتاد متوافق. إذا قمت بإنشاء مفتاح برمجي باستخدام الخطوات المذكورة أعلاه، فاستخدمه فقط للتوقيع الداخلي أو التجريبي. لطلب شهادة من سلطة إصدار عامة، أنشئ طلب CSR من رمزك العتادي أو وحدة HSM باستخدام دليل YubiKey أو Luna HSM، أو اترك سلطة إصدار الشهادات تقوم بإنشاء المفتاح عند اختيار طريقة التسليم عبر الرمز + الشحن.

لمزيد من بنية أوامر OpenSSL العامة بخلاف إنشاء طلب CSR، يُعد مرجع أوامر OpenSSL أداة مساعدة مفيدة. يمكنك أيضًا استكشاف المزيد من دروس OpenSSL التعليمية و دروس توقيع الكود التعليمية، أو قراءة طرق أخرى لـ إنشاء طلب CSR.

وفِّر 10% على شهادات SSL عند الطلب اليوم!

إصدار سريع، وتشفير قوي، وثقة في المتصفح بنسبة 99.99%، ودعم مخصص، وضمان استرداد المال خلال 25 يومًا. رمز القسيمة: SAVE10

صورة مفصلة لتنين أثناء طيرانه

كاتب محتوى متمرس متخصص في شهادات SSL. تحويل موضوعات الأمن السيبراني المعقدة إلى محتوى واضح وجذاب. المساهمة في تحسين الأمن الرقمي من خلال السرد المؤثر.