bg-tutorials

كيفية تثبيت شهادة SSL على NGINX

يوضح لك هذا الدليل كيفية تثبيت شهادة SSL/TLS على NGINX. وهو يغطي الجزء الذي يعثر معظم الأشخاص عنده: بناء سلسلة الشهادات الصحيحة (“fullchain”) التي يتطلبها NGINX، وتوجيه التوجيهات الصحيحة إلى الملفات الصحيحة، واختبار التكوين قبل إعادة التحميل، وإضافة إعادة توجيه واضحة من HTTP إلى HTTPS بحيث يصل كل زائر إلى النسخة الآمنة من موقعك.

إنشاء رمز CSR لـ NGINX

إذا كنت قد أنشأت طلب CSR بالفعل وحصلت على ملفات الشهادة الصادرة، تخطَّ إلى تثبيت شهادة SSL على NGINX.

قبل أن تتمكن هيئة إصدار الشهادات من إصدار شهادتك، يجب عليك تقديم طلب CSR (Certificate Signing Request): وهو كتلة نصية صغيرة تحتوي على تفاصيل نطاقك ومفتاح عام، مقترنة بمفتاح خاص يبقى على الخادم. لديك خياران:

  • إنشاء طلب CSR تلقائياً باستخدام أداة إنشاء CSR الخاصة بنا. تُعيد الأداة كلاً من CSR والمفتاح الخاص المطابق له، والذي تقوم بعد ذلك بتحميله إلى الخادم.
  • إنشاء طلب CSR على الخادم نفسه باستخدام OpenSSL باتباع دليلنا حول كيفية إنشاء طلب CSR على NGINX. يبقى المفتاح الخاص على الخادم.

افتح ملف .csr الناتج في أي محرر نصوص؛ وكتلة النص الموجودة بداخله (بما في ذلك السطران —–BEGIN CERTIFICATE REQUEST—– و —–END CERTIFICATE REQUEST—–) هي ما تلصقه في نموذج طلب SSL عند الدفع. إذا كنت تريد التحقق من محتويات CSR قبل تقديمه، الصقه في أداة فك تشفير CSR الخاصة بنا.

تثبيت شهادة SSL على NGINX

بعد أن تصدر هيئة إصدار الشهادات (CA) الشهادة، ستحصل عادة على:

  • شهادتك الأساسية (الخادم)، وهي عادة ملف .crt يحمل اسم نطاقك.
  • الشهادات الوسيطة (وأحياناً شهادة الجذر)، إما كملفات .crt منفصلة أو مجمّعة في ملف .ca-bundle واحد.
  • المفتاح الخاص (ملف .key) الذي تم إنشاؤه مع طلب CSR الخاص بك.

يحتاج NGINX إلى دمج شهادة الخادم والسلسلة الوسيطة في ملف واحد (“fullchain”) مع الإشارة إليه من خلال ssl_certificate؛ ويتم الإشارة إلى المفتاح الخاص بشكل منفصل عبر ssl_certificate_key. تجاهل السلسلة هو أكثر خطأ شائع عند التثبيت: تبدو الشهادة سليمة في متصفح سطح المكتب لكنها تفشل على أندرويد، وفي عملاء API، وفي أدوات مثل SSL Checker الخاصة بنا.

الخطوة 1: دمج الشهادات في ملف واحد

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

  • شهادتك الأساسية لاسم النطاق.
  • الشهادة (الشهادات) الوسيطة.
  • شهادة الجذر (اختيارية).

يمكنك بناء ملف fullchain يدوياً في محرر نصوص (بلصق كل كتلة PEM بالترتيب)، أو باستخدام أمر cat واحد. إذا حصلت على ملفات وسيطة وجذر منفصلة، شغّل:

cat your_domain.crt intermediate.crt root.crt > ssl-bundle.crt

إذا كانت الشهادات الوسيطة والجذر موجودة بالفعل في ملف .ca-bundle واحد، شغّل:

cat example_com.crt example_com.ca-bundle > ssl-bundle.crt

استبدل أسماء الملفات بأسمائك الخاصة. انقل الملف المدمج (والمفتاح الخاص، إن لم يكن موجوداً بالفعل) إلى مجلد SSL على خادمك، مثل /etc/ssl/ أو /etc/nginx/ssl/. حافظ على أن يكون ملف المفتاح قابلاً للقراءة من قبل root فقط:

sudo chmod 600 /etc/ssl/your_domain.key
sudo chown root:root /etc/ssl/your_domain.key

الخطوة 2: تحرير ملف تكوين NGINX

افتح ملف تكوين NGINX الخاص بموقعك. في Debian وUbuntu يوجد في /etc/nginx/sites-available/ (مع رابط رمزي في sites-enabled/)؛ وفي RHEL وCentOS وAlmaLinux وRocky Linux يوجد في /etc/nginx/conf.d/. أضف أو حرّر كتلة الخادم (server block) التي تستمع على المنفذ 443 بحيث تشير إلى ملف fullchain والمفتاح الخاص:

server {
    listen 443 ssl;
    http2 on;
    server_name example.com www.example.com;

    ssl_certificate     /etc/ssl/ssl-bundle.crt;
    ssl_certificate_key /etc/ssl/your_domain.key;

    # Modern TLS only
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_prefer_server_ciphers off;
    ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305;

    ssl_session_timeout 1d;
    ssl_session_cache shared:NginxSSL:10m;
    ssl_session_tickets off;

    access_log /var/log/nginx/example.com.access.log;
    error_log  /var/log/nginx/example.com.error.log;

    root /var/www/example.com;
    index index.html;

    location / {
        try_files $uri $uri/ =404;
    }
}

بعض الملاحظات حول التوجيهات أعلاه:

  • listen 443 ssl; يفعّل TLS على المنفذ 443. تم إزالة التوجيه القديم ssl on; في NGINX 1.25 ولا ينبغي أن يظهر في التكوينات الحديثة.
  • http2 on; يفعّل HTTP/2 كتوجيه مستقل بذاته (من NGINX 1.25.1 فما بعده). التكوينات القديمة استخدمت listen 443 ssl http2;، والذي لا يزال يعمل لكنه أصبح متوقفاً عن الاستخدام (deprecated).
  • ssl_protocols TLSv1.2 TLSv1.3; يعطّل الإصدارين القديمين TLS 1.0 وTLS 1.1. من NGINX 1.27.3 فما بعده، هذا هو الإعداد الافتراضي أيضاً إذا حذفت التوجيه، إلا أن تحديده صريحاً هو الخيار الأوضح والأنسب للمراجعة.
  • قائمة الشيفرات (ciphers) تطابق ملف تعريف “intermediate” من Mozilla وتعمل مع كل العملاء الحديثين. إذا كنت تحتاج فقط إلى عملاء TLS 1.3، يمكنك حذف ssl_ciphers بالكامل.

الخطوة 3: إعادة توجيه HTTP إلى HTTPS

أضف كتلة خادم منفصلة على المنفذ 80 تعيد توجيه كل طلب بشكل دائم إلى HTTPS، حتى يصل الزوار القادمون عبر HTTP العادي إلى عنوان URL الآمن:

server {
    listen 80;
    server_name example.com www.example.com;
    return 301 https://$host$request_uri;
}

استخدام return 301 أسرع وأكثر أماناً من قاعدة rewrite القائمة على التعبيرات النمطية (regex)، وهو النمط الذي يوصي به NGINX نفسه.

الخطوة 4: اختبار التكوين وإعادة تحميل NGINX

تحقق دائماً من صحة التكوين قبل إعادة التحميل، حتى لا يتسبب خطأ إملائي في تعطيل الخدمة:

sudo nginx -t

يجب أن تشاهد syntax is ok و test is successful. إذا أفاد بوجود خطأ، فإن الرسالة تتضمن اسم الملف ورقم السطر؛ صحّح الخطأ ثم أعد تشغيل الاختبار مرة أخرى. عندما ينجح الاختبار، أعد تحميل NGINX ليأخذ التكوين الجديد دون إسقاط الاتصالات القائمة:

sudo systemctl reload nginx

على الأنظمة التي لا تحتوي على systemd، استخدم إشارة إعادة التحميل الخاصة بـ NGINX بدلاً من ذلك:

sudo nginx -s reload

يُفضَّل استخدام reload على restart: إعادة التحميل تعيد قراءة التكوين دون إغلاق الاتصالات النشطة، بينما إعادة التشغيل تسقطها.

الخطوة 5 (اختيارية): تفعيل OCSP Stapling

يتيح OCSP stapling لـ NGINX تقديم حالة إلغاء موثّقة وحديثة إلى جانب الشهادة، حتى لا يحتاج العملاء إلى الاتصال بهيئة إصدار الشهادات (CA) في كل عملية اتصال (handshake). أضف ما يلي داخل كتلة خادم HTTPS الخاصة بك:

ssl_stapling on;
ssl_stapling_verify on;
ssl_trusted_certificate /etc/ssl/ssl-bundle.crt;
resolver 1.1.1.1 8.8.8.8 valid=300s;
resolver_timeout 5s;

أعد تحميل NGINX مرة أخرى باستخدام sudo systemctl reload nginx. تفعيل Stapling خطوة صغيرة لكنها مفيدة لتعزيز الأمان، ومعظم الشهادات الحديثة تدعمها من دون إعدادات إضافية.

التحقق من التثبيت

افتح موقعك عبر https:// في متصفح وتحقق من أن رمز القفل مغلق وأن الشهادة تطابق نطاقك. ثم قم بإجراء فحص أعمق باستخدام SSL Checker الخاصة بنا للحصول على تقرير فوري عن الشهادة والسلسلة والبروتوكولات والشيفرات التي يقدمها خادمك. نتيجة خضراء هناك تعني أن العملاء على كل الأنظمة الأساسية الكبرى سيثقون بالشهادة، بما في ذلك عملاء الهاتف المحمول وواجهات API.

الأسئلة الشائعة

أين أُثبّت شهادة SSL على NGINX؟

لا يتطلب NGINX نفسه مجلداً معيناً، لكن معظم المسؤولين يحتفظون بالشهادات والمفاتيح تحت /etc/ssl/ أو /etc/nginx/ssl/. ثم تشير إليها من كتلة الخادم باستخدام ssl_certificate (يشير إلى ملف الشهادة المدمج مع الشهادات الوسيطة) و ssl_certificate_key (يشير إلى المفتاح الخاص).

لماذا تكون شهادتي موثوقة في Chrome لكنها لا تعمل على الهاتف المحمول أو عملاء API؟

غالباً السبب هو غياب السلسلة الوسيطة. تستطيع متصفحات سطح المكتب جلب الشهادات الوسيطة الناقصة من تلقاء نفسها (“AIA fetching”)، لكن أندرويد وiOS ومعظم عملاء HTTP من سطر الأوامر أو من لغات البرمجة لا يمكنها ذلك. أعد بناء ملف fullchain بحيث يشمل شهادة الخادم متبوعة بكل شهادة وسيطة، ووجّه ssl_certificate إلى ذلك الملف المدمج، وأعد تحميل NGINX، وأعد تشغيل SSL Checker.

هل يجب استخدام restart أم reload بعد تحرير تكوين NGINX؟

إعادة التحميل (reload). sudo systemctl reload nginx (أو sudo nginx -s reload) يعيد قراءة التكوين ويستبدل عمليات العمل (worker processes) بسلاسة، بحيث لا تُسقط الاتصالات القائمة. إعادة التشغيل الكاملة توقف الخدمة وتبدأها من جديد ونادراً ما تكون ضرورية لتغيير في التكوين. شغّل دائماً sudo nginx -t أولاً حتى تكشف أخطاء الصياغة قبل إعادة التحميل.

هل ما زلت أحتاج إلى ssl on; في كتلة خادمي؟

لا. توقف التوجيه المستقل ssl on; عن الاستخدام (deprecated) في NGINX 1.15.0 وتمت إزالته بالكامل في 1.25. في أي إصدار مدعوم من NGINX تُفعّل TLS باستخدام listen 443 ssl; على سطر listen بدلاً من ذلك. إذا كنت تنسخ تكويناً قديماً، حذف أي أسطر ssl on;.

كيف أُفعّل HTTP/2 (وHTTP/3) على NGINX؟

استخدم التوجيه المخصص http2 on; داخل كتلة خادم HTTPS الخاصة بك (NGINX 1.25.1 فما بعده). الصياغة القديمة التي أضافت http2 كوسيط لسطر listen لا تزال تعمل لكنها متوقفة عن الاستخدام (deprecated). يُدعم HTTP/3 (QUIC) منذ NGINX 1.25 ويُفعَّل باستخدام مستمع UDP منفصل (listen 443 quic reuseport;) بالإضافة إلى رأس Alt-Svc؛ وهو اختياري ويمكن إضافته بمجرد استقرار HTTP/2 على موقعك.

كم مرة أحتاج إلى تجديد الشهادة؟

اعتباراً من 15 مارس 2026، أصبحت شهادات SSL/TLS الموثوقة عمومياً محدودة بسقف 200 يوم، وقد جدول منتدى CA/Browser تخفيضات أخرى (إلى 100 يوم في 2027 و47 يوماً في 2029). خطط لتكرار الخطوات أعلاه قبل كل انتهاء صلاحية بوقت كافٍ، أو قم بأتمتة عمليات التجديد باستخدام ACME.

وفِّر 10% على شهادات SSL عند الطلب اليوم!

إصدار سريع، وتشفير قوي، وثقة في المتصفح بنسبة 99.99%، ودعم مخصص، وضمان استرداد المال خلال 25 يومًا. رمز القسيمة: SAVE10

صورة مفصلة لتنين أثناء طيرانه

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