SNI افزونهای بر پروتکل رمزنگاری TLS است که با استفاده از آن دستگاه کاربر میتواند نام دامنهای که به دنبال آن است را مشخص نماید تا به این ترتیب از خطاهای معمول عدم تطابق مربوط به نام جلوگیری شود. برای درک بهتر تفاوت ارسال یک بسته به یک خانه ویلایی و یک مجتمع مسکونی را در نظر بگیرید. در حالت اول دانستن پلاک ساختمان جهت تحویل بسته کفایت میکند، اما در حالت دوم علاوه بر پلاک برج نیاز به دانستن شماره واحد نیز هستو در غیر این صورت رسیدن بسته به مقصد میسر نمیباشد.
بسیاری از وب سرورها بیشتر به یک برج شباهت دارند تا یک خانه ویلایی. آنها چندین نام دامنه را میزبانی میکنند و به همین دلیل دانستن IP به تنهایی نمیتواند دامنهای که کاربر به دنبال دسترسی به آن است را تعیین نماید. این مورد میتواند باعث نشان دادن گواهینامه SSL اشتباه توسط سرور و در نتیجه آن عدم ایجاد و یا از بین رفتن اتصال HTTPS شود.
در واقع زمانیکه چندین وبسایت بر روی یک سرور میزبانی میشوندو یک IP را استفاده میکنند و هر سایت نیز گواهینامه SSL مختص به خود را دارد، امکان دارد سرور در زمانیکه کاربر به دنبال ایجاد اتصال امن با یکی از وبسایتها است، در تشخیص اینکه کدام SSL را نمایش دهد خطا داشته باشد. در این شرایط SNI یا نمایانگر نام سرور راه حل انی موضوع میباشد.
دلیل استفاده از SNI
SNI اکستنشنی بر پروتکل TLS یا همان SSL سابق است که در HTTPS استفاده میشود. این افزونه در فرآیند TLS/SSL handshake به منظور کسب اطمینان از دیدن SSL صحیح(مختص به سایت مورد نظر) توسط سیستم کاربر استفاده میشود. SNI امکان مشخص کردن هاست نیم یا نام دامنه وبسایت را در طی فرایند TLS handshake فراهم میآورد به جای اینکه اینکار را بعد از آن و بعد از باز شدن اتصال HTTP انجام دهد.
به بیان ساده تر، SNI امکان ایجاد یک اتصال امن با آدرس https://www.A.com را برای کاربر فراهم میاورد، حتی اگر وبسایت در حال میزبانی در همان محل و همان IP باشد که https://www.B.com ،https://www.C.com و https://www.D.io باشند.
SNI از بروز خطای “common mismatch error” جلوگیری مینماید. این خطا زمانی اتفاق میافتد که یک کاربر به یک IP برای دسترسی به یک وبسایت متصل میشود، ولی نام SSL با نام وبسایت همخوانی ندارد. در غالب مواقع این خطا به نمایش پیام “Your connection is not private” در مرورگر کاربر منجر میشود.
SNI در ابتدا جزیی از پروتکل TLS یا همان SSL نبود و در سال 2003 به عنوان یک افزونه به آن اضافه گردید. در حال حاضر غالب سیستمعاملها، مرورگرها و وب سرورها به استثنای سیستمعاملها و مرورگرهای خیلی قدیمی این افزونه را پشتیبانی مینمایند. در صورت عدم پشتیبانی مرورگر، کاربر به سایت دسترسی نخواهد یافت و با پیامی همچون “Your connection is not private” رو به رو خواهد شد.