لماذا يجب أتمتة تجديد شهادة SSL من Let's Encrypt على خادمك؟
تنتهي صلاحية شهادة SSL من Let's Encrypt كل 90 يومًا. إذا كنت تدير عدة مواقع على خادم VPS أو خادم مخصّص، يصبح التجديد اليدوي فخًّا حقيقيًا: نسيان واحد وسيواجه زوّارك خطأ NET::ERR_CERT_DATE_INVALID. عندها يُعاقبك Google على مستوى SEO، ويفقد عملاؤك الثقة بموقعك.
في Otomy، نُدير البنية التحتية لعشرات المؤسسات الصغيرة والمتوسطة بين فرنسا والجزائر. إليك بالتحديد الطريقة التي ننشرها لأتمتة تجديد شهادة SSL على كل خادم.
المتطلبات الأساسية
قبل البدء، تأكّد من توفّر ما يلي:
- خادم Linux (يُنصح بـ Ubuntu 22.04 أو Debian 12)
- تثبيت Certbot (العميل الرسمي لـ Let's Encrypt)
- خادم ويب: Nginx أو Apache
- صلاحيات root أو sudo
- اسم نطاق يشير إلى خادمك
الخطوة 1 — تثبيت Certbot بالطريقة الصحيحة
انسَ مستودعات PPA القديمة. استخدم snap الرسمي للحصول دائمًا على أحدث إصدار:
sudo apt update
sudo apt install snapd -y
sudo snap install core && sudo snap refresh core
sudo snap install --classic certbot
sudo ln -s /snap/bin/certbot /usr/bin/certbot
تحقّق من التثبيت:
certbot --version
الخطوة 2 — الحصول على شهادة SSL الأولى من Let's Encrypt
مع Nginx
sudo certbot --nginx -d votredomaine.com -d www.votredomaine.com
مع Apache
sudo certbot --apache -d votredomaine.com -d www.votredomaine.com
يقوم Certbot تلقائيًا بتعديل إعدادات خادمك لتفعيل HTTPS وإعادة توجيه حركة المرور من HTTP.
الخطوة 3 — أتمتة التجديد باستخدام cron job
يقوم Certbot افتراضيًا بتثبيت مؤقّت systemd أو cron job. تحقّق من ذلك:
systemctl list-timers | grep certbot
إذا كان المؤقّت موجودًا، فأنت في أمان. وإلّا، أنشئ cron يدويًا:
sudo crontab -e
أضف هذا السطر:
0 3 */10 * * certbot renew --quiet --deploy-hook "systemctl reload nginx"
الشرح:
0 3 */10 * *: التنفيذ كل 10 أيام في الساعة 3 صباحًا--quiet: عدم إظهار أي مخرجات إلّا في حالة وجود خطأ--deploy-hook: إعادة تحميل Nginx فقط إذا تمّ تجديد الشهادة فعليًا
لـ Apache، استبدل الأمر بـ systemctl reload apache2.
الخطوة 4 — اختبار التجديد بالمحاكاة
لا تثق أبدًا بإعداد لم يتمّ اختباره:
sudo certbot renew --dry-run
إذا ظهرت لك رسالة Congratulations, all simulated renewals succeeded، فكل شيء يعمل بشكل سليم.
الخطوة 5 — إضافة تنبيهات في حالة الفشل
الأتمتة بدون مراقبة هي إهمال محض. إليك ثلاث طرق نستخدمها في Otomy:
الخيار أ — تنبيه بالبريد الإلكتروني عبر cron
0 3 */10 * * certbot renew --quiet --deploy-hook "systemctl reload nginx" || echo "فشل تجديد SSL" | mail -s "[تنبيه] SSL" admin@votredomaine.com
الخيار ب — Webhook نحو n8n أو Make
إذا كنت تستخدم n8n (الذي ننشره لعملائنا)، أنشئ سير عمل يستقبل webhook في حالة الفشل:
0 3 */10 * * certbot renew --quiet --deploy-hook "systemctl reload nginx" || curl -X POST https://votre-instance-n8n.com/webhook/ssl-fail -d '{"server":"prod-01"}'
يمكن لـ n8n بعد ذلك إرسال إشعار عبر Slack، أو بريد إلكتروني، أو إنشاء تذكرة في أداة إدارة المشاريع الخاصة بك.
الخيار ج — مراقبة خارجية
استخدم UptimeRobot أو Better Uptime لمراقبة تاريخ انتهاء صلاحية شهادتك. اضبط تنبيهًا قبل 14 يومًا من الانتهاء.
حالة متقدمة: شهادة Wildcard SSL مع DNS challenge
للحصول على شهادة wildcard (*.votredomaine.com)، لا يكفي تحدّي HTTP. يجب استخدام DNS challenge:
sudo certbot certonly --manual --preferred-challenges dns -d "*.votredomaine.com" -d votredomaine.com
لـ أتمتة تحدّي DNS، استخدم إضافة Certbot المناسبة لمسجّل النطاق الخاص بك:
- Cloudflare :
sudo snap install certbot-dns-cloudflare - OVH :
pip install certbot-dns-ovh - DigitalOcean :
sudo snap install certbot-dns-digitalocean
مثال مع Cloudflare:
sudo certbot certonly --dns-cloudflare --dns-cloudflare-credentials /root/.secrets/cloudflare.ini -d "*.votredomaine.com" -d votredomaine.com
ملف /root/.secrets/cloudflare.ini:
dns_cloudflare_api_token = VOTRE_TOKEN_API
قم بتأمين هذا الملف:
chmod 600 /root/.secrets/cloudflare.ini
أفضل ممارسات DevSecOps
- لا تخزّن أبدًا مفاتيحك الخاصة في مستودع Git
- قم بمركزة إدارة شهاداتك إذا كنت تدير عدة خوادم — أداة مثل Ansible يمكنها تنفيذ
certbot renewعلى جميع خوادمك - تحقّق من سلسلة الشهادات باستخدام
openssl:
openssl s_client -connect votredomaine.com:443 -servername votredomaine.com < /dev/null 2>/dev/null | openssl x509 -noout -dates
- فعّل HSTS في إعدادات Nginx لفرض HTTPS:
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" always;
ملخّص: قائمة التحقّق الكاملة
| الخطوة | الأمر / الإجراء |
|---|---|
| تثبيت Certbot | snap install --classic certbot |
| الحصول على الشهادة | certbot --nginx -d domaine.com |
| أتمتة التجديد | cron job أو مؤقّت systemd |
| الاختبار | certbot renew --dry-run |
| التنبيه في حالة الفشل | بريد إلكتروني، webhook عبر n8n، أو UptimeRobot |
| شهادة Wildcard | إضافة DNS لـ Cloudflare/OVH |
الخلاصة
أتمتة تجديد شهادة SSL من Let's Encrypt على خادمك ليست رفاهية — بل هي ضرورة لأي بنية تحتية جادة. في 30 دقيقة فقط، تُزيل خطرًا كبيرًا لتوقّف الخدمة وتُعزّز وضعك الأمني.
هل تحتاج إلى مساعدة في تأمين بنيتك التحتية؟ Otomy تُرافق المؤسسات الصغيرة والمتوسطة في فرنسا والجزائر في إعداد الخوادم وDevSecOps والأتمتة. تواصل معنا.