الخطوات
-
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
تثبيت Certbot وإضافة Nginx
إضافة
python3-certbot-nginxهي ما يتيح لـ Certbot قراءة وتعديل إعداد Nginx تلقائياً. ثبّتهما معاً.bashsudo apt update sudo apt install -y certbot python3-certbot-nginx -
3
تشغيل Certbot لنطاقك
هذا الأمر الواحد يفعل كل شيء: يحصل على الشهادة، يعدّل إعداد Nginx لاستخدامها، يُحوّل HTTP إلى HTTPS، ويختبر إعادة التحميل. أجب على الأسئلة التفاعلية (البريد الإلكتروني لتنبيهات التجديد، الموافقة على الشروط).
bashsudo certbot --nginx -d example.com -d www.example.com -
4
افهم ما غيّره Certbot
يُعيد Certbot كتابة server block الخاص بك. افحص ما أضافه — معرفة تخطيط الملف تساعد حين تحتاج لتعديله لاحقاً.
bashcat /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
اختبر مؤقت التجديد التلقائي
يُثبّت Certbot مؤقت systemd (أو مهمة cron على الأنظمة القديمة) يعمل مرتين يومياً ويجدد أي شهادة تنتهي خلال 30 يوماً. اختبر التجريب الجاف للتأكد من أنه سيعمل.
bash# محاكاة التجديد دون تجديد فعلي sudo certbot renew --dry-run # تحقق من حالة المؤقت sudo systemctl status certbot.timer # أدرج المؤقتات النشطة sudo systemctl list-timers | grep certbot -
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
استكشف الأخطاء الشائعة وأصلحها
إن فشل 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 - المنفذ 80 محجوب — تحقق من الجدار الناري:
-
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.