میزبان کلود
آموزشی

آشنایی با مفهوم SNI (Server Name Indication)

میزبان کلود میزبان کلود
972 بازدید 0 دیدگاه 30 اردیبهشت 1402 زمان مطالعه: 20 دقیقه
/storage/post-covers/1684585915_2023-05-20_17.png
آشنایی با مفهوم SNI (Server Name Indication)

مفهوم Server Name Indication (SNI) به مکانیزمی اشاره دارد که در فرآیند برقراری ارتباط با یک سرور از طریق پروتکل HTTPS مورد استفاده قرار می گیرد. SNI به مرورگر این امکان را می‌دهد تا قبل از برقراری اتصال با سرور، نام سرور مورد نظر را بررسی و درخواست را به سرور صحیح ارسال کند.

به کمک این تکنولوژی است که می‌توان بیش از یک نام دامنه (domain) را در یک آدرس IP مشترک استفاده کرد، بدون این که مشکلی در برقراری ارتباط با سرور و اعتبارسنجی گواهینامه‌های SSL/TLS به وجود آید.

با استفاده از SNI، وبسایت‌هایی که از یک آدرس IP مشترک استفاده می‌کنند، می‌توانند همچنان برای ارتقاء امنیت از گواهینامه‌های SSL/TLS در ارتباطات با کاربران خود استفاده کنند. این بدان معناست که برای هر نام دامنه می‌توان یک گواهینامه جداگانه و مجزا تنظیم کرد، که امکان اعتبارسنجی دامنه و ارتباط امن سرور با کاربر را فراهم می‌کند.

این امر برای وبسایت‌هایی که بیش از یک نام دامنه دارند یا ارائه دهندگان سرویس های هاستینگ اشتراکی، کاربرد بسیاری دارد. بنابراین به طور کلی، SNI نقش مهمی در افزایش امنیت و دسترسی پذیری وبسایت‌ها ایفا می کند.

 

فرآیندهای پشت پرده SNI

توپولوژی SNI (Server Name Indication) در واقع به شکل و نحوه برقراری ارتباط بین مرورگر و سرور اشاره دارد.

معمولاً یک وب سرور مسئول رسیدگی به درخواست های چندین Hostname یا دامنه بوده که هر کدام از آنها دارای یک گواهینامه SSL مختص به خود است.

مشکل اینجاست که تمام این دامنه های متصل به وب سرور، از یک آدرس IP یکسان استفاده می کنند. البته این موضوع در شرایط برقراری ارتباط بر بستر HTTP مشکل زا نیست، چراکه به محض ساخته شدن اتصال TCP، کلاینت مشخص می کند که قصد ارتباط با کدام وبسایت را دارد.

در نتیجه ممکن است سرور، گواهینامه SSL را برای یک هاست نیم اشتباه تولید کند. در این شرایط اگر نام موجود در گواهینامه SSL با نام مورد نظر کلاینت همخوانی نداشته باشد، مرورگر ارور برگرداننده و اتصال را با پایان خواهد رساند.

اما در صورت استفاده از SNI، مرورگر قبل از برقراری اتصال، ابتدا "نام سرور مورد نظر" را درخواست می‌دهد و در ادامه، برقراری اتصال با سرور صورت می‌گیرد.

یعنی به عبارتی یک "نام دامنه" به فرآیند Handshake TLS اضافه می کند.

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

server name indication

توضیح توپولوژی SNI در قالب یک مثال

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

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

 

در سناریوی ما نیز، اکثر وب سرورها شبیه به این ساختمان های مسکونی هستند نه یک خانه مستقل!

پس آدرس آی پی به تنهایی نمی تواند مشخص کند که کاربر به دنبال کدام دامنه است. در نتیجه ممکن است همانند آن محموله، بسته های داده ای (Data Packets) نیز به مقصد صحیح نرسند.

پشتیبانی از SNI

از لحاظ پشتیبانی نیز SNI از مرورگرها و ابزارهای زیر پشتیبانی می کند:

  • مرورگر پیش فرض گوشی‌های اندروید
  • مرورگر پیش فرض تبلت‌های اندروید
  • مرورگر وب بلک‌بری 10
  • Google Chrome - شروع از نسخه 6.0
  • Internet Explorer - شروع از نسخه 7 (امکان استفاده از SNI در ویندوز XP وجود ندارد)
  • Konqueror/KDE - شروع از نسخه 4.7
  • Mozilla Firefox - شروع از نسخه 2.0
  • OpenSSL - شروع از نسخه 0.9.8f
  • Opera - شروع از نسخه 8.0 (TLS 1.1 باید فعال شده باشد)
  • Safari

پشتیبانی از SNI (سرورها)

  • Apache - شروع از نسخه 2.2.12
  • Apache Tomcat - شروع از نسخه 9
  • IBM HTTP Server - شروع از نسخه 9.0.0
  • Jetty - شروع از نسخه 9.3.0
  • Microsoft Internet Information Services (IIS) - شروع از IIS 8
  • ngix - شروع از نسخه 0.5.23

کتابخانه‌ها

  • Erlang - شروع از نسخه r17
  • Java - شروع از نسخه 1.7
  • Perl - شروع از نسخه 1.56
  • PHP - شروع از نسخه 5.6
  • Python - شروع از نسخه 2.7.9rc1 یا 3.2alpha4
  • QT - شروع از نسخه 4.8
  • Ruby - شروع از نسخه 2.0

منظور از Encrypted SNI یا ESNI چیست؟

ESNI در اصل به اکستنشن SNI اضافه شده و بخش Hello کلاینت را رمزنگاری می کند. این موضوع باعث می شود از هرگونه تداخل افراد غیر مجاز در میان ارتباط بین کلاینت و سرور جلوگیری شده و اطلاعات درخواستی کلاینت محافظت شود.

 

SNI چیست

 

منظور از Server Name چیست؟

منظور از سرور نیم همان نام میزبان است که شبیه به نام کامپیوترهاست. با این تفاوت که نام سرورها معمولاً برای کاربر نهایی قابل رویت نیست؛ مگر اینکه سرور تنها یک دامنه را میزبانی کرده و هر دو همان نام دامنه باشند.

تفاوت SNI با SAN

SNI و گواهی SSL/TLS با SAN (Multi-Domain) دو مفهوم کاملاً متفاوت هستند. SNI (Server Name Indication) یک افزونه در پروتکل SSL/TLS است که به سرورها این امکان را می‌دهد تا یک گواهی SSL/TLS بر اساس نام دامنه درخواست کننده تولید کنند.

به عبارت دیگر، با استفاده از SNI، یک سرور می‌تواند برای هر دامنه مجزا یک گواهی SSL/TLS جداگانه ایجاد کند. اما SAN (Subject Alternative Name) یک نوع خاص از گواهی SSL/TLS است که برای چندین دامنه یا نام مستعار (Alias) می‌تواند مورد استفاده قرار گیرد. در واقع، یک گواهی SAN قادر است به صورت همزمان برای چندین دامنه مختلف معتبر باشد.

فرآیند SNI در شبکه توزیع محتوا

وقتی از CDN استفاده می‌شود و SNI (Server Name Indication) فعال است، فرآیند زیر برای تحویل محتوا طی خواهد شد:

  1. کاربر درخواست مشاهده محتوا را ارسال کرده و CDN را به عنوان میزبان مقصد تعیین می‌کند.
  2. CDN درخواست را دریافت کرده و در صورت نیاز به ارجاع سمت سرور اصلی و در صورت نیاز به SNI، نام سرور مقصد درخواستی را به عنوان بخشی از handshake به سمت کاربر برمی گرداند.
  3. سرور CDN با استفاده از SNI، نام سرور مقصد را تشخیص می‌دهد.
  4. سپس سرور CDN بر اساس نام سرور مقصد (سرور Origin)، درخواست را به سرور منبع هدایت می‌کند.
  5. سرور منبع درخواست را دریافت کرده و محتوای مورد نظر را برای CDN ارسال می‌کند.
  6. CDN محتوا را دریافت و آن را به کاربر ارسال می‌کند.

در این فرآیند نیز، از SNI کمک گرفته می شود تا CDN بتواند درخواست‌ها را به سرور منبع مناسب هدایت کند و محتوا را به کاربران تحویل دهد.

با استفاده از SNI، CDN قادر است به صورت همزمان اتصالات چندین دامنه SSL/TLS با سرورهای منبع مختلف را به درستی برقرار کرده و محتوا را به صورت موازی و بهینه به کاربر نهایی تحویل دهد.

جمع بندی

Server Name Indication (SNI) یک فناوری در حوزه امنیت و شبکه است که امکان شناسایی نام سرور در مراحل ارتباط از طریق SSL/TLS را فراهم می‌کند. با استفاده از SNI، می‌توان چندین دامنه با گواهی SSL/TLS را بر روی یک آدرس IP واحد میزبانی کرد. این به سرورها اجازه می‌دهد تا درخواست‌ها را به صورت صحیح به سرورهای درست هدایت و محتوا را به درستی به کاربر تحویل دهند.

استفاده از SNI در CDN (شبکه توزیع محتوا) نیز بسیار رایج است. با استفاده از SNI، CDN قادر است درخواست‌ها را به سرورهای منبع مرتبط ارسال کند و محتوا را به کاربران تحویل دهد. این بهینه‌سازی در ارتباط بین CDN و سرورهای منبع، سرعت لود محتوا را افزایش خواهد داد.

بنابراین با استفاده از SNI، می‌توان چندین دامنه SSL/TLS را بر روی یک IP واحد میزبانی کرد و بدون نیاز به تخصیص IP جداگانه برای هر دامنه، یک ارتباط امن فراهم کرد. این باعث می‌شود بتوان از مزایای امنیتی SSL/TLS برای تمامی دامنه‌ها استفاده و مصرف آدرس‌های IP را بهینه کرد.

پیشنهاد ویژه

CDN ابری میزبان کلود

میزبان کلود

سرعت در بارگذاری و تحویل محتوای سایت

میزبان کلود

سرعت در بارگذاری و تحویل محتوای سایت

میزبان کلود

سرعت در بارگذاری و تحویل محتوای سایت

میزبان کلود

سرعت در بارگذاری و تحویل محتوای سایت

مشاهده پلانها
میزبان کلود میزبان کلود
میزبان کلود
برچسب‌ها :
میزبان کلود
نویسنده مطلب میزبان کلود

ارائه دهنده خدمات زیرساخت یکپارچه ابری

آشنایی با مفهوم SNI (Server Name Indication) 0 دیدگاه