مولّد شهادات SSL

الهوية

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

أنشئ شهادة موقّعة ذاتيًا للتطوير المحلي أو الاختبار الداخلي، مباشرةً داخل متصفحك. تختار حجم مفتاح RSA (2048 أو 3072 أو 4096 بت)، واسم Common Name، وأسماء Subject Alternative Names، ونافذة الصلاحية، وبيانات المؤسسة الأساسية. تُنشأ الشهادة ومفتاحها الخاص داخل متصفحك ولا تُرسل أبدًا إلى خادمنا، وتنزّل كليهما كملفات PEM جاهزة لـ Nginx أو Apache.

كيف يعمل توليد الشهادة

  1. 1

    اختر حجم مفتاح RSA

    2048 بت كافٍ لمعظم الاختبارات؛ ويمنح 3072 أو 4096 مفتاحًا أكبر على حساب السرعة.

  2. 2

    أدخل الموضوع وأسماء SAN

    اسم Common Name بالإضافة إلى كل اسم مضيف أو IP ينبغي أن تغطّيه الشهادة (تتجاهل المتصفحات الحديثة CN وتعتمد على SAN).

  3. 3

    أنشئ داخل المتصفح

    تُنشأ شهادة موقّعة ذاتيًا وتُوقَّع بالمفتاح الخاص المطابق، كل ذلك محليًا داخل متصفحك.

  4. 4

    نزّل الناتج

    شهادة مُرمَّزة بصيغة PEM (`cert.pem`) والمفتاح الخاص بصيغة PEM (`key.pem`)، جاهزان للتثبيت.

كل شيء يحدث داخل متصفحك

يعمل هذا المولّد بالكامل داخل متصفحك. يُنشأ زوج مفاتيح RSA محليًا بمكتبة تشفير JavaScript، وتُوقَّع الشهادة على جهازك، ولا يُرفع إلى خادمنا أبدًا لا المفتاح الخاص ولا الشهادة. ومع ذلك، عامِل المفتاح الخاص كسرّ: فمن يملكه يستطيع انتحال الشهادة.

ماذا يعني موقّعة ذاتيًا

أنت المُصدِر والموضوع في آنٍ واحد: تُوقَّع الشهادة بمفتاحها الخاص، فلا تضمنها أي جهة تصديق (CA) عامة. ولذلك تعرض المتصفحات تحذيرًا. وهي صالحة للاختبار والتطوير المحلي (localhost وdev.local) والخوادم الداخلية حيث يمكنك توزيع الشهادة على العملاء الذين يحتاجون إلى الوثوق بها.

إذا كنت تحتاج إلى شهادة يثق بها الإنترنت العام، فهذه الأداة ليست الخطوة المناسبة: تحتاج إلى شهادة موقّعة من CA (مثل Let’s Encrypt أو CA مدفوعة)، وهو ما يتطلّب طلب توقيع شهادة (CSR) والتحقق من النطاق، وهما ما لا تنفّذه هذه الأداة داخل المتصفح.

ماذا يوجد داخل الشهادة

الحقل ملاحظات
الموضوع (CN، O، C) Common Name والمؤسسة والدولة
Subject Alternative Names كل نطاق أو IP مُغطّى (بالغ الأهمية!)
المفتاح العام RSA، مُشتق من المفتاح الخاص المُولَّد
الجهة المُصدِرة نفس الموضوع، لأنها موقّعة ذاتيًا
الصلاحية Not Before / Not After (أيام صلاحيتك)
Key Usage digitalSignature وkeyEncipherment
Extended Key Usage serverAuth وclientAuth
Basic Constraints CA:FALSE (شهادة طرفية، لا CA)

ملفات المخرجات

  • key.pem، المفتاح الخاص (احمِه، الوضع 0600)
  • cert.pem، الشهادة الموقّعة ذاتيًا (عامة، قابلة للتوزيع)

لـ Nginx

server {
    listen 443 ssl;
    server_name example.com;
    ssl_certificate     /etc/ssl/certs/cert.pem;
    ssl_certificate_key /etc/ssl/private/key.pem;
    ssl_protocols       TLSv1.2 TLSv1.3;
    ssl_ciphers         HIGH:!aNULL:!MD5;
}

لـ Apache 2.4+

<VirtualHost *:443>
    ServerName example.com
    SSLEngine on
    SSLCertificateFile    /etc/ssl/certs/cert.pem
    SSLCertificateKeyFile /etc/ssl/private/key.pem
</VirtualHost>

الوثوق بالشهادة على أجهزتك الخاصة

لإسكات تحذير المتصفح على جهاز تتحكم به، استورد cert.pem إلى مخزن الثقة في ذلك النظام أو المتصفح. افعل ذلك فقط للشهادات التي أنشأتها بنفسك، وعلى الأجهزة التي تملكها. تُؤتمِت أدوات مثل mkcert إنشاء CA محلية لعدة خدمات؛ أما هذا المولّد فينتج شهادة موقّعة ذاتيًا واحدة في كل مرة.

ما لا تصلح له الشهادة الموقّعة ذاتيًا

  • المواقع العامة. يرى المستخدمون تحذيرًا، ويغادر كثيرون.
  • تكاملات واجهات برمجة التطبيقات لأطراف خارجية. يرفض معظم العملاء الجهات المُصدِرة المجهولة.
  • الإنتاج. قطعًا لا. استخدم Let’s Encrypt (مجانًا) أو CA مدفوعة لأي شيء على الإنترنت المفتوح.

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

لا. يُولَّد زوج المفاتيح والشهادة داخل متصفحك ويبقيان على جهازك؛ ولا يُرفع أي شيء. ومع ذلك، احتفظ بملف key.pem المُنزَّل خاصًا، لأن من يملكه يستطيع انتحال الشهادة.

لا، إذا كان سيتصل بها أطراف خارجية. تعرض المتصفحات تحذيرًا واضحًا. استخدم شهادة موقّعة من CA مجانية (Let’s Encrypt وZeroSSL) أو مدفوعة. تصلح الموقّعة ذاتيًا للاتصال بين آلة وأخرى داخل شبكة داخلية تتحكم فيها بالطرفين.

كان CN تاريخيًا يحمل النطاق الأساسي. تتجاهل المتصفحات الحديثة CN عند التحقق من المضيف وتعتمد على SAN وحدها. ضع دائمًا كل اسم مضيف في SAN؛ واجعل CN هو النطاق الأساسي فقط لغرض التعريف المقروء.

نعم، ضع *.example.com في أسماء SAN. تغطّي مستوى واحدًا من النطاقات الفرعية. ولعدة مستويات، أضف عدة أحرف بدل (*.example.com و*.dev.example.com).

أدوات ذات صلة