شما برای مطالعه این مقاله فقط 7 دقیقه وقت نیاز دارید

what-is-sni

تعریف ساده SNI، روش فعالسازی و دلایل استفاده از آن در سرور

4/5 - (2 امتیاز)

فرض کنید قرار است بسته ای را به یک شخص ارسال کنید ولی آدرس گیرنده را تا اسم ساختمان وارد می کنید و خبری از پلاک واحد موردنظر نیست. در این صورت چقد اطمینان دارید که بسته شما به شخص موردنظر می رسد یا نه! دقیقاً همین موضوع برای گواهینامه SSL یا TLS سایت هایی که روی یک سرور با آدرس IP مشترک پیاده سازی شده اند هم صدق می کند. وقتی کاربر روی لینک صفحه وبسایت کلیک می کند، آدرس IP سرور به تنهایی برای نشان دادن که کاربر در حال تلاش برای دسترسی به کدام دامنه است، کافی نیست. اینگونه بود که افزونه SNI وارد عمل شد.

SNI (Server name indication) یکی از افزونه های پرکاربرد برای گواهی SSL یا TLS است که وظیفه حل مشکل اتصال کاربر به وبسایت موردنظر از بین وبسایت های موجود بر روی یک سرور مشترک را بر عهده دارد.

اگر قصد دارید به طور کامل با این افزونه آشنا شوید و نحوه فعال سازی آن را هم یاد بگیرید، ادامه مطلب را از دست ندهید:

 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 را هم رمزگذاری می کند. این کار باعث می شود که اطلاعات مربوط به گواهی درخواستی برای هکرها قابل تشخیص نباشد و سطح امنیت اتصالات بالا برود. ولی تا الان (1402/02/05) فقط فایرفاکس از این افزونه پشتیبانی می کند.

شاید بپرسید که پس اتصالات 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، نسخه 7 به بعد
  • فایرفاکس، نسخه 2 به بعد
  • گوگل کروم، نسخه 6 به بعد
  • کرومیوم ورژن 11 به بعد
  • Microsoft Edge
  • Safari نسخه 2.1 به بعد
  • Opera mobile، نسخه 10.1 به بعد
  • Konqueror/KDE نسخه 4.7 به بعد
  • MobileSafari نسخه 4 به بعد
  • مرورگرهای پیش فرض اندروید نسخه 3 به بعد
  • Windows Phone 7

نکته! هیچکدام از نسخه های Internet Explorer در ویندوز XP از SNI پشتیبانی نمی کنند.

آیا استفاده از SNI معایبی هم دارد؟

با این که این افزونه یک راه حل عالی برای محدودیت وبسایت های مربوط به یک IP مشترک است ولی همچنان یک اشکال کوچک دارد که بخش کوچکی از کاربران مرورگرها یا سیستم عامل های قدیمی را تحت تاثیر قرار می دهد.

همانطور که خودتان هم متوجه هستید، افزونه SNI از مرورگرهای و وب سرور های قدیمی پشتیبانی نمی کند. مثلا کاربران ویندوز XP که از Internet Explorer استفاده می کنند یا کاربران موبایل با نسخه اندروید پایین تر از 3 با SNI سازگاری ندارند. به این صورت که ممکن است handshake یک گواهی پیش فرض را انتخاب کند و منجر به مشکلاتی مثل تضاد اسمی شود.

در کل، اگر وبسایت شما یکی از وبسایت های HTTPS موجود روی یک سرور باشد، کاربری که از مرورگرهای قدیمی برای باز کردن وبسایت شما استفاده می کند به احتمال زیاد با خطای “Your connection is not private” روبرو می شود.

پس، اگر کاربران به سمت مرورگرها و پلتفرم های جدیدتر بروند، این مشکل SNI هم حذف خواهد شد.

نحوه فعال سازی SNI در سی پنل

قبل از شروع فعال سازی، اگر فکر می کنید که در زمینه سی پنل نیاز به اطلاعات بیشتری دارید، مقاله cpanel چیست را از دست ندهید.

این افزونه به طور پیش فرض در سی پنل فعال است ولی اگر به هر دلیل، در این زمینه به مشکل خوردید مخصوصاً اگر از سرور اختصاصی یا سرور مجازی برای میزبانی از چند وبسایت استفاده می کنید، بهتر این مورد را به صورت دستی فعال کنید.

  • کافیست به بخش WHM بروید و Tweak Settings را باز کنید:Tweek setting
  • در بخش جستجو، Allow cPanel را وارد کنید و بعد  Allow cPanel users to install SSL Hosts را در حال on قرار دهید:on کردن sni
  • در نهایت روی Save کلیک کنید تا تغییرات ذخیره شوند.

نحوه فعال سازی SNI در دایرکت ادمین

دایرکت ادمین هم جزو محبوب ترین کنترل پنل ها است که توسط اکثر کاربران ترجیح داده می شود. قبل از فعال سازی SNI اگر در زمینه فعال سازی SSL هم نیاز به راهنمایی داشتید می توانید از مقاله نصب و فعال سازی SSL در دایرکت ادمین کمک بگیرید.

برای فعال سازی SNI در آن کافیست مراحل زیر را دنبال کنید:

  •  فایل پیکربندی دایرکت ادمین را با ویرایشگر دلخواه خود باز کنید:
vi /usr/local/directadmin/conf/directadmin.conf
  • مقدار enable_ssl_sni را از 0 به 1 تغییر دهید.
  • بعد از اینکه این تغییر را ذخیره کردید، دایرکت ادمین را ری استارت کنید:
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 علاوه بر پیام اولیه درخواست، اسم دامنه یا میزبان هم به سرور ارسال شود، دیگر تشخیص مقصد کاربر کار راحتی خواهد بود.

از اینکه تا انتهای مقاله با ما همراه بودید، از شما متشکریم. امیدواریم که مطالعه این مقاله برای شما مفید واقع شده باشد. در صورت داشتن هرگونه سوال، درخواست و نیاز به راهنمایی، می توانید با ثبت نظر خود، با ما وارد ارتباط شوید تا هر چه زودتر به شما پاسخ دهیم.

سوالات متداول:

cPanel و Plesk. ولی محض احتیاط باید مراحلی که در این مقاله گفتیم را هم طی کنید.

مطالب مشابهی که شاید علاقمند باشید

من زهرا پیرجانی دانشجوی رشته نرم افزار هستم. علاقه ای که به یادگیری مطالب جدید دارم باعث شد که انگیزم برای فعالیت در حوزه تولیدمحتوا بیشتر شود. تمام تلاشم این است که با درک کامل موضوع، محتوایی ساده و کامل تهیه کنم که برای همه علاقمندان مفید و کاربردی باشد. یادگیری مطالب جدید و آموزش اونها به بقیه، بهترین کاری هست که می توانم برای رشد خودم و همچنین کمک به رشد علاقمندان به مباحث مورنظر انجام بدم.

دیدگاه های شما

برای دریافت این مقاله لطفا ایمیلتان را وارد کنید

می توانید مقاله را دانلود کنید یا پرینت بگیرید