TLS handshake چیست؟
پروتکل TLS یکی از پروتکلهایی است که برای ایجاد ارتباط امن در شبکهی اینترنت مورد استفاده قرار میگیرد. شیوهی کار این پروتکل به این شکل است که دو طرف یک ارتباط یعنی کاربر و سرور، پیش از مبادلهی اطلاعات، به کمک TLS یک connection امن ایجاد و سپس از این connection برای مبادلهی اطلاعات استفاده میکنند. برای ایجاد این ارتباط امن لازم است تا نخست اطلاعات اولیهی مورد نیاز برای برقراری این connection مبادله شوند. به فرآیند انتقال این اطلاعات اولیه و ایجاد ارتباط امن برای مبادلهی اطلاعات در این پروتکل، TLS handshake گفته میشود. در ادامه، روند ایجاد یک ارتباط TLS در طی فرآیند TLS handshake بررسی شده است.
مراحل TLS handshake
فرض کنید که قرار است کاربر، صفحهی webای را از یک سرور دریافت کند. کاربر برای این کار از پروتکل HTTPS استفاده میکند که بر پایهی پروتکل TLS ایجاد شده است. گامهای زیر، روند ایجاد connection بین کاربر و سرور را نشان میدهد:
۱- ابتدا کاربر یک پیام شامل cipher suits، یک عدد تصادفی و نسخهی TLSای که استفاده میکند را برای سرور ارسال میکند. منظور از cipher suits، روشهایی است که میتواند برای رمزنگاری استفاده شود و کاربر از آنها پشتیبانی میکند.
۲- پس از اینکه سرور پیام بالا را دریافت کرد، جوابی برای کاربر ارسال میکند. جواب ارسال شده، مشخص میکند که سرور از بین cipher suitهایی که کاربر ارسال کرده است، کدام را برای ادامه انتخاب میکند. همچنین، در پاسخ ارسال شده، مشخص میشود که آیا نسخهی TLS کاربر، مورد استفادهی سرور هم هست یا نه. در نهایت، سرور یک certificate یا گواهینامه و یک عدد تصادفی برای کاربر ارسال میکند. سرور به کمک این گواهینامه هویت خود را به کاربر اثبات میکند و کاربر به کمک کلید عمومی سرور که در این گواهینامه قرار دارد، میتواند پیام رمز شده برای سرور ارسال کند.
۳- اکنون کاربر یک مقدار تصادفی دیگر برای سرور ارسال میکند که Pre-Master Secret نام دارد. کاربر این مقدار را با کلید عمومی سرور رمز و برای سرور ارسال میکند. در نتیجه برخلاف مقدارهای تصادفی قبلی، این مقدار فقط میتواند در اختیار کاربر و سرور قرار داشته باشد. به کمک این مقدار و اطلاعات قبلی، client و server میتوانند با کمک محاسباتی که پیشتر دربارهی شیوهی آن توافق کرده بودند، به یک مقدار مشابه برسند که درواقع کلید آنها برای رمز کردن اطلاعات از این مرحله به بعد است. در connection ایجاد شده، از رمزنگاری متقارن استفاده میشود. در نتیجه، کاربر و سرور میتوانند با داشتن کلیدهای مشابه، اطلاعات رمز شده را برای یکدیگر ارسال کنند و به اطلاعات رمز شده دسترسی داشته باشند.
۴- پس از این مرحله، کاربر پیامی با عنوان Change Cipher Spec برای سرور ارسال میکند. ارسال این پیام به این معنی است که کاربر از این پس، با استفاده از کلیدی که هم کاربر و هم سرور دارد، پیامها را رمزنگاری میکند. پس از این پیام، پیام دیگری هم برای سرور ارسال میکند که نشاندهندهی پایان روند handshake است.
۵- سرور هم دو پیام مشابه پیامهای بالا برای کاربر ارسال میکند. ارسال این پیامها به این معنی است که سرور هم از این پس پیامهای رمز شده ارسال میکند و همچنین، روند handshake از نظر سرور هم به پایان رسیده است.
پس از آنکه تمام این مراحل با موفقیت انجام شد، کاربر و سرور میتوانند با استفاده از یک ارتباط امن، به مبادلهی اطلاعات بپردازند.