HTTPS و SSL/TLS
ليه أصلاً محتاجين الطبقة دي؟
قلنا قبل كده إن HTTP بيبعت البيانات مكشوفة، زي ما تكون بتكتب رسالة على كارت بوستال — أي حد في الطريق يقدر يقراها. المشكلة دي بقت خطيرة جدًا مع دخول البنوك والمواقع اللي بتاخد بيانات حساسة على الإنترنت. الحل كان طبقة أمان تتلبس فوق HTTP اسمها SSL/TLS، والنتيجة هي HTTPS.
- SSL (Secure Sockets Layer): البروتوكول الأصلي، اتطوّر في التسعينيات، فيه ثغرات كتيرة اكتُشفت بمرور الوقت.
- TLS (Transport Layer Security): النسخة المطوّرة والمعتمدة حاليًا، بإصدارات TLS 1.2 وTLS 1.3 هما المعيار المستخدم حاليًا. الناس لسه بتستخدم مصطلح “SSL Certificate” بس فعليًا بيقصدوا شهادة TLS.
الهدف من الطبقة دي 3 حاجات: السرية (محدش يقرا البيانات)، السلامة (البيانات ما تتغيرش في الطريق)، وتثبيت الهوية (تتأكد إنك فعلاً بتكلم السيرفر الصح مش موقع مزيف).
المكونات الأساسية اللي بتبني الأمان ده
التشفير التماثلي (Symmetric Encryption)
مفتاح واحد مشترك بيشفر ويفك التشفير، زي AES. سريع جدًا، فهو المستخدم لتشفير البيانات الفعلية اللي بتتبادلها بعد ما يتم الاتفاق.
التشفير غير التماثلي (Asymmetric Encryption)
زوج مفاتيح (عام وخاص)، زي RSA أو ECDHE. بطيء نسبيًا، فبيُستخدم بس في مرحلة تبادل المفتاح التماثلي، مش لتشفير كل البيانات.
الشهادات الرقمية (Digital Certificates)
ملف بيثبت هوية السيرفر، فيه المفتاح العام بتاعه، ومعلومات الهوية (اسم الدومين)، وموقّع رقميًا من جهة موثوقة (CA — Certificate Authority) زي Let’s Encrypt.
الهاش (Hashing)
بيضمن السلامة، عن طريق إنتاج بصمة فريدة للبيانات، تُستخدم في التوقيعات الرقمية وداخل TLS نفسه كـ MAC (Message Authentication Code).
إزاي الـ TLS Handshake بيحصل خطوة خطوة؟
- بدء الاتصال: المتصفح بيبعت طلب HTTPS، وبيبعت قايمة بالخوارزميات اللي بيدعمها.
- إرسال الشهادة: السيرفر بيبعت شهادته الرقمية، فيها مفتاحه العام وتوقيع الـ CA.
- التحقق من الشهادة: المتصفح بيحسب هاش الشهادة، وبيفك توقيع الـ CA بمفتاح الـ CA العام (المخزن عنده مسبقًا في trust store). لو الهاشين متطابقين، الشهادة موثوقة.
- تبادل مفتاح التشفير التماثلي:
- الطريقة التقليدية (RSA): المتصفح بيولّد session key عشوائي، بيشفره بالمفتاح العام بتاع السيرفر، والسيرفر بيفكه بمفتاحه الخاص.
- الطريقة الحديثة (ECDHE): الطرفين بيتفقوا على مفتاح مشترك من غير ما يبعتوه فعليًا على الشبكة، وده بيوفر خاصية اسمها Perfect Forward Secrecy — يعني حتى لو حد سجّل الترافيك المشفر وسرق المفتاح الخاص بتاع السيرفر بعدين، مش هيقدر يفك التشفير القديم، لأن كل session كان ليها مفتاح مؤقت مختلف.
- بدء التواصل الآمن: البيانات بتتشفر بـ AES باستخدام المفتاح التماثلي، وMAC بيتضاف لكل رسالة عشان يضمن إنها ماتغيرتش في الطريق.
ليه SSL/TLS القديم خطر؟
النسخ القديمة (SSL 2.0، SSL 3.0، وحتى TLS 1.0/1.1) فيها ثغرات معروفة استُغلت فعليًا:
- POODLE (CVE-2014-3566): ثغرة في SSL 3.0 بتسمح للمهاجم — في وضع Man-in-the-Middle — إنه يجبر الاتصال ينزل (downgrade) لـ SSL 3.0 الأضعف، وبعدين يستغل padding oracle عشان يفك جزء من البيانات المشفرة (زي كوكيز الجلسة) بايت بايت.
- Heartbleed (CVE-2014-0160): مش ثغرة في البروتوكول نفسه، لكن في مكتبة OpenSSL الشهيرة، بتسمح للمهاجم يقرا محتوى ذاكرة السيرفر (ممكن تحتوي على مفاتيح خاصة، كوكيز، باسوردات) عن طريق استغلال bug في تعامل الـ Heartbeat extension مع طول الرسالة.
النقطتين دول بيوضحوا مبدأ مهم: أمان HTTPS مش بس “فيه قفل ولا لأ” — هو مرتبط بإصدار البروتوكول، ونوع الـ Cipher Suites المستخدمة، وسلامة تطبيق البروتوكول نفسه (زي حالة Heartbleed اللي كانت bug في implementation مش design).
مثال عملي يربط كل ده
لما تدخل https://www.mybank.com:
- المتصفح بيعمل TLS Handshake ويتحقق من الشهادة عبر هاش وتوقيع الـ CA.
- يتفق الطرفين على session key (إما مشفر بالمفتاح العام أو عبر ECDHE).
- لما تبعت بياناتك (زي رقم حسابك)، بتتشفر بـ AES وبيضاف لها MAC.
- لو حد حاول يغيّر حرف واحد في البيانات وهي ماشية، الـ MAC هيختلف والاتصال هيتقطع فورًا لأن السلامة اتكسرت.