كيف يعمل HTTPS وTLS حقًا: دليل عملي
ربما رأيت أيقونة القفل في متصفحك وتعرف أنها تعني "آمن". لكن ماذا يحدث فعليًا عند زيارة موقع HTTPS؟ كيف يعرف متصفحك أنه يتحدث إلى الخادم الحقيقي وليس إلى محتال؟ ولماذا يبطئ TLS الأمور أحيانًا؟ يشرح هذا الدليل HTTPS وTLS بعبارات عملية، حتى تتمكن من تكوين تطبيقات الويب الخاصة بك وتصحيح أخطائها وتأمينها بثقة.
ما هو HTTPS حقًا
HTTPS هو ببساطة HTTP فوق TLS (أمان طبقة النقل). يوفر TLS ثلاثة ضمانات:
- السرية: يتم تشفير البيانات بحيث لا يمكن للمتنصتين قراءتها.
- السلامة: لا يمكن تعديل البيانات أثناء النقل دون اكتشاف ذلك.
- المصادقة: يثبت الخادم هويته باستخدام شهادة.
بدون TLS، يرسل HTTP كل شيء كنص عادي: كلمات المرور وملفات تعريف الارتباط والبيانات الشخصية تكون مرئية لأي شخص على مسار الشبكة. HTTPS يصلح ذلك.
مصافحة TLS بعبارات بسيطة
قبل تدفق أي بيانات مشفرة، يقوم العميل والخادم بإجراء مصافحة للاتفاق على مفاتيح التشفير والتحقق من الهوية. إليك ما يحدث في مصافحة TLS 1.3 النموذجية (المعيار الحديث):
- Client Hello: يرسل المتصفح قائمة بمجموعات التشفير المدعومة وإصدارات TLS وقيمة عشوائية.
- Server Hello: يختار الخادم مجموعة تشفير، ويرسل قيمته العشوائية الخاصة، ويوفر سلسلة شهادته.
- تبادل المفاتيح: يستخدم الطرفان خوارزمية تبادل مفاتيح (مثل ECDHE) لاشتقاق سر مشترك دون إرساله مباشرة أبدًا.
- التحقق من الشهادة: يتحقق العميل من شهادة الخادم مقابل سلطات الشهادات الجذرية الموثوقة، ويتحقق من اسم النطاق، ويفحص تاريخ انتهاء الصلاحية.
- Finished: يرسل الطرفان MAC لتأكيد سلامة المصافحة، وتبدأ بيانات التطبيق المشفرة.
يقلل TLS 1.3 من ذلك إلى رحلة ذهاب وإياب واحدة (1-RTT) ويدعم حتى استئناف 0-RTT للزوار المتكررين، مما يقلل زمن الوصول بشكل كبير مقارنة بـ TLS 1.2.
الشهادات: مرساة الثقة
تربط الشهادة مفتاحًا عامًا باسم نطاق ويتم توقيعها من قبل سلطة شهادات (CA). تأتي المتصفحات وأنظمة التشغيل مع مخزن من سلطات الشهادات الجذرية الموثوقة. عندما يقدم الخادم شهادته، يتحقق العميل من السلسلة حتى الجذر الموثوق.
أنواع الشهادات الشائعة:
- DV (التحقق من النطاق): يثبت التحكم في النطاق؛ يصدر بسرعة وغالبًا مجانًا (مثل Let's Encrypt).
- OV (التحقق من المؤسسة): يتضمن تفاصيل المؤسسة التي تم التحقق منها؛ يستغرق وقتًا أطول للإصدار.
- EV (التحقق الممتد): أعلى مستوى تحقق؛ أظهر تاريخيًا شريطًا أخضر، لكن المتصفحات الحديثة لم تعد تؤكد عليه.
تنتهي صلاحية الشهادات، لذا فإن الأتمتة ضرورية. أدوات مثل Certbot أو عملاء ACME المدمجين مع وكيلك العكسي تتولى التجديد تلقائيًا.
تكوين HTTPS على خادمك
إليك تكوين Nginx بسيط يمكّن HTTPS بإعدادات TLS حديثة:
server {
listen 443 ssl http2;
server_name example.com;
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers 'ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256';
ssl_prefer_server_ciphers off;
# HSTS (enable after testing)
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
location / {
proxy_pass http://localhost:3000;
}
}
server {
listen 80;
server_name example.com;
return 301 https://$host$request_uri;
}
النقاط الرئيسية: استخدم TLS 1.2 و1.3 فقط، وفضل مجموعات تشفير ECDHE للسرية الأمامية، وأعد توجيه HTTP إلى HTTPS. يخبر HSTS المتصفحات دائمًا باستخدام HTTPS لنطاقك، لكن اختبر بعناية قبل تمكينه بحد أقصى طويل.
المزالق الشائعة وكيفية تجنبها
- المحتوى المختلط: تحميل موارد HTTP على صفحة HTTPS يكسر القفل. استخدم عناوين URL نسبية أو تأكد من أن جميع الأصول تستخدم HTTPS.
- الشهادات منتهية الصلاحية: أتمت التجديد وراقب انتهاء الصلاحية. شهادة منتهية الصلاحية تسبب تحذيرات فورية في المتصفح.
- بروتوكولات ضعيفة: عطّل TLS 1.0 و1.1؛ فهي مهملة وعرضة للثغرات.
- سلاسل شهادات غير كاملة: يجب على الخوادم إرسال الشهادات الوسيطة؛ وإلا فشل بعض العملاء. استخدم أدوات مثل SSL Labs للاختبار.
- عدم وجود HSTS preload: للحصول على أقصى حماية، أرسل نطاقك إلى قائمة HSTS preload بعد التأكد من أن جميع النطاقات الفرعية تدعم HTTPS.
TLS 1.2 مقابل TLS 1.3: ما الذي تغير
| الميزة | TLS 1.2 | TLS 1.3 |
|---|---|---|
| رحلات ذهاب وإياب المصافحة | 2-RTT | 1-RTT (0-RTT مع الاستئناف) |
| تبادل المفاتيح | RSA أو ECDHE | ECDHE فقط (السرية الأمامية إلزامية) |
| مجموعات التشفير | كثيرة، بما في ذلك الضعيفة | مجموعة مخفضة، كلها AEAD |
| بيانات 0-RTT | غير مدعومة | مدعومة (مع خطر إعادة التشغيل) |
TLS 1.3 أسرع وأبسط، ويزيل الخوارزميات القديمة. معظم العملاء الحديثين يدعمونه، لكن احتفظ بـ TLS 1.2 للأجهزة الأقدم.
تصحيح مشكلات TLS
عند فشل HTTPS، تحقق من هذه:
- استخدم
openssl s_client -connect example.com:443 -servername example.comلفحص سلسلة الشهادة والمصافحة. - شغّل
curl -vI https://example.comلرؤية إصدار TLS والتشفير المتفاوض عليه. - تحقق من سجلات الخادم بحثًا عن أخطاء المصافحة؛ يسجل Nginx أخطاء SSL في سجل الأخطاء.
- استخدم أدوات اختبار SSL عبر الإنترنت للحصول على تقييم شامل وتوصيات.
إذا كنت تعمل مع سجلات Nginx بانتظام، فإن محلل سجلات Nginx يمكن أن يساعدك في اكتشاف فشل مصافحة TLS والمشكلات الأخرى بسرعة.
الأسئلة الشائعة
ما الفرق بين HTTPS وTLS؟
HTTPS هو HTTP فوق TLS. TLS هو البروتوكول التشفيري الذي يوفر التشفير والسلامة والمصادقة. HTTPS هو النسخة الآمنة من HTTP التي تستخدم TLS.
هل أحتاج إلى شهادة للخدمات الداخلية؟
نعم، للخدمات الداخلية في الإنتاج، استخدم شهادات من CA الخاصة بك أو CA عامة. الشهادات الموقعة ذاتيًا تسبب مشكلات ثقة؛ فكر في استخدام PKI خاصة أو أدوات مثل mkcert للتطوير.
كم مرة يجب تجديد الشهادات؟
أفضل ممارسة حديثة هي شهادات لمدة 90 يومًا مع تجديد تلقائي، كما تقدم Let's Encrypt. تقلل فترات الصلاحية الأقصر من المخاطر إذا تم اختراق مفتاح.
هل أنت مستعد لتأمين موقعك؟ ابدأ باختبار تكوين TLS الحالي الخاص بك باستخدام فاحص SSL، ثم طبق إعدادات Nginx أعلاه. للتعمق أكثر في أمن الويب، استكشف أدلتنا الأخرى حول OWASP Top 10 ومنع XSS.