احتمالاً تا حالا بارها با اصطلاحات SSL، HTTPS و TLS مواجه شدید و هربار هم از خودتون پرسیدید که اصلاً هر کدوم از اینها چی هستن و چه تفاوتی باهم دارن. همونطور که میدونیم در دنیای ارتباطات در هر لحظه و ثانیه دادههای زیادی در قالبهای مختلف متن، فایل، صوت، تصویر و ... از طریق پروتکلهای مختلف ارتباطی از جمله SMTP، FTP، HTTP و ... در حال جابهجا شدنه.
انتقال دادهها از بستر این پروتکلها خطر شنود اطلاعات در مسیر(On-path Attacks)، جعل دامنه(Domain Spoofing) و حتی تغییر دادهها رو هم با خودش به همراه داشت و از اونجا بود که از همون اوایل نیاز به تأمین امنیت انتقال دادهها احساس شد. باید راهی میبود تا انتقال دادهها در یک بستر امن صورت بگیره که اگر اون وسطای راه کسی گوش وایساده بود که بفهمه چه اطلاعاتی داره رد و بدل میشه بینصیب بمونه و دست از پا درازتر برگرده همون جایی که بوده!
اینجوری بود که شرکت نتاسکیپ(Netscape) دست به کار شد و در سال ۱۹۹۴ پروتکل SSL رو معرفی کرد. SSL مخفف Secure Sockets Layer و به معنای لایهی سوکتهای امنه و یه پروتکله که مسئولیت رمزنگاری و ایمنسازی ارتباطات رو بر عهده داره. نتاسکیپ یک سال بعد در سال ۱۹۹۵ نسخهی دوم پروتکل SSL یعنی SSL 2.0 رو همراه با مرورگر Netscape Web 1.1 منتشر کرد. حالا ممکنه بپرسید چرا نسخهی دو؟؟! پس SSL 1.0 چی شد؟ راستش نسخهی یک هیچوقت منتشر نشد و دلیلش هم وجود اشکالات فراوان امنیتی بود؛ در واقع خود نتاسکیپ از خیر انتشارش گذشت و عطاش رو به لقاش بخشید!
اما SSL 2.0 هم بینقص نبود و مشکلات بزرگ امنیتی دیگهای داشت؛ به همین دلیل در نوامبر ۱۹۹۶ نتاسکیپ با رفع اون مشکلات، SSL 3.0 رو راهی دنیای ارتباطات کرد. در همین زمان هم رفتهرفته اینترنت رشد بیشتری میکرد و شرکتهای بزرگ دنیا از جمله نتاسکیپ و مایکروسافت در حال رقابت برای کسب سهم بیشتری از بازار مرورگرها بودن که به جنگ مرورگرها(Browser Wars) هم معروفه. با توسعهی مرورگرهای مختلف نیاز به یک پروتکل استاندارد بیشتر احساس میشد تا اینکه نتاسکیپ در سال ۱۹۹۹ امتیاز و کنترل SSL رو به کارگروه مهندسی اینترنت (IETF) سپرد.
در اواخر همون سال، IETF با اعمال برخی بهروزرسانیها روی SSL 3.0، یه نسخهی جدید از این پروتکل رو منتشر کرد و نام اون رو هم به TLS که مخفف Transport Layer Security یا همون امنیت لایهی انتقاله تغییر داد و با انتشار TLS 1.0 که در واقع SSL 3.1 بود اولین نسخه از TLS رو ارائه داد. این تغییر نام سرآغازی بود برای ایجاد یک سرگردانی تا به امروز! به همین دلیل این دو پروتکل اغلب در کنار هم و به صورت SSL/TLS نوشته میشن.
در آپریل ۲۰۰۶، IETF با انجام برخی تغییرات جزئی، TLS 1.1 و حدود ۲ سال بعد از اون هم یعنی در آگوست ۲۰۰۸، TLS 1.2 رو منتشر کرد. سه سال بعد از اون در سال ۲۰۱۱، IETF اعلام کرد که SSL 2.0 منسوخ شده! اما نکتهی جالب اینه که مرورگرها تازه از سال ۲۰۱۳ خودشون رو با TLS 1.2 سازگار کردن! نهایتاً دو سال بعد، در ژوئن ۲۰۱۵، IETF نسخهی سوم SSL یعنی SSL 3.0 رو هم منسوخ اعلام کرد.
نسخهی فعلی و آخرین نسخه از TLS یعنی TLS 1.3 در آگوست ۲۰۱۸ توسط IETF منتشر شد. جالبه بدونید که این نسخه از TLS بعد از گذشت ۱۰ سال از نسخهی قبلی منتشر شد که باعث شد با بهبودهای زیادی همراه باشه و با حذف برخی از الگوریتمهای رمزنگاری قدیمی از جمله SHA-1 و MD5 بسیاری از ضعفهای نسخهی قبلی رو برطرف کنه و امنیت بالایی رو به همراه بیاره. هماکنون تمامی مرورگرهای معروف از TLS 1.3 پشتیبانی میکنن که از طریق این سایت میتونید پشتیبانی مرورگرتون از TLS 1.3 رو بررسی کنید.
امروزه پروتکلهای ارتباطی مختلف از SSL/TLS برای رمزنگاری دادهها استفاده میکنن. مثلاً پروتکلهای HTTPS و FTPS در واقع همون پروتکلهای HTTP و FTP هستن که دادههای ارسالی رو توسط SSL/TLS رمزنگاری میکنن.
اما SSL/TLS چجوری از دادهها محافظت میکنه؟
اگر خیلی ساده بخوام بگم، این کار توسط یک جفت کلید انجام میشه که بهشون کلیدهای عمومی(Public Key) و خصوصی(Private Key) گفته میشه. رمزنگاری با این دوتا کلید اینجوریه که به طور مثال عبارت Hello قبل از اینکه به سرور فرستاده بشه توسط مرورگر شما و با استفاده از کلید عمومی، رمزنگاری(Encrypt) شده و به یه عبارت نامفهوم مثل 09vpllUKPO9E تبدیل میشه و در نهایت این عبارت نامفهوم به سرور ارسال میشه. در سرور، همین عبارت نامفهوم، این بار توسط کلید خصوصی رمزگشایی(Decrypt) میشه و به همون Hello تبدیل میشه. این فرآیند هم کاملاً دوطرفه است به این مفهوم که اطلاعات با هر کدوم از کلیدهای عمومی و یا خصوصی رمزنگاری بشن با کلید دیگه میشه اون رو رمزگشایی کرد. البته کلاینت و سرور دادههاشون رو مستقیماً با این دوتا کلید رمزنگاری نمیکنن بلکه با استفاده از این دوتا کلید و طی یه فرآیندی موسوم به SSL Handshake یه کلید دیگه به نام Session Key ایجاد میکنن و از اون برای رمزنگاری و رمزگشایی اطلاعات استفاده میکنن. بنابراین تنها شما و سرور به دادهی اصلی دسترسی دارید و اگر بین راه کسی شنود اطلاعاتی هم انجام بده تنها با تعداد زیادی از عبارات نامفهوم مواجه میشه و متوجهی اطلاعات اصلی نمیشه. این رو هم بگم که کلید عمومی، مشخصات وبسایت و یه سری اطلاعات دیگه توسط یه فایل به نام SSL Certificate روی سرور نصب میشن.
ذکر این نکته هم ضروریه که کلید خصوصی فقط در اختیار سروره و هربار که شما سایتی که از SSL/TLS پشتیبانی میکنه رو در مرورگرتون باز میکنید، مرورگر شما ابتدا به سرور اون وبسایت متصل میشه و کلید عمومی رو از سرور دریافت میکنه که همونطور که اشاره کردم به این فرآیند ابتدایی رفت و برگشتی بین مرورگر و سرور اصطلاحاً SSL Handshake گفته میشه. در این مقاله با عنوان «پروتکل SSL/TLS چجوری کار میکنه و چطور یه ارتباط HTTPS رو امن میکنه؟ هفت خان SSL Handshake!» خیلی مفصلتر در مورد SSL Handshake صحبت کردم و نوشتم که چه مراحلی باید طی بشه تا کلاینت و سرور یه ارتباط امن رو باهم شکل بدن.