SNI چیست؟

SNI چیست؟
توسط

SNI تا حدودی مانند ارسال یک بسته به یک ساختمان آپارتمان به جای یک خانه است. وقتی چیزی را به خانه شخصی پست می کنید، آدرس خیابان به تنهایی کافی است تا بسته را به شخص مناسب برسانید. اما وقتی بسته ای به یک آپارتمان می رود، علاوه بر آدرس خیابان، به شماره آپارتمان نیز نیاز دارد. در غیر این صورت، بسته ممکن است به شخص مناسبی نرسد یا اصلاً تحویل داده نشود.

بسیاری از وب سرورها بیشتر شبیه ساختمان های آپارتمانی هستند تا خانه ها: آنها میزبان چندین نام دامنه هستند و بنابراین آدرس IP به تنهایی برای نشان دادن اینکه کاربر در تلاش است به کدام دامنه دسترسی پیدا کند کافی نیست. این می‌تواند منجر به نشان دادن گواهینامه اشتباه SSL توسط سرور شود که از اتصال HTTPS جلوگیری می‌کند یا آن را خاتمه می‌دهد - درست مانند اینکه بسته‌ای را نمی‌توان به آدرسی تحویل داد اگر شخص صحیح آن را امضا نکند.

وقتی چندین وب‌سایت روی یک سرور میزبانی می‌شوند و یک آدرس IP واحد را به اشتراک می‌گذارند، و هر وب‌سایت گواهی SSL مخصوص به خود را دارد، سرور ممکن است نداند زمانی که دستگاه مشتری سعی می‌کند به طور ایمن به یکی از وب‌سایت‌ها متصل شود، کدام گواهینامه SSL را نشان دهد. این به این دلیل است که دست دادن SSL/TLS قبل از اینکه دستگاه مشتری از طریق HTTP نشان دهد که به کدام وب سایت متصل است، رخ می دهد.

sni 1

نشانگر نام سرور (SNI) برای حل این مشکل طراحی شده است. SNI افزونه ای برای پروتکل TLS (که قبلاً پروتکل SSL نامیده می شد) است که در HTTPS استفاده می شود. در فرآیند دست دادن TLS/SSL گنجانده شده است تا اطمینان حاصل شود که دستگاه های سرویس گیرنده می توانند گواهی SSL صحیح را برای وب سایتی که می خواهند به آن دسترسی پیدا کنند، ببینند. برنامه افزودنی امکان تعیین نام میزبان یا نام دامنه وب سایت را در حین دست دادن TLS به جای زمانی که اتصال HTTP بعد از دست دادن باز می شود، تعیین می کند.

SNI از آنچه به عنوان "common name mismatch error" شناخته می شود جلوگیری می کند: هنگامی که یک دستگاه مشتری (کاربر) به آدرس IP مناسب برای یک وب سایت می رسد، اما نام موجود در گواهی SSL با نام وب سایت مطابقت ندارد. اغلب این نوع خطا منجر به پیام خطای "اتصال شما خصوصی نیست" در مرورگر کاربر می شود.

SNI به عنوان یک افزونه به TLS/SSL در سال ۲۰۰۳ اضافه شد. در اصل بخشی از پروتکل نبود. تقریباً همه مرورگرها، سیستم عامل ها و سرورهای وب از آن پشتیبانی می کنند، به استثنای برخی از قدیمی ترین مرورگرها و سیستم عامل ها که هنوز در حال استفاده هستند.

sni 2

پسوند TLS SNI چه کاری انجام می دهد؟

اغلب یک وب سرور مسئول چندین نام میزبان – یا نام دامنه (که نام‌های قابل خواندن وب‌سایت‌ها برای انسان هستند) است. اگر وب‌سایت‌ها از HTTPS استفاده کنند، هر نام میزبان گواهی SSL خاص خود را خواهد داشت.

مشکل این است که همه این نام هاست روی یک سرور در یک آدرس IP هستند. این مشکلی در مورد HTTP نیست، زیرا به محض باز شدن یک اتصال TCP، کلاینت نشان می دهد که در یک درخواست HTTP به کدام وب سایت می خواهد دسترسی پیدا کند.

اما در HTTPS، قبل از شروع مکالمه HTTP، ابتدا یک دست دادن TLS انجام می‌شود (HTTPS همچنان از HTTP استفاده می‌کند – فقط پیام‌های HTTP را رمزگذاری می‌کند). بنابراین، بدون SNI، هیچ راهی برای مشتری وجود ندارد که به سرور نشان دهد که با کدام نام میزبان صحبت می کند. در نتیجه، سرور ممکن است گواهی SSL را برای نام میزبان اشتباه تولید کند. اگر نام روی گواهی SSL با نامی که کلاینت می‌خواهد به آن دسترسی پیدا کند مطابقت نداشته باشد، مرورگر سرویس گیرنده خطایی را برمی‌گرداند و معمولاً اتصال را قطع می‌کند.

SNI نام دامنه را به فرآیند دست دادن TLS اضافه می کند، به طوری که فرآیند TLS به نام دامنه مناسب می رسد و گواهی SSL صحیح را دریافت می کند، و بقیه دست دادن TLS را قادر می سازد به طور معمول ادامه یابد.

به طور خاص، SNI نام میزبان را در پیام Client Hello یا اولین مرحله از دست دادن TLS شامل می‌شود.


پست های توصیه شده