Creating a local PFX and PEM copy of App Service Certificatea

كيف تصدّر شهادة SSL من Azure Key Vault وتثبّتها على IIS

دليل عملي خطوة بخطوة باستخدام Azure CLI و OpenSSL


المقدمة

لو اشتريت أو ولّدت شهادة SSL داخل Azure Key Vault، هتلاقي إن الشهادة مش موجودة كملف تقدر تحمله مباشرةً — وده تصميم مقصود عشان تأمين الـ private key. في المقالة دي هنتكلم عن السيناريو اللي مررت بيه بنفسي: ازاي استخرجت الشهادة من Key Vault، حولتها للـ format الصح، وثبّتها على IIS على Windows Server.

💡 المتطلبات: Azure CLI مثبّت ومسجّل دخول — صلاحية get على الـ Secrets في Key Vault — Azure Cloud Shell أو Linux/WSL لتشغيل OpenSSL.

الجزء الأول: فهم بنية الشهادة في Azure Key Vault

Azure Key Vault بيخزّن الشهادات بطريقة مختلفة حسب نوع الـ object:

النوعما بيحتويهالاستخدام
Certificateالـ public cert فقطالتحقق من الهوية
Secret ✅PFX كامل (cert + private key) بـ base64التصدير والتثبيت
Keyالـ private key (محمي داخل HSM)عمليات التوقيع فقط

عشان كده لازم نستخرج الـ Secret مش الـ Certificate — لأن الـ Secret هو اللي بيحتوي على الـ private key الضروري لتثبيت الـ SSL.


الجزء الثاني: تصدير الشهادة من Key Vault

1 تسجيل الدخول على Azure CLI

افتح Azure Cloud Shell (bash) من portal.azure.com أو استخدم الـ terminal بتاعك:

az login az account set --subscription "<SubscriptionName>"

2 استخراج الشهادة كـ PFX

الأمر ده بيسحب الـ Secret من Key Vault ويحوّله مباشرةً لملف .pfx — بدون ما يحفظ الـ base64 في ملف وسيط:

az keyvault secret show \ --vault-name <KeyVaultName> \ --name <CertificateName> \ --query value -o tsv | base64 -d > cert.pfx
⚠️ تجنّب حفظ الـ base64 في ملف وسيط (cert.b64) — ده بيسيب الـ private key في ملف نص عادي على الـ disk. الأحسن دايماً تعمل pipe مباشر زي ما هو موضح.

3 التحقق من الملف

ls -lh cert.pfx file cert.pfx
📌 المتوقع تشوف: cert.pfx: data — ده معناه إن الملف binary صح وليس text.

الجزء الثالث: تحويل PFX لـ PEM (لـ Linux / Nginx / Apache / Home Assistant)

لو محتاج الشهادة على Linux، هتحتاج تحوّلها لـ PEM format — في خطوتين:

1 استخراج الـ Certificate

openssl pkcs12 -in cert.pfx -clcerts -nokeys -out home.pem

2 استخراج الـ Private Key

openssl pkcs12 -in cert.pfx -nocerts -nodes -out key.pem
⚠️ OpenSSL v3+ ؟ لو ظهرلك خطأ no start line أو unsupported، ضيف -legacy:
openssl pkcs12 -legacy -in cert.pfx -clcerts -nokeys -out home.pem

3 تحميل الملفات ومسح المؤقت

# تحميل الملفات من Cloud Shell download home.pem download key.pem # مسح الملفات الحساسة rm -f cert.pfx key.pem home.pem
✅ دلوقتي عندك home.pem (الشهادة) و key.pem (الـ private key) جاهزين للاستخدام على أي Linux server.

الجزء الرابع: تثبيت الشهادة على IIS (Windows Server)

1 استيراد الـ PFX بـ PowerShell

بعد تحميل ملف cert.pfx للسيرفر، افتح PowerShell كـ Administrator:

$pfxPassword = Read-Host -AsSecureString "Enter PFX Password" Import-PfxCertificate ` -FilePath "C:\Certs\cert.pfx" ` -CertStoreLocation "Cert:\LocalMachine\My" ` -Password $pfxPassword

تحقق إن الشهادة اتاضافت:

Get-ChildItem -Path Cert:\LocalMachine\My | Where-Object {$_.Subject -like "*yourdomain*"}

2 ربط الشهادة بـ IIS Manager

  1. افتح IIS ManagerSites ← اختار موقعك
  2. اضغط على BindingsAdd
  3. Type: https | Port: 443 | IP: All Unassigned
  4. SSL Certificate: اختار الشهادة اللي استوردتها
  5. اضغط OK ثم Restart الـ IIS
✅ دلوقتي موقعك بيشتغل على HTTPS بشهادة من Azure Key Vault!

مشاكل شائعة وحلولها

المشكلةالحل
Forbidden / Access Deniedتأكد إن حسابك عنده صلاحية get على الـ Secrets في Key Vault Access Policies
base64: invalid inputتأكد إن نوع الـ Secret هو Certificate وليس Key أو manual secret
openssl: no start lineاستخدم -legacy مع OpenSSL v3: openssl pkcs12 -legacy ...
IIS: Certificate not foundتأكد إن الاستيراد اتعمل على LocalMachine\My مش CurrentUser\My
PFX password غلطالـ PFX من Key Vault أحياناً بدون password — اضغط Enter لو سألك

نصائح الأمان 🔐

  • لا تسيب ملف cert.pfx أو key.pem على الـ Cloud Shell — امسحهم فور ما تخلص
  • استخدم RBAC أو Key Vault Access Policies بمبدأ الـ least privilege
  • فعّل Soft Delete و Purge Protection على الـ Key Vault
  • دوّر الشهادة قبل انتهاء صلاحيتها — Azure Defender بيبعتلك alert قبل 30 يوم
  • على Windows: قيّد صلاحيات ملف الـ PFX قبل ما تستورده

الخلاصة

عملية تصدير الشهادة من Azure Key Vault ممكن تبدو معقدة في الأول، بس لما تفهم إن الـ PFX الكامل موجود في الـ Secret مش الـ Certificate، بتبقى عملية بسيطة وسريعة.

  1. az keyvault secret show بـ pipe مباشر لـ base64 -d لإنشاء cert.pfx
  2. openssl pkcs12 لتحويله لـ PEM لو محتاج Linux
  3. Import-PfxCertificate + IIS Bindings لتثبيته على Windows

لو عندك أي سؤال أو مريت بسيناريو مختلف، شاركني في التعليقات! 👇


Post a Comment

Previous Post Next Post