الرئيسيةمن أناالدوراتالمدونةسوق الأوامرالمناهج والباقاتالشركاء

دورات عربية متخصصة في التقنية والبرمجة والذكاء الاصطناعي.

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

المنصة

  • الرئيسية
  • من أنا
  • الدورات
  • المناهج والباقات
  • سوق الأوامر
  • المدونة

الدعم

  • الأسئلة الشائعة
  • تواصل معنا
  • سياسة الخصوصية
  • شروط استخدام التطبيق
  • سياسة الاسترجاع

© 2026 أحمد حايس. جميع الحقوق محفوظة.

الرئيسيةالدوراتالمناهجالمدونةالدخول
الأوتوميشن

أتمتة مراقبة شهادات SSL: تنبيه قبل 14 يومًا من توقف موقعك

متوسط25 يوليو 20264 دقائق قراءة
أتمتة مراقبة شهادات SSL: تنبيه قبل 14 يومًا من توقف موقعك

أتمتة مراقبة شهادات SSL قبل ما توقف موقعك

المستوى: متوسط

لو موقعك وقع مرة واحدة بسبب شهادة SSL منتهية، فانت عارف إن الدقيقة الواحدة من الخطأ ده بتاكل من ثقة العملاء. هنا سكربت واحد يفحص كل شهاداتك يوميًا وينبّهك قبل انتهائها بـ 14 يومًا، فمتوصلش للحظة التوقف أصلًا.

المشكلة باختصار

شهادات Let's Encrypt صالحة 90 يومًا فقط. التجديد المفروض يبقى آلي عبر certbot، لكن اللي بيحصل فعلاً إنه بيفشل في صمت: مهمة cron اتشالت، أو صلاحيات ملف اتغيّرت، أو منفذ التحقق كان مقفول لحظة التجديد. النتيجة إنك مبتعرفش بالمشكلة غير لما الموقع نفسه يقع.

الافتراض هنا إنك بتستخدم Let's Encrypt أو أي CA بتجديد آلي، وسيرفرك Linux فيه openssl وcurl.

ليه الموقع بيقف بمجرد انتهاء الشهادة

فكّر في شهادة SSL زي جواز سفرك. طالما ساري، بتعدّي من أي بوابة بسهولة. أول ما ينتهي، بيوقفوك عند البوابة حتى لو انت نفس الشخص بالظبط. الموقع كده بالظبط: أول ما الشهادة تنتهي، المتصفح بيوقف الزائر عند الباب برسالة حمراء.

علميًا، شهادة TLS بتحمل حقلين مهمين: notBefore وnotAfter. وقت الـ handshake، المتصفح بيقارن التاريخ الحالي بحقل notAfter. لو التاريخ عدّاه، بيرفض الاتصال ويطلع الخطأ NET::ERR_CERT_DATE_INVALID. مفيش صفحة تظهر، ومفيش تجاوز سهل للزائر العادي.

الحل: سكربت يقرأ تاريخ الانتهاء وينبّهك

الفكرة بسيطة: اتصل بالدومين، اقرأ حقل notAfter، احسب الأيام المتبقية، ولو أقل من 14 ابعت تنبيه. الرسم ده بيلخّص التدفق بالتفاصيل:

ودي الخطوات المرتّبة:

  1. حدد دوميناتك وحد التنبيه (14 يوم).
  2. اقرأ تاريخ الانتهاء من الاتصال المباشر بـ openssl.
  3. احسب الفرق بالأيام، وابعت على Slack لو قلّ عن الحد.
Bash
#!/usr/bin/env bash
set -euo pipefail

DOMAINS=("ahmedhaies.com" "lms.ahmedhaies.com")
THRESHOLD_DAYS=14
SLACK_WEBHOOK="https://hooks.slack.com/services/XXX/YYY/ZZZ"

now_epoch=$(date +%s)

for domain in "${DOMAINS[@]}"; do
  # اقرأ تاريخ انتهاء الشهادة من الاتصال المباشر
  end_date=$(echo | openssl s_client -servername "$domain" -connect "$domain:443" 2>/dev/null \
    | openssl x509 -noout -enddate | cut -d= -f2)

  end_epoch=$(date -d "$end_date" +%s)
  days_left=$(( (end_epoch - now_epoch) / 86400 ))
  echo "$domain: باقي $days_left يوم"

  if (( days_left < THRESHOLD_DAYS )); then
    curl -sS -X POST "$SLACK_WEBHOOK" \
      -H 'Content-Type: application/json' \
      -d "{\"text\":\"تنبيه: شهادة $domain تنتهي خلال $days_left يوم\"}"
  fi
done

وبعدين حطّه في cron علشان يشتغل لوحده كل يوم الساعة 7 صباحًا:

Bash
# افحص الشهادات يوميًا 7 صباحًا وسجّل المخرجات
0 7 * * * /opt/scripts/check_ssl.sh >> /var/log/ssl-check.log 2>&1

سيناريو واقعي بالأرقام

لو عندك متجر بـ 20 ألف زائر/يوم، شهادة منتهية معناها توقف كامل مش مجرد بطء. المتصفح بيمنع الدخول تمامًا. بفرض إن 4% بس من زوار اليوم بيحاولوا يشتروا بمتوسط سلة 30 دولار، فكل ساعة توقف في وقت الذروة ممكن تكلّفك أكثر من 900 دولار مبيعات ضائعة، غير الضرر في السمعة. في المقابل، السكربت ده أقل من 15 سطر ودقيقة إعداد واحدة.

الـ trade-offs وما يجب الانتباه له

بتكسب إنذارًا مبكرًا بلا أي بنية تحتية إضافية. بتخسر إنك بتفحص من بره على المنفذ 443 فقط؛ لو الشهادة على منفذ داخلي أو خدمة مش HTTPS، محتاج تعدّل الأمر. كمان الفحص اليومي عبر cron مش مراقبة لحظية: لو الشهادة اتلغت فجأة النهارده الصبح، هتعرف بكرة. لأغلب الحالات ده كافٍ، لأن الانتهاء بيبقى متوقع بالتاريخ من الأساس.

متى لا تستخدم هذه الطريقة

لو بتدير أكثر من 200 دومين، سيبك من bash واستخدم Blackbox Exporter مع Prometheus وقاعدة تنبيه واحدة تغطي الكل مع لوحة مراقبة. ولو دوميناتك كلها على Cloudflare بشهادات مُدارة وتجديد موثوق، خلي السكربت مجرد شبكة أمان اختيارية مش أولوية.

الخطوة التالية

افتح سيرفر واحد دلوقتي، احفظ السكربت في /opt/scripts/check_ssl.sh، وشغّله يدويًا مرة واحدة. بُص رقم الأيام المتبقية لكل دومين. لو لقيت واحد أقل من 14، انت لسه اكتشفت مشكلة كنت هتعرفها متأخر.

المصادر

  • مدة صلاحية شهادات Let's Encrypt (90 يومًا): letsencrypt.org/docs/faq
  • أمر openssl s_client لقراءة الشهادة: openssl.org — s_client
  • تنبيهات Slack عبر Incoming Webhooks: api.slack.com — webhooks
  • جدولة المهام بـ cron: man7.org — crontab(5)

هل استفدت من المقال؟

اطّلع على المزيد من المقالات والدروس المجانية من نفس المسار المعرفي.

تصفّح المدونة