HTTPS: قفل کنار آدرس دقیقاً چی رو محافظت میکنه
ببین چرا هر کسی که وایفایتو باهات شریکه میتونه یه صفحهی HTTP خام رو بخونه، TLS چطور اتصال رو قفل میکنه که فقط دو سرش بتونن بخوننش، و قفل کنار آدرس قبل از اینکه رمزتو جایی بزنی چی رو قول میده و چی رو نه.
خطر
بدون HTTPS، هر کسی وسط مسیر میتونه بخونه و عوضش کنه
درخواستی که HTTPS نداره، عین متن خام از هر دستگاهی که سر راهشه رد میشه: روتر کافه، شرکت اینترنتت، بعضیوقتا بیشتر. هر کدوم از اینها میتونن دقیقاً چیزی که فرستادی رو بخونن، و، این تیکهست که خیلیا ازش غافلن، میتونن قبل از رسیدنش عوضش هم بکنن: یه لینک رو جابهجا کنن، قیمتی رو تغییر بدن، یه چیز اضافه تو صفحه بذارن.
تو وایفای باز یه کافه، یه غریبه با ابزار درست میتونه هر صفحهی HTTP خامی که باز میکنی رو، همون لحظه، بدون اینکه اصلاً به گوشیت دست بزنه، تماشا کنه.
خودت رو امتحان کن
سارا به وایفای رایگان یه کافه وصل میشه و وارد یه سایتی میشه که فقط با http:// شروع میشه، نه https://. واقعبینانه، کی میتونه رمزی که تایپ میکنه رو ببینه؟
- هیچکس، چون رمز همیشه تو راه قایمه، فرقی نمیکنه آدرس سایت چه شکلی باشه
- فقط خود سایت، وقتی برسه
- هر کسی که وسط مسیر گوشیش تا سرور نشسته، از جمله همونی که وایفای کافه رو راه انداخته
- فقط کسی که فیزیکی به گوشیش دست زده
جواب رو ببین
هر کسی که وسط مسیر گوشیش تا سرور نشسته، از جمله همونی که وایفای کافه رو راه انداخته
درسته. HTTP خام از اول تا آخر مسیر درهمریخته نیست. هر کسی که این پیام رو وسط راه رد میکنه، از جمله روتر خود کافه، میتونه دقیقاً همونی که رد میشه رو بخونه.
راهحل
TLS: اول ثابت کن کی هستی، بعد یه کلید توافق کن، بعد همهچی رو درهم بریز
HTTPS قبل از رد و بدل شدن هر دادهای، یه مرحلهی اضافه به اسم TLS رو طی میکنه. اول سرور با یه گواهی (Certificate) ثابت میکنه کیه: یه سند که یه مرجع مورد اعتماد مرورگرت از قبل امضاش کرده و میگه این کلید واقعاً مال example.comـه. بعد دو طرف روی یه کلید مشترک، فقط برای همین اتصال، توافق میکنن. از اون لحظه به بعد، هر درخواست و هر جوابی با اون کلید درهم میریزه، برای هیچکس غیر از این دو سر خوندنی نیست.
شبیه اینه که یه نامه رو بعد از چک کردن کارت شناسایی طرف مقابل مهروموم کنی، اونم با یه رمزی که فقط همون امروز با هم روش توافق کردین.
خودت رو امتحان کن
گواهی تو TLS ثابت میکنه اتصال رمزنگاریشدهست؛ ولی واقعاً ثابت نمیکنه طرف مقابل کدوم شرکت یا آدمه.
جواب رو ببین
نادرست
غلطه. برعکسه: گواهی دقیقاً همون چیزیه که ثابت میکنه طرف مقابل کیه، یه مرجع مورد اعتماد امضا کرده که این کلید مال example.comـه. خود رمزنگاری از اون کلید مشترکی میاد که دو طرف بعدش روش توافق میکنن.
قدمبهقدم ببین

بدون رمزنگاری، هر کسی میتونه بخونتش یه کلمهی ساده، «hello»، رو سیم بین گوشی و سرور حرکت میکنه، بدون اینکه چیزی قایمش کنه. بالاش یه چشم با یه خط دید نقطهچین تا همون کلمه، یعنی هر کسی که وسط مسیر نشسته؛ این شکل یه اتصال بدون هیچ HTTPSیه.

سرور یه کلید میفرسته، با یه گواهی پشتش یه کلید نارنجی از سرور تا گوشی حرکت میکنه، و کنار سرور یه گواهی با یه تیک ظاهر میشه: یه مرجع مورد اعتماد از قبل تأیید کرده این کلید واقعاً مال example.comـه. این همون مرحلهی ثابت کردن هویته، قبل از اینکه چیزی درهم بریزه.

حالا پیام یه شلوغی درهمریختهست همون پیام حالا رو سیم میشه x7#q!، با همون کلیدی که دو طرف تازه روش توافق کردن درهم ریخته شده. چشم بالا حالا توخالیه و خط دیدش خط خورده: ناظر هنوز همونجا نشسته، دقیقاً سر همون مسیر، ولی فقط یه شلوغی میبینه.

قفلها بسته میشن: رمزنگاریشده از این سر تا اون سر قفلهای آبی بالای گوشی و سرور بسته میشن، و سیم بینشون کامل آبی میشه: این همون قفلیه که کنار آدرس میبینی، و یعنی کل اتصال الان از این سر تا اون سر رمزنگاریشدهست.
خودت رو امتحان کن
تو فریمهایی که دیدی، ناظرِ وسط مسیر هیچوقت از بین نرفت — سیم هنوز همونجاست و هنوز داره دیده میشه. پس واقعاً تا فریم آخر چی عوض شد؟
- ناظر فیزیکی از سیم جدا شد، پس دیگه چیزی نمونده بود که بهش نگاه کنه
- خود پیام برای ناظر ناخوانا شد، با اینکه هنوز رو همون سیم نشسته
- سرور اصلاً دیگه هیچ دادهای نفرستاد
- گواهی اتصال ناظر رو پاک کرد
جواب رو ببین
خود پیام برای ناظر ناخوانا شد، با اینکه هنوز رو همون سیم نشسته
درسته. TLS هیچکس رو از مسیر حذف نمیکنه — فقط چیزی که رو اون مسیر رد میشه رو برای هر کسی جز دو سرش غیرقابلخوندن میکنه. ناظر هنوز ترافیک رو میبینه؛ فقط نمیتونه ازش سر دربیاره.
محدودیتهای قفل
قفل چی رو قول نمیده
قفل فقط یعنی اتصال رمزنگاریشده، همین. قول نمیده سایت درستکار یا قابلاعتماده؛ یه سایت کلاهبرداری هم میتونه قفل داشته باشه، چون هر کسی میتونه برای دامنهای که ثبت کرده گواهی بگیره. قول نمیده تو همون سایتی هستی که منظورت بود؛ یه آدرس شبیهسازیشده هم قفل معتبر خودشو میگیره. و قول نمیده سایت نمیتونه دادههاتو ببینه، کاملاً میتونه. رمزنگاری فقط مسیر رو محافظت میکنه؛ سرور اون سر هر چی که براش میفرستی رو میخونه، کل هدف فرستادنش همینه.
یه سایت بانک تقلبی به آدرس bank-examp1e.co میتونه کاملاً HTTPS باشه، قفل و همهچی. قفل فقط ثابت میکنه هیچکس بین تو و اون سایت گوش نایستاده، نه اینکه اون سایت واقعاً همون بانکه.
خودت رو امتحان کن
هر ادعای قفل رو به درست یا غلط بودنش وصل کن
جواب رو ببین
- اتصال به این سایت رمزنگاریشده → درسته — قفل فقط همینو قول میده
- این سایت درستکار و قابلاعتماده → غلطه — هر کسی میتونه قفل بگیره، حتی کلاهبردارها
- مطمئنم تو همون سایتیام که منظورم بود → غلطه — یه آدرس شبیهسازیشده هم قفل معتبر خودشو داره
- سایت نمیتونه ببینه چی براش میفرستم → غلطه — سایت هر چی که براش بفرستی رو میخونه؛ رمزنگاری فقط مسیر رو محافظت میکنه
خودت رو امتحان کن
- امید سایت واقعی بانکشو باز میکنه، قفل و https:// رو میبینه، و واردش میشه.
- امید یه پیامک با یه لینک میگیره که شبیه بانکشه، بازش میکنه، اونجا هم قفل و https:// میبینه، و میخواد رمزشو بزنه.
هر دو صفحه قفل نشون میدن. چی باید امید رو قبل از تایپ رمز تو صفحهی دوم نگه داره؟
- هیچی — قفل همیشه یعنی امنه
- باید خود آدرس رو با دقت چک کنه؛ قفل بهتنهایی ثابت نمیکنه این بانک واقعیشه
- باید اول وایفای رو خاموش کنه
- قفل فقط رو سایتهای واقعی بانک میاد، پس این دومی هم حتماً واقعیه
جواب رو ببین
باید خود آدرس رو با دقت چک کنه؛ قفل بهتنهایی ثابت نمیکنه این بانک واقعیشه
دقیقاً. قفل فقط میگه اتصال رمزنگاریشده، نه اینکه واقعاً کی داره سایت رو اداره میکنه. یه آدرس شبیهسازیشده هم به همون راحتیِ سایت واقعی، قفل معتبر خودشو میگیره.
مرور درس
- بدون HTTPS، هر کسی وسط مسیر، وایفای کافه، شرکت اینترنتت، میتونه چیزی که میفرستی رو بخونه و حتی عوضش کنه.
- TLS اول با یه گواهی هویت سرور رو ثابت میکنه، بعد روی یه کلید مشترک توافق میکنه، بعد همهچیز بعدش رو درهم میریزه.
- قفل فقط یعنی اتصال رمزنگاریشده؛ نه یعنی سایت درستکاره، نه یعنی همونیه که منظورت بود، نه یعنی نمیتونه دادههاتو ببینه.
- بدون https:// رو صفحهی ورود یا پرداخت، ببندش، بدون استثنا.