تعد مشكلات شهادة SSL واحدة من أكثر المشكلات الفنية التي يمكن أن يتعرض لها الموقع. تؤدي الشهادة منتهية الصلاحية إلى حظر كل زائر من خلال تحذير المتصفح. تؤدي الشهادة التي تم تكوينها بشكل خاطئ إلى حدوث حالات فشل صامتة. تؤدي الشهادة التي تم إصدارها إلى المجال الخطأ إلى كسر النطاقات الفرعية. وعلى عكس معظم المشكلات، تحدث مشكلات الشهادات وفقًا لجدول زمني — حيث تنتهي صلاحيتها — لذا يمكن منعها تمامًا إذا كنت تعرف المكان الذي تبحث فيه.

إليك كيفية التحقق من أي شهادة SSL، ومعنى كل حقل، وماذا تفعل عندما يكون هناك خطأ ما.

الفحص السريع: متصفحك

بالنسبة لأي موقع تزوره، فإن أسرع فحص SSL موجود في متصفحك مباشرةً.

كروم / إيدج: انقر على أيقونة القفل (أو النص "الاتصال آمن") بجوار عنوان URL ← الشهادة صالحة ← تفاصيل الشهادة

فايرفوكس: انقر على أيقونة القفل ← الاتصال الآمن ← مزيد من المعلومات ← عرض الشهادة

هذا يظهر لك:

  • لمن صدرت الشهادة لـ (المجال)
  • من أصدرها (هيئة التصديق)
  • صالح من / صالح حتى التواريخ
  • الرقم التسلسلي للشهادة والبصمة

للتحقق السريع من السلامة — هل هذه الشهادة صالحة، وهل تنتمي إلى المجال الصحيح — واجهة مستخدم المتصفح هي كل ما تحتاجه.

الفحص الشامل: أداة عبر الإنترنت

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

هذا مفيد بشكل خاص لـ:

  • شهادات على خوادم لا يمكنك الوصول إليها مباشرة
  • التحقق من الشهادة الجديدة بعد التثبيت
  • فحص الشهادات قبل انتهاء صلاحيتها
  • تدقيق قوة مجموعة التشفير (يجب تعطيل TLS 1.0/1.1)

سطر الأوامر: opensl

للمطورين ومسؤولي النظام، openssl يمنحك فحص الشهادة المباشر من المحطة.

التحقق من شهادة الخادم البعيد:

الأمر
openssl s_client -connect example.com:443 -servername example.com </dev/null 2>/dev/null | openssl x509 -noout -text

يؤدي ذلك إلى إرجاع تفاصيل الشهادة الكاملة. المجالات الرئيسية للنظر فيها:

تاريخ انتهاء الصلاحية:

الأمر
openssl s_client -connect example.com:443 -servername example.name </dev/null 2>/dev/null | openssl x509 -noout -dates

الإخراج:

الأمر
notBefore=Jan  1 00:00:00 2025 GMT
notAfter=Jan  1 00:00:00 2026 GMT

التحقق من ملف الشهادة المحلية:

الأمر
openssl x509 -in certificate.crt -noout -text
openssl x509 -in certificate.crt -noout -dates
openssl x509 -in certificate.crt -noout -subject -issuer

التحقق من سلسلة الشهادات:

الأمر
openssl verify -CAfile chain.pem certificate.crt

أيام التحقق حتى انتهاء الصلاحية (قابلة للنص):

الأمر
echo | openssl s_client -connect example.com:443 -servername example.com 2>/dev/null | openssl x509 -noout -enddate | cut -d= -f2 | xargs -I{} date -d {} +%s | xargs -I{} expr \( {} - $(date +%s) \) / 86400

إرجاع عدد الأيام المتبقية. مفيد في مراقبة البرامج النصية.

ماذا يعني كل حقل شهادة

الموضوع/الاسم الشائع (CN): المجال الذي صدرت الشهادة له. يجب أن يتطابق مع النطاق الذي تزوره، وإلا سيعرض المتصفح تحذيرًا. بالنسبة لشهادات أحرف البدل، هذا هو *.example.com.

الأسماء البديلة للموضوع (SANs): قائمة بجميع المجالات التي تغطيها الشهادة. تستخدم الشهادات الحديثة شبكات SAN بدلاً من CN فقط. قد تغطي الشهادة example.com, www.example.comو api.example.com — جميعها مدرجة هنا. وهذا ما يتحقق منه المتصفح بالفعل.

المصدر: المرجع المصدق (CA) الذي قام بالتوقيع على الشهادة. الشائعة: Let's Encrypt، وDigiCert، وSectigo، وGoogle Trust Services، وAmazon. يتم توقيع شهادة المُصدر الخاصة بواسطة مرجع مصدق جذر تثق به المتصفحات.

فترة الصلاحية: ليس قبل وليس بعد التواريخ. تنتهي صلاحية الشهادات — تنتهي صلاحية شهادات Let's Encrypt كل 90 يومًا (مع التجديد التلقائي). عادة ما تستمر الشهادات التجارية لمدة عام واحد.

الخوارزمية الرئيسية والحجم: RSA 2048 بت هو الحد الأدنى؛ 4096 بت أو EC P-256 أقوى. توفر شهادات EC (المنحنى الإهليلجي) أمانًا مكافئًا بأحجام مفاتيح أصغر، مما يؤدي إلى تحسين الأداء بشكل طفيف.

نسخة TLS: يجب أن يدعم خادمك TLS 1.2 وTLS 1.3. تم إهمال TLS 1.0 و1.1 ويجب تعطيلهما — ترفض المتصفحات الحديثة الاتصال بهما.

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

مشاكل SSL الشائعة وكيفية إصلاحها

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

إصلاح: تجديد الشهادة. إذا كنت تستخدم Let's Encrypt with Certbot، فقم بتشغيل certbot renew. في حالة استخدام شهادة مدفوعة، قم بشراء تجديد من خلال المرجع المصدق الخاص بك وقم بتثبيته. قم بإعداد المراقبة لتنبيهك قبل 30 يومًا من انتهاء الصلاحية حتى لا يحدث هذا أبدًا في الإنتاج.

عدم تطابق مجال الشهادة تم إصدار الشهادة ل example.com بس أنت زائر www.example.com (أو العكس)، ولا تشمل الشهادة الأخرى كشبكة SAN.

الإصلاح: إما أن تحصل على شهادة تغطي كليهما (يجب أن تكون معظم الشهادات)، أو قم بإعادة توجيه إحداهما إلى الأخرى باستمرار.

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

الإصلاح: قم بتكوين خادم الويب الخاص بك لإرسال السلسلة الكاملة. مع Nginx، استخدم ssl_certificate الإشارة إلى ملف يتضمن شهادتك والحزمة المتوسطة. مع أباتشي، استخدم SSLCertificateChainFile.

تحقق من هذه المشكلة تحديدًا:

الأمر
openssl s_client -connect example.com:443 -servername example.com </dev/null 2>/dev/null | grep -A 1 "Certificate chain"

يجب أن تشاهد في السلسلة شهادتين على الأقل (شهادتك + متوسط).

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

الإصلاح: احصل على شهادة من مرجع مصدق موثوق به. Let's Encrypt مجاني وآلي للنطاقات العامة.

مجموعة تشفير ضعيفة يتفاوض الخادم على اتصال TLS باستخدام خوارزميات قديمة أو ضعيفة (RC4، DES، تشفيرات من فئة التصدير، TLS 1.0/1.1).

تحقق مع:

الأمر
nmap --script ssl-enum-ciphers -p 443 example.com

الإصلاح: قم بتحديث تكوين SSL لخادم الويب الخاص بك إلى مجموعات التشفير الحديثة فقط. موزيلا مولد تكوين SSL يُنشئ تكوينات جاهزة لللصق لـ Nginx وApache وغيرها.

مراقبة الشهادة

لا يتم قياس التحقق من الشهادات يدويًا قبل انتهاء صلاحيتها. خيارات المراقبة الآلية:

التجديد التلقائي لـ Certbot: إذا كنت تستخدم Let's Encrypt، فسيقوم Certbot بإعداد وظيفة cron أو مؤقت systemd الذي يجدد الشهادات تلقائيًا عندما يتبقى لها أقل من 30 يومًا. التحقق من أنه يعمل: certbot renew --dry-run

خدمات مراقبة وقت التشغيل: تشتمل معظم أجهزة مراقبة وقت التشغيل (UptimeRobot وFreshping وBetter Uptime) على تنبيهات انتهاء صلاحية الشهادة. قم بتعيين حد تحذير لمدة 30 يومًا.

نص مخصص في كرون: نص باش بسيط باستخدام openssl أعلاه التحقق من انتهاء الصلاحية وإرسال تنبيه عبر البريد الإلكتروني. يقوم الأمر

الأمر
#!/bin/bash
DOMAIN="example.com"
DAYS_LEFT=$(echo | openssl s_client -connect $DOMAIN:443 -servername $DOMAIN 2>/dev/null | openssl x509 -noout -enddate | cut -d= -f2 | xargs -I{} python3 -c "from datetime import datetime; print((datetime.strptime('{}', '%b %d %H:%M:%S %Y %Z') - datetime.utcnow()).days)")
if [ "$DAYS_LEFT" -lt 30 ]; then
    echo "Certificate for $DOMAIN expires in $DAYS_LEFT days" | mail -s "SSL Warning" admin@example.com
fi

الخلاصة

مشاكل الشهادة يمكن التنبؤ بها ويمكن الوقاية منها. تظهر العناصر الرئيسية - انتهاء الصلاحية، وعدم تطابق النطاق، والسلسلة غير المكتملة - جميعها بوضوح في فحص SSL.

قم بإجراء فحص على أي مجال باستخدام أداة مدقق SSL. بالنسبة لخوادم الإنتاج، قم بإعداد مراقبة انتهاء الصلاحية مع نافذة تنبيه لمدة 30 يومًا على الأقل. وإذا كنت لا تزال تستخدم TLS 1.0 أو 1.1، فقم بتعطيلهما — أي خادم حديث يجب أن يكون TLS 1.2+ فقط.