افزایش امنیت اینترنت! یکی از دغدغههای بشر از سالها پیش تا بهامروز همین بوده است. در این راستا اقدامات زیادی انجام شده و در این مقاله میخواهیم ببینیم SNI چیست؟ یکی از ابزارهایی که در ایمنتر کردن این فضا نقش مهمی ایفا میکند!
برای اینکه اتصال بین دستگاه کاربر و یک سایت ایمن باشد، تمام اطلاعات باید رمزگذاری شوند. این وظیفه گواهی SSL یا نسخه پیشرفتهتر آن TLS است؛ برای اینکه مرورگر کاربر بتواند سایت را پیدا کند، به آدرس IP آن نیاز دارد. تا وقتی خبری از این گواهیها نباشد، مشکلی هم در کار نیست؛ اما اگر سایتهایی که آدرس IP یکسان دارند (در هاست اشتراکی)، بخواهند اتصالات را با TLS ایمن کنند، مشکل تشخیص درست سایت مقصد به وجود میآید.
در این مقاله میخواهیم راجع به راهحل این مشکل صحبت کنیم. میخواهیم وظیفه SNI را بررسی کنیم و ببینیم چطور میتوان از آن در کنترلپنلهای مختلف استفاده کرد؟ مسلماً بهتر است قبل از هرچیزی با موضوع اصلی مقاله بیشتر آشنا شویم.
SNI چیست؟
SNI نام یک افزونه است که برای گواهی TLS کابرد دارد. این عبارت مخفف Server Name Indicator (نشانگر نام سرور) است. به سادهترین زبان، وظیفه این افزونه، پیدا کردن سایت مدنظر در هاست اشتراکی است!
همانطور که احتمالاً میدانید، هاست اشتراکی فضایی است که چندین سایت مختلف روی آن نگهداری میشوند. IP همه این سایتها یکسان است. مشکل زمانی به وجود میآید که بخواهیم برای یکی از این سایتها، گواهی SSL یا نوع پیشرفتهتر آن، TLS را تهیه کنیم.
میتوانید مقالات گواهی SSL و هاست اشتراکی را بخوانید تا اطلاعات بیشتری درمورد این دو مفهوم به دست آورید.
نکته: همانطور که گفتیم، TLS نسخه پیشرفتهتر گواهی SSL است.
حالا اجازه دهید مثال سایت CloudFlare را برای درک بهتر SNI بیان کنیم.
وقتی قرار باشد بستهای را به خانهای ویلایی بفرستید، فقط باید آدرس خیابان و نهایتاً پلاک خانه را در قسمت آدرس گیرنده بنویسید؛ اما اگر بخواهید همان بسته را به آپارتمانی در همان خیابان بفرستید، علاوه بر شماره خیابان و پلاک آپارتمان، باید شماره واحد را هم ذکر کنید.
اگر هاست اشتراکی را به آپارتمان تشبیه کنیم، آدرس IP این هاست میشود همان آدرس آپارتمان متشکل از شماره خیابان و پلاک آپارتمان؛ اما برای اینکه هر سایت بتواند از TLS بهره ببرد، به SNI نیاز داریم تا گواهی هر سایت بهصورت جداگانه تشخیص داده شود.
اگر موافق باشید، در بخش بعدی تاریخچه و وظیفه این افزونه را بررسی کنیم.
تاریخچه SNI و وظیفه آن
از سال 2003 بود که نیاز به افزونهای مثل SNI شدیداً احساس شد! اجازه دهید ابتدا بگوییم این افزونه دقیقاً چه وظیفهای دارد.
وقتی چندین سایت روی یک هاست با IP یکسان وجود داشته باشند، تعریف SSL/TLS مجزا برای آنها کاری سخت و در واقع نشدنی است! اگر قرار باشد اتصال با پروتکل Http برقرار شود، مشکلی وجود نخواهد داشت. مرورگر کاربر، آدرس IP را شناسایی میکند و در نهایت وبسرور سایت مدنظر را به او نشان میدهد؛ اما وقتی بخواهیم به سایتی متصل شویم که از گواهی SSL استفاده میکند، اوضاع کمی پیچیده میشود.
چنین سایتهایی بهجای Http از پروتکل Https استفاده میکنند؛ یعنی قبل از اینکه اتصال بین کاربر و سایت ایجاد شود، این گواهی وارد عمل میشود تا اتصال را ایمن کند. مشکل اینجاست که وقتی IP چندین سایت یکسان باشد (درصورت استفاده از هاست اشتراکی چنین مسئلهای پیش میآید)، امکان تشخیص مقصد برای مرورگر کاربر غیرممکن میشود. SNI به وجود آمد تا این مشکل از بین برود.
پس اگر سایتی IP اختصاصی داشته باشد، نیازی به SNI هم نخواهد داشت. دارنده سایت میتواند بدون نیاز به این افزونه، از گواهی SSL/TLS برای ایمنسازی اتصالها استفاده کند.
دلیل دیگری که ارائه SNI را توجیه میکرد، رو به اتمام بودن IPهای نسخه IPv4 بود! البته حالا با معرفی IPv6 دیگر چنین مشکلی وجود ندارد، اما در زمان عرضه SNI اوضاع متفاوت بود.
پس وظیفه SNI، فراهم کردن امکان استفاده سایتهای Https از گواهی SSL/TLS است. فارغ از اینکه ممکن است این سایتها روی آدرس IP یکسان میزبانی شوند.
تصویر زیر طرز کار این افزونه را بهتر شرح میدهد:
حالا بیایید ببینیم چطور میتوان این افزونه را روی سایت نصب کرد.
آموزش راهاندازی افزونه SNI در کنترلپنلهای مختلف
در ادامه، چگونگی فعال کردن این افزونه کارآمد برای 3 کنترلپنل مختلف هاست را به شما آموزش خواهیم داد.
آموزش فعالسازی SNI در کنترلپنل دایرکت ادمین
حالا که فهمیدیم SNI چیست، بد نیست روشهای راهاندازی آن را هم یاد بگیریم.
اگر میخواهید راجع به این کنترلپنل بیشتر بدانید، مقاله دایرکت ادمین چیست را بخوانید.
در اولین قدم باید فایل directadmin.conf را با دستور زیر باز و سپس ویرایش کنید:
nano /usr/local/directadmin/conf/directadmin.conf
حالا باید مقدار enable_ssl_sni را در این فایل، از 0 به 10 تغییر دهید.
در مرحله آخر هم باید با کمک دستور زیر، دایرکت ادمین را ریست کنید:
service directadmin restart
خب بیایید برویم سراغ پلسک!
آموزش فعالسازی SNI در کنترلپنل پلسک
میتوانید مقاله Plesk چیست را جهت آشنایی بیشتر با این کنترلپنل بخوانید. برویم سراغ اصل کار.
در این کنترلپنل، افزونه SNI بهصورت پیشفرض فعال است!
فقط کافی است به بخش Tools & Settings بروید و در قسمت Server Settings، گزینه زیر را فعال کنید:
Turn on SNI support, which allow using individual SSL/TLS certificates on websites with the same IP address
به همین راحتی، SNI در پلسک فعال میشود.
و اما آخرین کنترلپنل…
آموزش فعالسازی SNI در کنترلپنل سیپنل
مقاله cPanel چیست اطلاعات کاملی را راجع به این کنترلپنل در اختیارتان قرار میدهد.
جالب اینکه در این کنترلپنل هم، افزونه SNI بهصورت پیشفرض فعال است.
برای فعالسازی در WHM، باید به بخش Tweak Settings بروید و دستور زیر را اجرا کنید:
Allow cPanel users to install SSL Hosts.
خب این هم از آموزش فعالسازی SNI در کنترلپنلهای مختلف!
جمعبندی
SNI علاوه بر قابلیت اصلیای که دارد، مدیریت و اعمال تنظیمات چندین سایت را راحتتر از همیشه میکند؛ البته در صورتی که IP این سایتها یکسان باشد.
بیشتر مرورگرها و سیستمهای حال حاضر اینترنت، از SNI پشتیبانی میکنند و درصد بسیار پایینی از نسخههای قدیمی، این امکان را ندارند. اگر سیستمعامل یا مرورگری نتواند از SNI پشتیبانی کند، به احتمال زیاد کاربر به سایت مورد نظر خود نمیرسد و با ارور زیر مواجه خواهد شد:
Your connection is not private.
در این مقاله بررسی کردیم که SNI چیست و چگونه میتوان آن را فعال کرد.
همچنین برای نوشتن این مقاله، از سایت CloudFlare و بلاگ Global Sign کمک گرفتیم.
شما هم اگر نظر یا سوالی در رابطه با SNI دارید، در قسمت کامنتهای همین مقاله برای ما بنویسید.