إذا كنت ترغب في معرفة كيفية إنشاء طلب لشهادة IIS، فقد وصلت إلى المكان الصحيح. في هذا المقال، سأشرح كيف قمت بذلك باستخدام PowerShell وكذلك كيفية ربط الشهادة بموقع على خادم IIS.
لنوضح شيئًا واحدًا. أنا أكره علم التشفير والشهادات. على مدى مسيرتي المهنية، كنت “رجل الشهادات” في بعض الحالات. ومع ذلك، كانت مجرد قبعة أخرى لمسؤول النظام.
I never got to the point where I completely understood the technology and it seemed like every task I tried to accomplish around that area seemed to never work out. It’s definitely an unforgiving technology for sure.
اسمحوا لي أن أحكي لكم قصة حول أتمتة عملية تثبيت شهادة على خادم IIS باستخدام PowerShell.
المهمة
من العميل، طلب شهادة Digicert عامة جديدة، تثبيتها على خادم Windows Server 2012 R2 Core عن بُعد يعمل بنظام IIS 8.5 في مجموعة عمل، ثم تحديد ربط SSL لموقع واستخدام الشهادة المثبتة للربط. بسيط، أليس كذلك؟ هههه!
كيف تم ذلك، يا صديقي!
باختصار، يتطلب ذلك X خطوة لجعل هذا يحدث.
- إنشاء طلب توقيع لشهادة IIS على الكمبيوتر الذي سيتم تثبيت الشهادة فيه. في حالتي، كان لدي الوصول إلى WinRM فقط، لذا كان علي تنفيذ certreq.exe على الخادم عن بُعد باستخدام
Invoke-Command
وإرسال محتوى CSR إلى ملف محلي. - الحصول على CSR الموقع من قبل CA عامة. (لا مساعدة هنا – عادت شهادة جميلة للتو من الأمان الذي عملت معه). في حالتي، قدم لي فريق الأمان مجموعة من شهادات P7B المدمجة في ملف .CER والتي تتضمن الشهادة التي كنت أبحث عنها بالإضافة إلى الشهادات الوسيطة. استغرق هذا بعض التلاعب للعمل.
- اكتمل طلب توقيع الشهادة على الحاسوب الذي سيتم تثبيت الشهادة فيه. سيتم بهذا الحصول على الشهادة في مخزن الشهادات.
- إنشاء ارتباط ويب SSL IIS على الخادم.
- ربط الشهادة بارتباط الويب.
إنشاء طلب شهادة IIS
سيكون مهمتك الأولى هي تشغيل certreq.exe بهذا البرنامج النصي PowerShell على الخادم البعيد لجمع ملف الطلب. للقيام بذلك، يتطلب certreq.exe ملف INF كإدخال. يُستخدم هذا الملف لجميع الخيارات المختلفة التي ستكون للشهادة الخاصة بك في النهاية. بدون الدخول في تفاصيل كثيرة، هذا نسخة من ملف INF الذي كنت أستخدمه.
سترى في الوظيفة New-CertificateSigningRequest
أنني جعلت من السهل بشكل كبير عليك تخصيص هذا. في الواقع، إذا استخدمت وظائفي لن ترى هذا الملف أبدًا لأنه يُطلب مؤقتًا فقط لإنشاء CSR (ملف الطلب).
بعد ذلك، ستحتاج إلى الحصول على هذا الملف INF على الخادم البعيد وتشغيل certreq.exe بالمعلمات التالية مثل certreq.exe -new "$InfFilePath" "$reqFilePath"
.
سيتم إنشاء CSR (ملف طلب) على الكمبيوتر عن بُعد. بعد ذلك، ستحتاج إلى إرسال هذا الملف إلى فريق الأمان الخاص بك. ستقوم هذه العملية أيضًا بإنشاء شهادة تحتوي على كل من المفتاح الخاص والمفتاح العام في طلبات الشهادة المصدرة في سياق الجهاز المحلي.

اكتمال طلب شهادة IIS
في حالتي، حصلت على ملف CER واحد. قمت بإنشاء وظيفة في نص PowerShell IIS هذا لاستيراده مباشرة إلى مخزن الشخصية في سياق الجهاز المحلي لأجد أن IIS لا يمكنه رؤيته. السبب في ذلك كان أن الشهادة يجب أن تحتوي أيضًا على المفتاح الخاص. لن يعمل استيراد الشهادة ببساطة إلى مخزن الشخصية. كان علي استكمال طلب الشهادة باستخدام certreq.exe.
للقيام بذلك، ستحتاج إلى نسخ الشهادة التي تتلقاها من فريق الأمان الخاص بك على الخادم عن بُعد ثم تنفيذ certreq.exe بهذا الشكل certreq.exe -accept -machine "C:\issuedcert.cer"
.
سيتعين عليك دائمًا التأكد من أن شهادة الاستجابة تذهب دائمًا إلى سياق الجهاز المحلي باستخدام المعامل -machine
. هذا يجب أن يكتمل بنجاح وفقًا لكل ما قرأته ولكن بالتأكيد لم يحدث ذلك بالنسبة لي. لسبب ما، كنت أتلقى خطأ يبدو كما يلي:

اتضح أن هذا يعني أن المفتاح العام في ملف الطلب لا يتطابق مع ما عاد من فريق الأمان. لاختبار هذا، قم ببساطة بتشغيل certutil.exe -dump requestfile.req
و certutil -dumpissuedcert.cer
. انتقل لأسفل من النتيجة حتى ترى منطقة المفتاح العام.

نسخ كلمة السر الخاصة هذه وقارنها في محرر النصوص للتأكد من أنها متطابقة. إذا لم تكن كذلك، اتصل بفريق الأمان لديك لعدم توقيع طلبك بشكل صحيح!
إذا كانت تتطابق، فأنت في وضع جيد ولا يجب أن تتلقى هذا الخطأ.
قم بإنشاء ربط SSL
على الخادم عن بُعد، قم بتشغيل الأمر التالي:
قم بربط الشهادة بربط SSL
على الخادم عن بُعد، قم بتشغيل الأمر التالي:
احصل على سكريبت PowerShell IIS
إذا كان كل شيء على ما يرام، يجب أن تكون قد انتهيت! الآن، إذا كنت بحاجة إلى قليل من المساعدة في القيام بذلك، قمت بإنشاء ثلاث وظائف لتسهيل العملية بشكل كبير. انتقل إلى مستودع Github الخاص بي للحصول على الوظائف:
https://github.com/adbertram/Random-PowerShell-Work/tree/master/Certificates
https://github.com/adbertram/Random-PowerShell-Work/tree/master/IIS
كود مثال
قراءة ذات صلة
تأكد من الاطلاع على مقالات مدونة ATA الأخرى حول إدارة IIS باستخدام PowerShell
Source:
https://adamtheautomator.com/iis-certificate-request/