كيف أصلحت مشاكل شهادة SSL على موقعي الإلكتروني - دليل شامل

جدول المحتويات
المشكلة التي بدأ منها كل شيء
تخيّل الموقف: كنت قد ثبّتُّ للتو شهادة SSL على موقعي الإلكتروني shadynagy.com. بدا كل شيء رائعًا من جانبي — الشهادة صالحة، صادرة من Sectigo، ولا يزال أمامها وقت طويل قبل انتهاء صلاحيتها (265 يومًا!). لكن عندما أجريت اختبار SSL سريعًا على WhyNoPadlock.com، ظهرت لي بعض علامات X الحمراء المحبطة:
❌ فرض HTTPS: الموقع لا يفرض استخدام SSL ❌ شهادة وسيطة غير صالحة: الشهادة الوسيطة (الحزمة) مفقودة
شعرتُ بخيبة أمل كبيرة. ما فائدة شهادة SSL إن لم تعمل بشكل صحيح؟ قد يرى زوّار موقعي تحذيرات أمنية، وقد تُخفّض محركات البحث ترتيبي، والأسوأ من ذلك — قد يبدو موقعي غير احترافي.
لكن الخبر السار: أصلحتُ كل شيء، وسأوضح لك بالضبط كيف فعلت ذلك خطوة بخطوة.
فهم ما حدث من خطأ
قبل الخوض في الحلول، دعنا نفهم ما تعنيه هذه الأخطاء فعليًا:
المشكلة الأولى: الشهادة الوسيطة مفقودة
ما هي الشهادة الوسيطة؟
فكّر في شهادات SSL كسلسلة ثقة:
- يثق متصفحك بجهات إصدار جذرية معيّنة (مثل Sectigo)
- تُصدر هذه الجهات شهادات “وسيطة” لجهات فرعية
- تُصدر هذه الجهات الفرعية شهادة موقعك الإلكتروني
يحتاج موقعك إلى إرسال شهادتك والشهادة الوسيطة معًا إلى المتصفحات. بدون الشهادة الوسيطة، لا يستطيع المتصفح التحقق من سلسلة الثقة.
التأثير الفعلي:
- بعض المتصفحات تعرض تحذيرات أمنية
- الأجهزة المحمولة غالبًا ما تفشل في الاتصال
- يبدو موقعك غير آمن للزوّار
المشكلة الثانية: عدم وجود إعادة توجيه من HTTP إلى HTTPS
ماذا يعني هذا؟
عندما يكتب أحدهم http://shadynagy.com (بدون حرف ‘s’)، يجب أن تتم إعادة توجيهه تلقائيًا إلى https://shadynagy.com. بدون هذا التوجيه:
- يمكن للزوّار الوصول إلى موقعك عبر اتصال HTTP غير آمن
- ترى محركات البحث محتوى مكررًا (نسختا HTTP وHTTPS)
- تفقد مزايا تحسين محركات البحث (SEO) الخاصة بـ HTTPS
الحل الأول: إصلاح الشهادة الوسيطة المفقودة
الخطوة 1: فهم السبب الجذري
اكتشفتُ أن إعدادات nginx كانت تستخدم التوجيه الخاطئ. إليك ما كان لديّ:
# ❌ إعدادات خاطئةssl_certificate /etc/nginx/ssl/shadynagy.com.crt;ssl_trusted_certificate /etc/nginx/ssl/shadynagy.com.ca-bundle;
المشكلة: التوجيه ssl_trusted_certificate مخصص لتدبيس OCSP (ميزة أداء)، وليس لإرسال سلسلة الشهادات إلى المتصفحات!
الخطوة 2: إنشاء شهادة السلسلة الكاملة
الحل هو إنشاء شهادة “سلسلة كاملة” (fullchain) تجمع بين شهادتك والشهادة الوسيطة.
الأمر:
cat /etc/nginx/ssl/shadynagy.com.crt /etc/nginx/ssl/shadynagy.com.ca-bundle > /etc/nginx/ssl/shadynagy.com-fullchain.crt
ماذا يفعل هذا:
cat- يدمج (يُلحق) الملفات- الملف الأول: شهادة موقعك الإلكتروني
- الملف الثاني: حزمة الشهادات الوسيطة (CA bundle)
>- يُخرج النتيجة إلى ملف جديد يُسمى “fullchain”
مثال توضيحي: تخيّل أن لديك قطعتي أحجية:
- شهادتك (القطعة أ)
- الشهادة الوسيطة (القطعة ب)
أنت تلصقهما معًا لإنشاء أحجية كاملة يمكن للمتصفحات فهمها.
الخطوة 3: تحديث إعدادات Nginx
افتح ملف إعدادات SSL:
nano /etc/nginx/conf.d/shadynagy.com-ssl.conf
حدّثه إلى التالي:
server {listen 443 ssl http2; # المنفذ 443 مع SSL وHTTP/2# ✅ صحيح - استخدم شهادة السلسلة الكاملةssl_certificate /etc/nginx/ssl/shadynagy.com-fullchain.crt;ssl_certificate_key /etc/nginx/ssl/shadynagy.com.key;# اختياري: احتفظ به لتدبيس OCSP (تحسين الأداء)ssl_trusted_certificate /etc/nginx/ssl/shadynagy.com.ca-bundle;root /var/www/shady-nagy.com/html;index index.html index.htm;server_name shadynagy.com www.shadynagy.com;access_log /var/log/nginx/nginx.vhost.access.log;error_log /var/log/nginx/nginx.vhost.error.log;location / {try_files $uri $uri/ =404;}}
شرح التغييرات الرئيسية:
listen 443 ssl http2;443= منفذ HTTPSssl= تفعيل SSLhttp2= تفعيل HTTP/2 لأداء أفضل- يحل محل التوجيه القديم
ssl on;
ssl_certificateيشير الآن إلى السلسلة الكاملة بدلاً من شهادتك فقطssl_trusted_certificateيُحتفظ به لتدبيس OCSP (اختياري لكنه مُوصى به)
الخطوة 4: الاختبار وتطبيق التغييرات
اختبر الإعدادات:
nginx -t
المخرجات المتوقعة:
nginx: the configuration file /etc/nginx/nginx.conf syntax is oknginx: configuration file /etc/nginx/nginx.conf test is successful
إذا ظهرت أي أخطاء، تحقق مرة أخرى من مسارات الملفات والصياغة!
طبّق التغييرات:
systemctl reload nginx
لماذا إعادة التحميل بدلاً من إعادة التشغيل؟
reloadيُطبّق التغييرات دون قطع الاتصالات الحاليةrestartسيُوقف موقعك لفترة وجيزة
✅ فوائد هذا الإصلاح
- ✅ جميع المتصفحات يمكنها التحقق من شهادة SSL الخاصة بك
- ✅ لا مزيد من تحذيرات “شهادة غير صالحة”
- ✅ الأجهزة المحمولة تتصل بشكل صحيح
- ✅ ثقة أفضل وترتيب أعلى في محركات البحث
- ✅ مظهر احترافي
الحل الثاني: فرض إعادة التوجيه إلى HTTPS
رحلة التحقيق
أولاً، تحققتُ من إعدادات HTTP:
cat /etc/nginx/conf.d/shadynagy.com.conf
وجدتُ هذا:
# ❌ إعدادات معطّلةserver {listen 80;root /var/www/shady-nagy.com/html;server_name shadynagy.com www.shadynagy.com;location / {try_files $uri $uri/ =404;}return 301 https://$server_name$request_uri; # لن يتم الوصول إليه أبدًا!}
المشكلة: يقرأ Nginx الإعدادات من الأعلى إلى الأسفل. عند ورود طلب:
- يُطابق كتلة
location / - يُعالج الطلب
- لا يصل أبدًا إلى سطر إعادة التوجيه
الأمر أشبه بوضع لافتة “تحويلة” بعد الطريق!
الخطوة 1: إنشاء إعدادات إعادة التوجيه الصحيحة
الإصلاح:
# ✅ إعدادات صحيحةserver {listen 80;listen [::]:80; # الاستماع أيضًا على IPv6server_name shadynagy.com www.shadynagy.com;# إعادة توجيه جميع حركة مرور HTTP إلى HTTPSreturn 301 https://$host$request_uri;}
ماذا يفعل كل جزء:
listen 80;- الاستماع لطلبات HTTP (المنفذ 80)listen [::]:80;- الاستماع أيضًا لطلبات HTTP عبر IPv6server_name- النطاقات التي ينطبق عليها هذا الإعدادreturn 301- إرسال إعادة توجيه دائمة (رمز الحالة 301)$host- النطاق الذي كتبه المستخدم (يحافظ على www مقابل بدون www)$request_uri- المسار المطلوب (مثل /about أو /contact)
