فرض کنید قرار است بستهای را به فردی ارسال کنید، اما آدرس گیرنده را فقط تا نام ساختمان وارد کردهاید و پلاک واحد را ذکر نکردهاید. چقدر مطمئن هستید که بسته به دست فرد موردنظر خواهد رسید؟ دقیقا همین مسئله برای گواهینامههای SSL یا TLS در سایتهایی که روی یک سرور با آدرس IP مشترک قرار دارند، صادق است. وقتی کاربر روی لینک وبسایت کلیک میکند، آدرس IP سرور بهتنهایی برای نشان دادن اینکه کاربر به کدام دامنه قصد دسترسی دارد، کافی نیست. در اینجا است که افزونه SNI به کمک میآید.
میزبانی هاست و سرور مجازی خود را با آرامش به شاپینگ سرور بسپارید تا سرورهای معتبر و امن را تجربه کنید
SNI چیست؟
وقتی بحث امنیت وبسایت است، گواهینامه SSL جزو اولین فاکتورهایی است که به ذهنمان می آید. این گواهینامه جزو نیازهای اصلی هر وبسایت است چون با برقراری یک اتصال امن بین کاربر و وبسایت، هم سطح امنیتی وبسایت را بالا می برد و هم اینکه از لحاظ رضایت کاربر و سئو یک سیگنال مثبت محسوب می شود.
ولی وقتی بخواهیم از یک هاست اشتراکی استفاده کنیم یا چند وبسایت دارای گواهی SSL را روی یک سرور راه اندازی کنیم، موضوع کمی پیچیده می شود. در واقع، کاربری که قصد اتصال به وبسایت موردنظر را دارد به آدرس IP سرور نیاز دارد و وقتی گواهینامه SSL وبسایت های موجود روی هاست اشتراکی فعال است، IP همه وبسایت ها یکسان می شود و تشخیص مقصد برای مرورگر کاربر سخت و حتی غیرممکن می شود.
اینجاست که SNI وارد عمل می شود.
افزونه SNI با ترکیب پیام اتصال اولیه و نام میزبان در قالب handshake TLC بین کاربر و وبسایت، کاری می کند که تشخیص مقصد کاربر امکان پذیر باشد.
SNI تا حدودی شبیه ارسال یک بسته به ساختمان آپارتمانی است. در واقع، وقتی می خواهید بسته ای را به خانه شخصی بفرستید، آدرس خیابان و شماره پلاک خانه کافیست. اما وقتی می خواهید بسته را به یک ساختمان آپارتمانی ارسال کنید، علاوه بر آدرس خیابان به شماره واحد آپارتمانی هم نیاز دارید. در غیر اینصورت، ممکن است بسته به دست شخص موردنظر نرسد.
وقتی هر کدام از وبسایت ها SSL مخصوص خود را دارند و همه آنها هم از یک IP مشترک استفاده می کنند، ممکن است سرور نداند که موقع درخواست کاربر، کدام دامنه را نشان دهد چون پروسه بررسی گواهینامه قبل از اتصال به وبسایت انجام می شود.
البته، قبل از توسعه IPv6، کمبود آدرس های آی پی IPv4 هم یکی از دلایل دیگر استفاده از SNI بود. در کل استفاده از این افزونه به صاحبان وبسایت اجازه می دهد که هر تعداد دامنه و زیردامنه که می خواهند ایجاد و با گواهینامه SSL ایمن کنند.
اگر می خواهید این دردسرهای مربوط به هاست اشتراکی را نداشته باشید و از SNI برای مدیریت راحت تر وبسایت های خود استفاده کنید، توصیه می کنیم که خرید سرور مجازی را در اولویت خود قرار دهید چون در این صورت، این شما هستید که همه چیز را تحت کنترل دارید و از قدرت سخت افزاری و نرم افزاری سرور به صورت اختصاصی استفاده می کنید، آن هم با هزینه کمتر.
نحوه کار افزونه SNI
SNI افزونه ای است که با پروسه TLS handshake سروکار دارد. در کل، این پروسه دست دادن یا handshake برای ایمن سازی و رمزگذاری اتصالات HTTPS لحاظ شده است و قبل از رد و بدل شدن درخواست ها، یک handshake انجام می شود. اینجاست که SNI وارد عمل می شود و قبل نمایش صفحه، همراه اتصال handshake، نام میزبان درخواستی را هم مشخص می کند.
پس وقتی از SNI استفاده می کنید، همراه پیام اولیه (Hello) کلاینت، اسم هاست هم ارسال می شود.
این کار باعث می شود که وبسایت های HTTPS موجود روی یک سرور، گواهی نامه های منحصربفرد خود را داشته باشند و محدودیتی که از IP مشترک ناشی می شود، از بین برود.
جا دارد به این نکته هم اشاره کنیم که چون این اطلاعات از طریق TLS ارسال می شوند و همه مرورگرها و دستگاه ها هم به طور خودکار از آن پشتیبانی می کنند، دیگر نیازی به بروزرسانی یا تغییر سیستمی نیست.
البته، اگر به دنبال امنیت بیشتری هستید ESNI هم می تواند به شما کمک کند. این افزونه نسخه توسعه یافته SNI است که پیام handshake را هم رمزگذاری می کند. این کار باعث می شود که اطلاعات مربوط به گواهی درخواستی برای هکرها قابل تشخیص نباشد و سطح امنیت اتصالات بالا برود. ولی تا الان (۱۴۰۲/۰۲/۰۵) فقط فایرفاکس از این افزونه پشتیبانی می کند.
شاید بپرسید که پس اتصالات HTTP چه می شوند؟
وبسایت هایی که دارای گواهینامه SSL نیستند، نیازی به این افزونه ندارند چون موقع درخواست کاربر، مرورگر نام دامنه را هم به وب سرور ارسال می کند. به این صورت که به محض باز شدن یک اتصال TCP، کلاینت در اتصال HTTP خود، وبسایت درخواستی را هم مشخص می کند.
دلایل استفاده از SNI
دلایل زیادی وجود دارد که نشان میدهد استفاده از SNI چقدر میتواند برای کسب و کار شما مفید باشد:
با SNI، نیازی نیست برای هر یک از دامنهها و زیردامنههای سرور خود گواهی SSL جداگانه تهیه کنید، زیرا میتوانید با یک گواهی SSL تمامی آنها را پوشش دهید. این امر نه تنها موجب صرفهجویی در هزینهها میشود، بلکه نیاز به طی کردن پروسه نصب و فعالسازی SSL برای هر دامنه را نیز از بین میبرد و در نتیجه در زمان نیز صرفهجویی میکنید.
از نظر امنیتی، استفاده از SNI این امکان را میدهد که از یک مرجع صدور گواهی SSL مثل Let’s Encrypt استفاده کنید. این روش احتمال نشت امنیتی را کاهش میدهد، چرا که دریافت گواهی از چندین مرجع مختلف میتواند امنیت را به خطر بیاندازد.
همچنین باید توجه داشت که استفاده از SNI هیچ تأثیر منفی بر عملکرد و سرعت وبسایتهای پربازدید ندارد، زیرا پروسه TLS handshake تنها در ابتدای جلسه SSL رخ میدهد و SNI نیز فناوری سبک وزنی است.
بنابراین، از آنجایی که هر IP به طور عادی میتواند تنها یک دامنه HTTPS را میزبانی کند، استفاده از SNI کار را برای بسیاری از کسب و کارها، به ویژه میزبانهای وب، آسانتر میکند.
مزایای استفاده از افزونه SNI
- ایمن سازی چند دامنه موجود روی یک سرور با IP مشترک
- استفاده از یک گواهینامه SSL برای چند دامنه یا زیردامنه
- صرفه جویی در زمان و هزینه
- سبک وزن و بی تاثیر در عملکرد و سرعت وبسایت
- عدم نیاز به آدرس های IP بیشتر
- آسان کردن پروسه پیکربندی و مدیریت چند وبسایت
- افزایش سطح امنیت وبسایت هایی با IP مشترک
- مقابله با خطر تمام شدن آدرس های IPv4 (البته اختراع IPv6 هم این خطر را رفع کرد)
کدام مرورگرها یا پلتفرم ها از SNI پشتیبانی می کنند؟
- Internet Explorer، نسخه ۷ به بعد
- فایرفاکس، نسخه ۲ به بعد
- گوگل کروم، نسخه ۶ به بعد
- کرومیوم ورژن ۱۱ به بعد
- Microsoft Edge
- Safari نسخه ۲٫۱ به بعد
- Opera mobile، نسخه ۱۰٫۱ به بعد
- Konqueror/KDE نسخه ۴٫۷ به بعد
- MobileSafari نسخه ۴ به بعد
- مرورگرهای پیش فرض اندروید نسخه ۳ به بعد
- Windows Phone 7
نکته! هیچکدام از نسخه های Internet Explorer در ویندوز XP از SNI پشتیبانی نمی کنند.
آیا استفاده از SNI معایبی هم دارد؟
با این که این افزونه یک راه حل عالی برای محدودیت وبسایت های مربوط به یک IP مشترک است ولی همچنان یک اشکال کوچک دارد که بخش کوچکی از کاربران مرورگرها یا سیستم عامل های قدیمی را تحت تاثیر قرار می دهد.
همانطور که خودتان هم متوجه هستید، افزونه SNI از مرورگرهای و وب سرور های قدیمی پشتیبانی نمی کند. مثلا کاربران ویندوز XP که از Internet Explorer استفاده می کنند یا کاربران موبایل با نسخه اندروید پایین تر از ۳ با SNI سازگاری ندارند. به این صورت که ممکن است handshake یک گواهی پیش فرض را انتخاب کند و منجر به مشکلاتی مثل تضاد اسمی شود.
در کل، اگر وبسایت شما یکی از وبسایت های HTTPS موجود روی یک سرور باشد، کاربری که از مرورگرهای قدیمی برای باز کردن وبسایت شما استفاده می کند به احتمال زیاد با خطای “Your connection is not private” روبرو می شود.
پس، اگر کاربران به سمت مرورگرها و پلتفرم های جدیدتر بروند، این مشکل SNI هم حذف خواهد شد.
نحوه فعال سازی SNI در سی پنل
این افزونه به طور پیش فرض در سی پنل فعال است ولی اگر به هر دلیل، در این زمینه به مشکل خوردید مخصوصاً اگر از سرور اختصاصی یا سرور مجازی برای میزبانی از چند وبسایت استفاده می کنید، بهتر این مورد را به صورت دستی فعال کنید.
- کافیست به بخش WHM بروید و Tweak Settings را باز کنید:
در بخش جستجو، Allow cPanel را وارد کنید و بعد Allow cPanel users to install SSL Hosts را در حال on قرار دهید:
- در نهایت روی Save کلیک کنید تا تغییرات ذخیره شوند.
نحوه فعال سازی SNI در دایرکت ادمین
دایرکت ادمین هم جزو محبوب ترین کنترل پنل ها است که توسط اکثر کاربران ترجیح داده می شود. قبل از فعال سازی SNI اگر در زمینه فعال سازی SSL هم نیاز به راهنمایی داشتید می توانید از مقاله نصب و فعال سازی SSL در دایرکت ادمین کمک بگیرید.
برای فعال سازی SNI در آن کافیست مراحل زیر را دنبال کنید:
- فایل پیکربندی دایرکت ادمین را با ویرایشگر دلخواه خود باز کنید:
vi /usr/local/directadmin/conf/directadmin.conf
- مقدار enable_ssl_sni را از ۰ به ۱ تغییر دهید.
- بعد از اینکه این تغییر را ذخیره کردید، دایرکت ادمین را ری استارت کنید:
service directadmin restart
نحوه فعال سازی SNI در پلسک
پلسک هم مثل سی پنل به طور پیش فرض این قابلیت را دارد ولی برای اطمینان از این موضوع بهتر است مراحل زیر را دنبال کنید:
- از بخش Tools & Settingsروی Server Settings کلیک کنید.
- گزینه SNI Support را جستجو کنید و گزینه زیر را فعال کنید:
Turn on SNI support, which allow using individual SSL/TLS certificates on websites with the same IP address
- بعد، این تغییر را ذخیره کنید.
البته اگر سیستم عامل شما لینوکس است برای فعال سازی SNI می توانید از روش زیر هم استفاده کنید:
- از طریق SSH به سرور وصل شوید.
- فایل پیکربندی را با دستور زیر باز کنید:
vi /etc/psa/psa.conf
- مقدار SNI_SUPPORT را به true تغییر دهید:
SNI_SUPPORT true
- در آخر که این تغییرات را ذخیره کردید، سرویس psa را ری استارت کنید:
service psa restart
حالا که با نحوه فعال سازی افزونه SNI هم آشنا شدید، وقت آن است که دست به کار شوید و با استفاده از قدرت این ابزار، محدودیت های دسترسی به وبسایت خود را از بین ببرید.
جمع بندی
کاربرانی که از هاست اشتراکی استفاده میکنند یا قصد دارند چند وبسایت را روی یک سرور مشترک راهاندازی کنند، پس از فعالسازی گواهینامه SSL با مشکل مواجه میشوند و دلیل آن هم مشترک بودن آدرس IP آنهاست. با استفاده از SNI و ارسال نام دامنه یا میزبان به همراه درخواست اولیه هنگام Handshake، تشخیص مقصد کاربر برای سرور آسانتر میشود.
از اینکه تا انتهای مقاله با ما همراه بودید، سپاسگزاریم. امیدواریم مطالعه این مقاله برای شما مفید بوده باشد.