البرمجة مبتدئ 8 دقيقة

كيفية الحصول على شهادة SSL مجانية باستخدام Let's Encrypt

تُصدر Let's Encrypt شهادات TLS مجانية موثوقة من المتصفحات وتتجدد تلقائياً كل 90 يوماً. Certbot — العميل الرسمي — يُعدّل إعداد Nginx الخاص بك بأمر واحد. لا عذر لمواقع تعمل على HTTP فقط في عام 2024.

الخطوات

  1. 1

    تحقق من انتشار DNS أولاً

    سيفشل Certbot إن لم يُحلَّل نطاقك إلى هذا الخادم. تحقق قبل تشغيل أي شيء — يوفر عليك وقت التشخيص.

    bash
    # يجب أن يُرجع عنوان IP العام لخادمك
    dig +short example.com
    dig +short www.example.com
    
    # أو استخدم أداة ويب
    curl https://dns.google/resolve?name=example.com&type=A | python3 -m json.tool
  2. 2

    تثبيت Certbot وإضافة Nginx

    إضافة python3-certbot-nginx هي ما يتيح لـ Certbot قراءة وتعديل إعداد Nginx تلقائياً. ثبّتهما معاً.

    bash
    sudo apt update
    sudo apt install -y certbot python3-certbot-nginx
  3. 3

    تشغيل Certbot لنطاقك

    هذا الأمر الواحد يفعل كل شيء: يحصل على الشهادة، يعدّل إعداد Nginx لاستخدامها، يُحوّل HTTP إلى HTTPS، ويختبر إعادة التحميل. أجب على الأسئلة التفاعلية (البريد الإلكتروني لتنبيهات التجديد، الموافقة على الشروط).

    bash
    sudo certbot --nginx -d example.com -d www.example.com
  4. 4

    افهم ما غيّره Certbot

    يُعيد Certbot كتابة server block الخاص بك. افحص ما أضافه — معرفة تخطيط الملف تساعد حين تحتاج لتعديله لاحقاً.

    bash
    cat /etc/nginx/sites-available/myapp.conf
    
    # ستجد أن Certbot أضاف:
    # - listen 443 ssl;
    # - مسارات ssl_certificate / ssl_certificate_key تحت /etc/letsencrypt/live/
    # - server block جديد على المنفذ 80 يُعيد التوجيه إلى https
    # - include /etc/letsencrypt/options-ssl-nginx.conf (إعدادات TLS حديثة)
    # - مسار ssl_dhparam
  5. 5

    اختبر مؤقت التجديد التلقائي

    يُثبّت Certbot مؤقت systemd (أو مهمة cron على الأنظمة القديمة) يعمل مرتين يومياً ويجدد أي شهادة تنتهي خلال 30 يوماً. اختبر التجريب الجاف للتأكد من أنه سيعمل.

    bash
    # محاكاة التجديد دون تجديد فعلي
    sudo certbot renew --dry-run
    
    # تحقق من حالة المؤقت
    sudo systemctl status certbot.timer
    
    # أدرج المؤقتات النشطة
    sudo systemctl list-timers | grep certbot
  6. 6

    تحقق من الشهادة في المتصفح وسطر الأوامر

    افتح موقعك عبر HTTPS. يجب أن يظهر القفل. استخدم OpenSSL من سطر الأوامر للتحقق من تفاصيل الشهادة وتاريخ انتهائها.

    bash
    # يجب أن يُظهر سلسلة الشهادة كاملة و"Verify return code: 0 (ok)"
    echo | openssl s_client -connect example.com:443 -servername example.com 2>/dev/null \
      | openssl x509 -noout -subject -issuer -dates
    
    # فحص سريع: تاريخ الانتهاء فقط
    echo | openssl s_client -connect example.com:443 2>/dev/null \
      | openssl x509 -noout -enddate
  7. 7

    استكشف الأخطاء الشائعة وأصلحها

    إن فشل Certbot، رسالة الخطأ عادةً واضحة. السببان الأكثر شيوعاً:

    • المنفذ 80 محجوب — تحقق من الجدار الناري: sudo ufw allow 80 وتحقق من قواعد مجموعة الأمان لدى مزود الخدمة السحابية
    • DNS لم ينتشر بعد — استخدم dig +short example.com @8.8.8.8 للاستعلام من DNS Google مباشرة؛ إن أرجع IP خاطئاً، انتظر وأعد المحاولة
    • Nginx لا يُعاد تحميله بنظافة — شغّل sudo nginx -t أولاً؛ Certbot لا يستطيع إعادة تحميل إعداد معطوب
    bash
    # افتح المنفذ 80 إن كان محجوباً
    sudo ufw allow 80
    sudo ufw allow 443
    sudo ufw reload
    
    # تحقق من سجلات Certbot للخطأ الدقيق
    sudo cat /var/log/letsencrypt/letsencrypt.log | tail -50
  8. 8

    فرض HTTPS والتحقق من إعادة التوجيه

    عادةً يضيف Certbot إعادة التوجيه من HTTP إلى HTTPS تلقائياً. أكّد ذلك باستخدام curl — تريد إعادة توجيه 301 من المنفذ 80 إلى 443، لا استجابة 200 على كليهما.

    bash
    # يجب أن يُرجع 301 Moved Permanently مع Location: https://
    curl -I http://example.com
    
    # يجب أن يُرجع 200 OK
    curl -I https://example.com
    
    # تابع إعادة التوجيه تلقائياً
    curl -IL http://example.com

نصائح ومحاذير

  • أضف علامة <code>--staging</code> أثناء الاختبار لتجنب حدود معدل Let's Encrypt (5 طلبات شهادة فاشلة لكل نطاق في الساعة).
  • شهادات Let's Encrypt صالحة 90 يوماً. مؤقت التجديد التلقائي يعمل مرتين يومياً ويجدد عند ~60 يوماً — لن تحتاج للتجديد اليدوي.
  • الشهادات العامة (<code>*.example.com</code>) تتطلب تحدي DNS-01 (سجل TXT)، لا HTTP-01. استخدم: <code>sudo certbot certonly --manual --preferred-challenges dns -d '*.example.com'</code>
  • إن كان خادمك خلف موازن حمل أو CDN، لن يعمل تحدي HTTP-01 (الطلب لن يصل لخادمك). استخدم DNS-01 أو إضافة webroot لـ certbot.
  • شغّل <code>sudo certbot certificates</code> لعرض قائمة بجميع الشهادات على الجهاز وتواريخ انتهائها.

خاتمة

موقعك الآن على HTTPS بشهادة تجدد نفسها. بين هذا الدليل ودليل وسيط Nginx العكسي السابق، لديك إعداد جاهز للإنتاج: Nginx ينهي TLS ويُحيل إلى تطبيقك مع تجديد الشهادات تلقائياً كل 90 يوماً. الخطوة التالية هي تشديد ترويسات الأمان — HSTS وCSP وX-Frame-Options.

#SSL #HTTPS #Linux
العودة إلى جميع الأدلة

هل تحتاج مساعدة في مشروعك؟

احجز استشارة مجانية لمدة 30 دقيقة لمناقشة تحدياتك التقنية واستكشاف الحلول معًا.