الأمن السيبراني

إعداد TLS في Nginx وApache لعام 2026: ملف Intermediate الذي تتولاه الآن TLSRef

انتقلت إرشادات TLS ومولّد الإعدادات من Mozilla إلى TLSRef. ملف Intermediate لـNginx وApache على Debian، وتبادل المفاتيح المقاوم للكم، والاختبار.

تاريخ النشر
مدة القراءة
6 دقائق
الكاتب
SKYLINE Engineering

ظل المرجع لإعدادات TLS في خوادم الويب لسنوات دليلَ Server Side TLS من Mozilla ومولّد الإعدادات المرافق له. وفي 2026 انتقل الاثنان إلى TLSRef، وهو مشروع لمجموعة عمل مجتمعية خارج Mozilla: فقد أُرشف مستودع المولّد القديم، وصار ssl-config.mozilla.org يحوّل إلى configurator.tlsref.org. أما التوصيات نفسها فمستمرة، وإصدارها الحالي 6.0 بتاريخ 6 أبريل 2026.

يطبق هذا الدليل ملف Intermediate الموصى به على Nginx وApache في Debian، وينبه إلى التفاصيل الخاصة بالتوزيعة التي يتعثر فيها كثيرون.

ماذا يتضمن ملف Intermediate

بحسب إرشادات Server-Side TLS، يوصى بملف Intermediate "لكل الأنظمة تقريباً":

  • البروتوكولات: TLS 1.2 وTLS 1.3 فقط.
  • مجموعات التشفير في TLS 1.2: ECDHE مع AES-GCM أو ChaCha20-Poly1305 فقط، وكلها تحقق السرية الأمامية. وقد أزيلت مجموعات DHE في الإصدار 5.8.
  • مجموعات تبادل المفاتيح: X25519MLKEM768 وX25519 وprime256v1 وsecp384r1، والأولى مجموعة هجينة مقاومة للحوسبة الكمية أضيفت في الإصدار 5.8.
  • الشهادات: يوصى بـECDSA P-256 أو RSA 2048، وبعمر 90 يوماً.
  • ترتيب التشفير: يختاره العميل.
  • HSTS: max-age=63072000 (سنتان).

أما ملف Modern فيقتصر على TLS 1.3، وقد أزال الإصدار 6.0 ملف Old بالكامل.

وتشرح الإرشادات هذه الخيارات: كل مجموعات التشفير في القائمة قوية وتحقق السرية الأمامية، لذا يُترك الاختيار للعميل لأنه أدرى بوجود تسريع AES في عتاده. ويوصى بشهادات ECDSA بدلاً من RSA جزئياً للتوافق مع بعض عملاء Windows الأقدم. وأزيلت مجموعات DHE لأنها تستهلك من المعالج أكثر من ECDHE وأكثر عرضة لهجمات استنزاف الموارد. وإذا ظل عميل قديم عاجزاً عن الاتصال بهذا الملف، فاعتبر ذلك سبباً لتحديث العميل لا لإضعاف الخادم على الجميع.

تحقق من إصدار OpenSSL أولاً

تحتاج المجموعة X25519MLKEM768 إلى OpenSSL 3.5 أو أحدث، ويحذفها المولّد إذا أدخلت إصداراً أقدم. يأتي Debian 13 (trixie) بالإصدار 3.5، بينما يأتي Debian 12 (bookworm) وUbuntu 24.04 بالإصدار 3.0، فلا تضفها هناك.

openssl version
nginx -v
apache2 -v

Nginx على Debian

يضبط ملف /etc/nginx/nginx.conf الذي يأتي مع Debian التوجيهين ssl_protocols وssl_prefer_server_ciphers داخل كتلة http. وتكرارهما في ملف داخل conf.d يجعل Nginx يرفض الإعداد بسبب التكرار، لذا عدّل هذين السطرين في مكانهما وأضف بقية التوجيهات فقط في ملف منفصل.

في Debian 13 تطابق القيم الافتراضية (ssl_protocols TLSv1.2 TLSv1.3; وssl_prefer_server_ciphers off;) ملف Intermediate أصلاً. أما في Debian 12 فيفعّل الملف TLS 1.0 و1.1 وتفضيل ترتيب الخادم، فغيّر السطرين إلى قيم Debian 13.

ثم أنشئ الملف /etc/nginx/conf.d/tls-intermediate.conf (الذي يُضمَّن داخل كتلة http) لـDebian 13:

ssl_ecdh_curve X25519MLKEM768:X25519:prime256v1:secp384r1;
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:MozSSL:10m;

وفي Debian 12 استخدم ssl_ecdh_curve X25519:prime256v1:secp384r1; وأضف ssl_session_tickets off;، وهو ما يضيفه المولّد لإصدارات Nginx الأقدم من 1.23.2 (يأتي Debian 12 بالإصدار 1.22.1).

وتصبح كتل الخادم للموقع على هذا النحو (في Debian 13؛ وفي Debian 12 اكتب listen 443 ssl http2; بدلاً من السطر المنفصل http2 on;):

server {
    listen 443 ssl;
    listen [::]:443 ssl;
    http2 on;
    server_name example.com;

    ssl_certificate     /etc/letsencrypt/live/example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;

    add_header Strict-Transport-Security "max-age=63072000; includeSubDomains" always;
}

server {
    listen 80;
    listen [::]:80;
    server_name example.com;
    return 308 https://$host$request_uri;
}

اختبر ثم أعد التحميل: sudo nginx -t && sudo systemctl reload nginx.

Apache على Debian

فعّل الوحدات التي يستخدمها الإعداد، ثم ضع الإعدادات العامة في ملف مستقل كي تتقدم على القيم الافتراضية في mods-available/ssl.conf:

sudo a2enmod ssl headers rewrite http2

أنشئ الملف /etc/apache2/conf-available/tls-intermediate.conf (في Debian 13؛ وفي Debian 12 احذف X25519MLKEM768: من سطر Curves):

SSLProtocol             -all +TLSv1.2 +TLSv1.3
SSLOpenSSLConfCmd       Curves X25519MLKEM768:X25519:prime256v1:secp384r1
SSLCipherSuite          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
SSLCipherSuite          TLSv1.3 TLS_AES_128_GCM_SHA256:TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256
SSLHonorCipherOrder     off
SSLSessionTickets       off

في المضيف الافتراضي لـHTTPS أضف Protocols h2 http/1.1 وHeader always set Strict-Transport-Security "max-age=63072000; includeSubDomains"، وفي المضيف الافتراضي للمنفذ 80 حوّل إلى HTTPS مع إبقاء تحديات ACME متاحة:

RewriteEngine On
RewriteCond %{REQUEST_URI} !^/\.well\-known/acme\-challenge/
RewriteRule ^.*$ https://%{HTTP_HOST}%{REQUEST_URI} [R=308,QSA,L]

فعّل وأعد التحميل: sudo a2enconf tls-intermediate && sudo apachectl configtest && sudo systemctl reload apache2.

بخصوص OCSP stapling

ما زال المولّد يعرض خيار OCSP stapling، لكن Let's Encrypt أوقفت خدمة OCSP في أغسطس 2025 ولم تعد شهاداتها تحتوي على رابط OCSP، فلا فائدة من الخيار معها. اتركه معطلاً ما لم تكن شهادتك صادرة عن جهة ما زالت تشغّل OCSP.

الاختبار

openssl s_client -connect example.com:443 -servername example.com -brief </dev/null
openssl s_client -connect example.com:443 -servername example.com -tls1_2 -brief </dev/null

يجب أن ينجح الاتصال في الحالتين مع عرض البروتوكول ومجموعة التشفير. كرر الاختبار من أي عميل قديم تحتاج إلى دعمه. ولا تضف HSTS إلا بعد عمل HTTPS على كل اسم يغطيه: فالخيار includeSubDomains يسري على كل النطاقات الفرعية لمدة سنتين.

ما الذي ينبغي فعله

  • احفظ رابط configurator.tlsref.org، فروابط مولّد Mozilla تحوّل إليه الآن.
  • استخدم ملف Intermediate ما لم تكن تتحكم في جميع العملاء وتستطيع الاقتصار على TLS 1.3.
  • طابق المجموعة المقاومة للكم مع إصدار OpenSSL: لا تضف X25519MLKEM768 إلا مع OpenSSL 3.5 أو أحدث.
  • في Debian عدّل أسطر ssl_protocols الموجودة في nginx.conf بدلاً من تكرارها.
  • اختبر بـnginx -t أو apachectl configtest قبل إعادة التحميل، ثم من الخارج بـopenssl s_client.

المصادر

المواضيع

SKYLINE Engineering

@skyline

The engineering team at SKYLINE Industrial Solutions. We publish field-tested guides drawn from real KSA and GCC deployments.

صفحة الكاتب
SKYLINE engineering services

Need this implemented for you?

Reading is free — building it right takes a team. SKYLINE engineers ship Cybersecurity for Aramco vendors, banks, hospitals and government agencies across Saudi Arabia. Talk to us before you start.

Aramco Approved Contractor ISO 9001 · ISO 27001 SAMA CSF aligned NCA ECC ready 247+ KSA clients

Comments

0 total · 0 threads
Be the first to leave a comment.