bg-tutorials

كيفية إنشاء CSR في Windows

يوضح لك هذا الدليل كيفية إنشاء CSR (Certificate Signing Request) على Windows باستخدام الأدوات المرفقة مع نظام التشغيل.

الـ CSR هو كتلة نصية بصيغة PKCS #10 تحمل مفتاحك العام وتفاصيل الموضوع (Subject) إلى جهة إصدار الشهادات (CA)، والتي توقّعه وتعيد إليك شهادة SSL/TLS. أما المفتاح الخاص المطابق فيبقى على الجهاز الذي أنشأ الطلب.

يوفر لك Windows ثلاث طرق أصلية لبناء CSR، ويتم تناول كل منها أدناه. اختر الطريقة التي تناسب سير عملك:

  • وحدة إضافة Certificates MMC (الرسومية)، والتي ترشدك عبر معالج وتتيح لك إضافة Subject Alternative Name. هذه هي الطريقة التي تناولها الدرس الأصلي، والتي يفضّلها معظم المستخدمين.
  • أداة سطر الأوامر certreq.exe مع ملف INF، وهي قابلة للبرمجة، وتدعم SAN، وهي الطريقة القياسية على Windows Server.
  • ملف OpenSSL لنظام Windows (تنزيل منفصل)، والذي يُنشئ CSR بنفس الطريقة التي يتبعها مسؤولو Linux تمامًا.

إذا كنت تدير خادم ويب له سير عمل خاص به لإنشاء CSR، فاستخدم ذلك بدلاً من خطوات Windows العامة: راجع الأدلة المخصصة لـ IIS وMicrosoft Exchange. تغطي الخطوات أدناه أنظمة Windows 10 وWindows 11 وWindows Server 2016 وحتى 2025؛ سجّل الدخول بحساب يمتلك صلاحيات مسؤول محلي قبل البدء.

إنشاء CSR باستخدام وحدة إضافة Certificates MMC

يأتي Microsoft Management Console (MMC) مرفقًا مع كل إصدار مدعوم من Windows ويوفر معالج Create Custom Request الذي يمكنه بناء CSR مع إدخال SAN. يُخزّن المعالج المفتاح الخاص الجديد في مخزن شهادات Local Computer، بحيث يمكن لأي خدمة Windows على الجهاز (IIS، ADFS، RD Gateway، RDP) استخدام الشهادة الصادرة بمجرد تثبيتها.

الخطوة 1: فتح وحدة إضافة Certificates في MMC لـ Local Computer

اضغط Win + R، اكتب الأمر أدناه، ثم اضغط Enter:

mmc

في وحدة تحكم MMC الفارغة، افتح File > Add/Remove Snap-in. حدد Certificates في القائمة اليسرى، انقر Add، اختر Computer account، انقر Next، اترك Local computer محددًا، وانقر Finish، ثم OK. أصبحت الآن وحدة إضافة Certificates مرتبطة بمخزن Local Computer، وهو ما تقرأ منه خدمات Windows.

الخطوة 2: بدء طلب شهادة مخصص

في اللوحة اليسرى، وسّع Certificates (Local Computer) وانقر بزر الفأرة الأيمن على Personal. اختر All Tasks > Advanced Operations > Create Custom Request. يفتح معالج Certificate Enrollment. انقر Next.

في شاشة Select Certificate Enrollment Policy، حدد Proceed without enrollment policy ضمن Custom Request وانقر Next. هذا يخبر Windows ببناء CSR مستقل لجهة إصدار خارجية بدلاً من التسجيل مقابل قالب داخلي في Active Directory Certificate Services.

الخطوة 3: اختيار القالب وصيغة الطلب

في شاشة Custom request، اضبط Template على (No template) CNG key، اترك Request format على PKCS #10، وانقر Next. تُعد CNG (Cryptography Next Generation) مزود المفاتيح الحديث في Windows وهي الخيار الصحيح للطلبات الجديدة؛ خيار CSP القديم مطلوب فقط للتوافق مع التطبيقات القديمة.

في شاشة Certificate Information، وسّع سهم Details بجانب إدخال الطلب وانقر Properties. مربع الحوار Certificate Properties هو المكان الذي يُضبط فيه باقي إعدادات CSR.

الخطوة 4: تعبئة الموضوع وأسماء Subject Alternative Names

في علامة التبويب General، اكتب اسمًا مألوفًا ووصفًا اختياريًا حتى تتمكن من التعرف على الطلب المعلّق لاحقًا في مخزن الشهادات.

انتقل إلى علامة التبويب Subject. في Subject name، اترك Type على Full DN فقط إذا كنت تعرف ما تفعله؛ في معظم الطلبات، أضف كل مكوّن على حدة باستخدام القائمة المنسدلة Type. لكل سمة من السمات أدناه، اختر النوع، اكتب القيمة، وانقر Add:

  • Common Name: اسم النطاق المؤهل بالكامل الذي تريد تأمينه، على سبيل المثال www.yourdomain.com. بالنسبة لشهادة Wildcard، ضع علامة نجمية أمام النطاق الرئيسي، على سبيل المثال *.yourdomain.com.
  • Country: رمز الدولة المكوّن من حرفين وفق ISO، على سبيل المثال US أو GB أو DE.
  • State: الاسم الكامل للولاية أو المقاطعة (مثال California، وليس CA).
  • Locality: الاسم الكامل للمدينة التي تم فيها تسجيل مؤسستك (مثال San Jose، وليس SJ).
  • Organization: الاسم القانوني لشركتك، تمامًا كما هو مسجّل. مطلوب لشهادات OV وEV. أما بالنسبة لشهادات Domain Validation (DV)، فيُتجاهل هذا الحقل، لذا يصلح أي نص بديل.

تخطَّ سمة Email. ينص المعيار RFC 5280 على أن الشهادات الجديدة التي تحتوي على عنوان بريد إلكتروني يجب أن تضعه في امتداد Subject Alternative Name (كـ rfc822Name)، وليس في الـ Distinguished Name الخاص بالموضوع، وقد تحذف جهات إصدار الشهادات العامة قيمة البريد الإلكتروني من موضوع شهادة TLS. تركه فارغًا يبقي الـ CSR نظيفًا.

في قسم Alternative name في نفس علامة التبويب، اضبط Type على DNS وأضف كل اسم مضيف يجب أن تغطيه الشهادة، بنقرة واحدة على Add لكل إدخال. اذكر Common Name هنا أيضًا دائمًا: المتصفحات وNET. وJava وGo وغيرها من عملاء TLS الحديثة تتحقق من اسم المضيف بشكل صارم مقابل قائمة SAN وتتجاهل Common Name. تستخدم شهادة الويب النموذجية إدخالين من نوع DNS:

  • yourdomain.com
  • www.yourdomain.com

بالنسبة لطلب Wildcard، أضف كلًا من نطاق Wildcard والنطاق الرئيسي: *.yourdomain.com وyourdomain.com.

الخطوة 5: ضبط المفتاح والتوقيع

انتقل إلى علامة التبويب Private Key ووسّع كل قسم على حدة.

  • Cryptographic Service Provider: اترك الخيار الافتراضي RSA, Microsoft Software Key Storage Provider محددًا. هذا هو مزود CNG الحديث لمفاتيح RSA.
  • Key options: اضبط Key size على 2048 (الحد الأدنى الحالي المعتمد من جهات الإصدار العامة). اختر 3072 أو 4096 فقط إذا كانت سياستك تتطلب مفتاحًا أكبر؛ والمقايضة هي مصافحات TLS أبطأ قليلاً. حدد خانة Make private key exportable إذا أردت خيار نسخ المفتاح احتياطيًا أو نقل الشهادة الصادرة إلى خادم آخر.
  • Select Hash Algorithm: في قسم Select hash algorithm، اختر sha256. لم يعد SHA-1 مقبولًا من جهات الإصدار العامة، وSHA-256 هو الخيار الافتراضي الحديث. اترك خانة Use alternate signature format غير محددة.

انقر OK لإغلاق مربع حوار الخصائص، ثم انقر Next في المعالج.

الخطوة 6: حفظ ملف CSR

في شاشة Where do you want to save the offline request؟، اضبط File format على Base 64 (تتوقع جهات الإصدار PEM مُرمّزًا بـ base64، وليس ثنائيًا). انقر Browse، اختر مجلدًا يمكنك العثور عليه مرة أخرى (مجلد مخصص مثل C:certs أو سطح المكتب أسهل من المسار الافتراضي في Windows)، أعطِ الملف اسمًا بامتداد .req أو .txt، وانقر Save. انقر Finish لكتابة CSR.

يكتب المعالج CSR إلى الملف ويخزّن المفتاح الخاص المطابق في Certificates (Local Computer) > Certificate Enrollment Requests. لا تحذف ذلك الطلب المعلّق: فعندما تعيد جهة الإصدار الشهادة الصادرة، يقوم Windows بربطها تلقائيًا بالمفتاح الذي كان بانتظارها.

الخطوة 7: نسخ CSR وإرساله إلى جهة الإصدار

افتح الملف المحفوظ في Notepad. يجب أن ترى كتلة تشبه هذه:

-----BEGIN NEW CERTIFICATE REQUEST-----
MIIDXjCCAkYCAQAwgZQxCzAJBgNVBAYTAlVTMRMwEQYDVQQIDApDYWxpZm9ybmlh
... (many lines of base64) ...
-----END NEW CERTIFICATE REQUEST-----

حدد الكتلة بأكملها، بما في ذلك السطرين اللذين يحتويان على خمس شرطات BEGIN NEW CERTIFICATE REQUEST وEND NEW CERTIFICATE REQUEST، انسخها، والصقها في حقل CSR في نموذج طلب شهادة SSL الخاص بك.

إنشاء CSR باستخدام certreq.exe وملف INF

أداة سطر الأوامر certreq.exe مرفقة مع كل إصدار من Windows Server، وهي موجودة أيضًا في عميل Windows 10 و11. إنها الطريقة المناسبة عندما تريد برمجة إنشاء CSR، أو ضبط معلمات مفاتيح غير اعتيادية، أو بناء الطلب عن بُعد عبر جلسة لا يمكنها تشغيل MMC. تتكون العملية من ثلاثة أجزاء: كتابة ملف INF للطلب، تشغيل certreq -new لإنشاء CSR، ثم إرسال CSR إلى جهة الإصدار الخاصة بك.

الخطوة 1: إنشاء ملف INF للطلب

افتح Notepad كمسؤول واحفظ الملف أدناه باسم request.inf. عدّل سطر Subject وإدخالات DNS تحت [Extensions] لتتطابق مع نطاقك:

[Version]
Signature="$Windows NT$"

[NewRequest]
Subject = "CN=www.yourdomain.com, O=Your Company, L=San Jose, S=California, C=US"
KeySpec = 1
KeyLength = 2048
Exportable = TRUE
MachineKeySet = TRUE
SMIME = FALSE
PrivateKeyArchive = FALSE
UserProtected = FALSE
UseExistingKeySet = FALSE
ProviderName = "Microsoft RSA SChannel Cryptographic Provider"
ProviderType = 12
RequestType = PKCS10
KeyUsage = 0xa0
HashAlgorithm = SHA256

[EnhancedKeyUsageExtension]
OID = 1.3.6.1.5.5.7.3.1

[Extensions]
2.5.29.17 = "{text}"
_continue_ = "dns=www.yourdomain.com&"
_continue_ = "dns=yourdomain.com"

ملاحظات حول القيم:

  • Subject: سطر واحد بمكونات مفصولة بفواصل. استخدم رمز الدولة المكوّن من حرفين وفق ISO في C=، واكتب اسمي الولاية والمدينة كاملَين.
  • KeyLength: الحد الأدنى 2048. اضبط 3072 أو 4096 إذا كانت سياستك تتطلب مفتاحًا أكبر.
  • Exportable = TRUE: يتيح لك تصدير المفتاح الخاص مع الشهادة الصادرة (للنسخ الاحتياطي أو للتثبيت على خادم ثانٍ). اضبطه على FALSE إذا أردت أن يظل المفتاح مقيّدًا بهذه الجهة.
  • MachineKeySet = TRUE: يخزّن المفتاح في مخزن Local Computer، وهو ما تقرأ منه خدمات مثل IIS. اتركه مفعّلًا لأعباء عمل الخوادم.
  • HashAlgorithm = SHA256: يوقّع الطلب باستخدام SHA-256، الخيار الافتراضي الحديث. تعتمد بعض الأمثلة القديمة أحيانًا على SHA-1، الذي لم تعد جهات الإصدار العامة تقبله.
  • 2.5.29.17: المعرّف OID الخاص بـ Subject Alternative Name. أضف سطر _continue_ واحدًا لكل اسم مضيف؛ يجب أن ينتهي كل سطر باستثناء الأخير بفاصل &. اذكر Common Name هنا أيضًا، لأن عملاء TLS يتحققون من قائمة SAN.

الخطوة 2: إنشاء CSR

افتح Command Prompt أو PowerShell بصلاحيات مرتفعة، انتقل إلى المجلد الذي يحتوي على request.inf، وشغّل:

certreq -new request.inf request.csr

تُنشئ الأداة المفتاح الخاص في مخزن Local Computer وتكتب طلب PKCS #10 إلى request.csr. افتح الملف، انسخ الكتلة الكاملة من BEGIN NEW CERTIFICATE REQUEST إلى END NEW CERTIFICATE REQUEST، والصقها في نموذج الطلب الخاص بك.

عندما تُعيد جهة الإصدار الشهادة الصادرة، أكمل عملية الربط بتنفيذ:

certreq -accept certnew.cer

يربط هذا الأمر الشهادة الصادرة بالمفتاح الخاص الذي كان بانتظارها في المخزن، وبعد ذلك تصبح الشهادة متاحة لأي خدمة Windows تحتاج إليها.

إنشاء CSR على Windows باستخدام OpenSSL

لا يأتي Windows مرفقًا مع OpenSSL، لكن يتوفر إصدار مُصان لنظام Windows من Shining Light Productions. عملية OpenSSL مطابقة لتلك المستخدمة في Linux وتُنتج مفتاحًا وCSR كملفين منفصلين، وهو أمر مفيد إذا كنت تخطط لنشر الشهادة على منصة لا تستخدم مخزن شهادات Windows (على سبيل المثال وكيل عكسي من طرف ثالث أو Tomcat أو تطبيق مخصص).

ثبّت حزمة Win64 OpenSSL Light (يكفي المثبت العادي لأعمال CSR)، وعندما يسألك الإعداد، انسخ مكتبات DLL الخاصة بـ OpenSSL إلى دليل bin الخاص بـ OpenSSL بدلاً من مجلد نظام Windows. افتح Command Prompt أو PowerShell وتأكد أن OpenSSL موجود في المسار:

openssl version

إذا لم يُعثر على الأمر، فأضف مجلد التثبيت (عادةً C:Program FilesOpenSSL-Win64bin) إلى PATH الخاص بك أو استدعِ openssl بالمسار الكامل. ثم أنشئ CSR والمفتاح بأمر واحد:

openssl req -new -newkey rsa:2048 -nodes -keyout yourdomain.key -out yourdomain.csr -subj "/C=US/ST=California/L=San Jose/O=Your Company/CN=www.yourdomain.com" -addext "subjectAltName=DNS:yourdomain.com,DNS:www.yourdomain.com"

ماذا تفعل كل علامة (flag):

  • -newkey rsa:2048 تُنشئ مفتاح RSA جديدًا بحجم 2048 بت. استخدم rsa:4096 للحصول على مفتاح أكبر إذا كانت سياستك تتطلب ذلك.
  • -nodes يكتب المفتاح الخاص دون عبارة مرور حتى تتمكن الخدمة المستهلكة من قراءته عند بدء التشغيل دون طلب. أعاد OpenSSL 3.x تسمية هذه العلامة إلى -noenc؛ لا تزال -nodes تعمل لكنها تُعد قديمة.
  • -keyout و-out يحددان اسم ملف المفتاح وملف CSR.
  • -subj يوفّر الموضوع مباشرة حتى لا يتوقف OpenSSL لطرح أسئلة تفاعلية.
  • -addext “subjectAltName=…” يضيف قائمة SAN. أدرج Common Name هنا أيضًا.

يوقّع OpenSSL 3.x الـ CSR باستخدام SHA-256 افتراضيًا، لذا لا حاجة لعلامة تجزئة إضافية. لاحظ اختلاف الترويسة: يكتب OpenSSL -----BEGIN CERTIFICATE REQUEST-----، بينما يكتب معالج MMC وcertreq -----BEGIN NEW CERTIFICATE REQUEST-----. كلاهما طلبان عاديان بصيغة PKCS #10 وتقبل كل جهة إصدار أيًا من الشكلين. تعامل مع ملف yourdomain.key الناتج كسر: فأي شخص يمتلكه يمكنه انتحال الشهادة.

التحقق من CSR قبل إرساله

تأكد من Common Name وإدخالات SAN وحجم المفتاح وخوارزمية التوقيع قبل إرسال الطلب إلى جهة الإصدار الخاصة بك. من سطر أوامر Windows، تقرأ certutil أي ملف CSR:

certutil -dump request.csr

إذا ثبّت OpenSSL، فالأمر المكافئ يطبع نفس التفاصيل:

openssl req -noout -text -in request.csr

تفضّل استخدام المتصفح؟ الصق محتوى الطلب في أداة فك تشفير CSR الخاصة بـ SSL Dragon لقراءة الموضوع وقائمة SAN وحجم المفتاح وخوارزمية التوقيع. تأكد من أن Common Name يطابق اسم المضيف الذي سيستخدمه العملاء، وأن كل اسم مطلوب يظهر ضمن قائمة SAN، وأن خوارزمية التوقيع هي sha256WithRSAEncryption (أو أقوى).

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

الأسئلة الشائعة

ما هي طريقة إنشاء CSR في Windows التي يجب أن أستخدمها؟

إذا كنت تؤمّن خدمة Windows تقرأ من مخزن شهادات Local Computer (IIS، ADFS، RDP، RD Gateway، WinRM)، فاستخدم وحدة إضافة MMC أو certreq.exe: تُنشئ كلتاهما المفتاح في المكان الصحيح بحيث تكون الشهادة الصادرة جاهزة للربط. إذا كنت تُعِدّ CSR لمنصة غير Windows، أو تريد ملف مفتاح منفصل يمكنك نسخه إلى خادم Linux أو جهاز من طرف ثالث، فاستخدم OpenSSL على Windows. ناتج الطرق الثلاث جميعها هو نفس CSR بصيغة PKCS #10 الذي تقبله كل جهة إصدار عامة.

هل يجب أن أُدرج عنوان بريدي الإلكتروني في موضوع CSR؟

لا. يوجّه المعيار RFC 5280 الشهادات الجديدة لوضع عنوان البريد الإلكتروني في امتداد Subject Alternative Name كـ rfc822Name، وليس في الـ Distinguished Name الخاص بالموضوع. قد تحذف جهات الإصدار العامة قيمة البريد الإلكتروني من موضوع شهادة TLS أثناء الإصدار، لذا فإن إضافته لا تخدم أي غرض بالنسبة لـ HTTPS. اترك حقل Email خارج المعالج أو خارج ملف INF.

أين يوجد المفتاح الخاص بعد إنشاء CSR على Windows؟

مع وحدة إضافة MMC أو certreq.exe، يقع المفتاح في Certificates (Local Computer) > Certificate Enrollment Requests كطلب معلّق، ويُقرن تلقائيًا بالشهادة الصادرة عند إتمام التسجيل. أما مع OpenSSL، فالمفتاح هو ملف .key الذي يُكتب بجانب CSR؛ احمِه كأي سر آخر واحتفظ بنسخة احتياطية منه قبل نشر الشهادة.

هل يمكنني إنشاء CSR مباشرة عبر PowerShell دون ملف INF؟

لا يمتلك PowerShell أمر cmdlet أصلي مخصص لإنشاء CSR. يُنشئ New-SelfSignedCertificate زوج مفاتيح، لكنه ينتج شهادة موقّعة ذاتيًا مكتملة، وليس CSR يمكن لجهة إصدار عامة توقيعه. الطريقة المدعومة لبناء طلب من PowerShell هي كتابة ملف INF الموضح أعلاه واستدعاء certreq.exe عليه (certreq -new request.inf request.csr). تُغلّف وحدات من طرف ثالث مثل PSPKI أمر certreq بواجهة أكثر سهولة، لكن الأداة الأساسية تظل certreq.

ماذا يحدث إذا ألغيت المعالج أو لم أرسل الطلب أبدًا؟

يبقى الطلب المعلّق ومفتاحه الخاص في Certificates (Local Computer) > Certificate Enrollment Requests. لا يفعلان شيئًا من تلقاء نفسهما ولا يتسببان في أي عطل، لكنهما يتراكمان بمرور الوقت. افتح وحدة إضافة Certificates في MMC، راجع الطلبات المعلّقة، واحذف أي طلب لم تعد بحاجة إليه؛ يؤدي ذلك أيضًا إلى إزالة المفتاح المطابق.

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

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

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

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