
تکنولوژی SNI چیست و چه کاربردهایی دارد؟
خیلی از کاربران وقتی از ابزارهای تغییر آیپی استفاده میکنند، با عبارت SNI Spoofing یا جعل SNI آشنا میشوند؛ اما کمتر کسی میداند اصل این فناوری دقیقا چه کاری انجام میدهد و چرا برای دور زدن محدودیتها به کار میرود. SNI در واقع یک قرارداد ساده اما حیاتی در دل پروتکل HTTPS است که تعیین […]
تکنولوژی SNI چیست و چه کاربردهایی دارد؟
خیلی از کاربران وقتی از ابزارهای تغییر آیپی استفاده میکنند، با عبارت SNI Spoofing یا جعل SNI آشنا میشوند؛ اما کمتر کسی میداند اصل این فناوری دقیقا چه کاری انجام میدهد و چرا برای دور زدن محدودیتها به کار میرود. SNI در واقع یک قرارداد ساده اما حیاتی در دل پروتکل HTTPS است که تعیین میکند مرورگر شما به کدام سرور متصل شود. اگر میخواهید بدانید SNI چیست و روش SNI Spoofing چگونه کار میکند، تا آخر این مطلب با مجله پارس هاست با ما همراه باشید.
تکنولوژی SNI چیست؟
SNI مخفف عبارت Server Name Indication به معنای «نشانگر نام سرور» است و یک افزونه در فناوری TLS به حساب میآید. اگر نمیدانید TLS چیست، بهتر است اول با آن آشنا شوید. وقتی چندین سایت روی یک هاست اشتراکی قرار دارند، همه آنها یک آیپی مشترک دارند. مشکل اینجا شروع میشود که مرورگر کاربر نمیداند کدام سایت را از بین این چند سایت به او نشان دهد. SNI دقیقا همین مشکل را حل میکند. این فناوری به سرور میگوید کاربر دنبال کدام سایت میگردد، بدون اینکه امنیت ارتباط از بین برود.
نکته: «SNI یک افزونه در فناوری TLS است. »
علاوه بر این واقعیتهایی که باید درباره SNI بدانید شامل موارد زیر میشوند:
- گواهینامه SSL و نسخههای جدید TLS برای محافظت از ارتباطات اینترنتی و رمزنگاری دادهها استفاده میشوند.
- سایتهایی که گواهینامه امنیتی ندارند، لزوما به SNI برای انتخاب گواهی نیاز ندارند.
- در هاست اشتراکی، دهها یا صدها سایت روی یک سرور قرار میگیرند و ممکن است همه آنها از یک آدرس IP مشترک استفاده کنند.
- وقتی این سایتها بخواهند از گواهی TLS استفاده کنند، سرور بدون SNI نمیفهمد کدام گواهی را به کدام سایت متصل کند.
برای حفظ امنیت ارتباط کاربران با وبسایت، میتوانید از خدمات خرید SSL پارس هاست استفاده کنید و گواهی معتبر برای دامنه خود تهیه کنید.
شرکت CloudFlare این فناوری را با مثال آپارتمان توضیح میدهد:
“SNI is somewhat like mailing a package to an apartment building instead of to a house. When mailing something to someone’s house, the street address” alone is enough to get the package to the right person. But when a package goes to an apartment building, it needs the apartment number in addition to the street address; otherwise, the package might not go to the right person or might not be delivered at all.” «SNI شبیه ارسال بسته پستی به یک ساختمان آپارتمانی است تا یک خانه ویلایی. وقتی بستهای را برای یک خانه میفرستید، فقط آدرس خیابان برای رساندن بسته به فرد درست کافی است؛ اما وقتی بسته به یک ساختمان آپارتمانی میرود، علاوه بر آدرس خیابان به شماره واحد هم نیاز دارد. در غیر این صورت، ممکن است بسته به فرد اشتباه برسد یا اصلاً تحویل داده نشود.» منبع: CloudFlare
تاریخچه نشانگر نام سرور (SNI) از کجا شروع شد؟
مشکل اصلی که منجر به ساخته شدن SNI شد، محدودیت تعداد آدرسهای IP نسخه چهار (IPv4) بود. وقتی آدرسهای IP کمیاب شدند، ارائهدهندگان هاست چارهای نداشتند جز اینکه صدها سایت را روی یک سرور و با یک آی پی مشترک قرار دهند. اما همین کار ساده، یک مشکل فنی بزرگ برای سایتهای امن ایجاد کرد؛ با این حال جدول زمانی SNI را میتوانیم به صورت زیر خلاصه کنیم:
| سال | رویداد | توضیح کوتاه |
| ۲۰۰۳ | انتشار RFC 3546 | گروه مهندسی اینترنت (IETF) اولین استاندارد SNI را منتشر کرد. |
| ۲۰۰۴ | ساخت اولین پچ | تیم EdelKeyProject وصله نرمافزاری برای OpenSSL نوشت. |
| ۲۰۰۶ | استاندارد جدید | RFC 4366 جایگزین نسخه قبلی شد و بهبودهایی ایجاد کرد. |
| ۲۰۰۷ | پشتیبانی رسمی | نسخه ۰.۹.۸f OpenSSL به صورت رسمی از SNI پشتیبانی کرد. |
| ۲۰۱۱ | استاندارد فعلی | RFC 6066 منتشر شد و تا امروز معتبر است |
| ۲۰۱۲ | پشتیبانی مایکروسافت | ویندوز سرور ۲۰۱۲ و IIS نسخه ۸ از SNI پشتیبانی کردند. |
| ۲۰۱۸ | معرفی ESNI | CloudFlare و Firefox نسخه رمزنگاری شده SNI را معرفی کردند. |
SNI چه ارتباطی با هاست و سرور دارد؟
برای درک بهتر اینکه SNI چیست، ابتدا باید تفاوت هاست و سرور را بدانیم. سرور یک رایانه قدرتمند است که منابع پردازشی، حافظه و فضای ذخیرهسازی را در اختیار سرویسها و وبسایتها قرار میدهد؛ در حالی که هاست بخشی از همین منابع است که برای میزبانی یک یا چند وبسایت اختصاص داده میشود. به زبان ساده، سرور را میتوانیم یک ساختمان و هاست را یکی از واحدهای آن در نظر بگیریم.
در سرویسهای میزبانی اشتراکی، تعداد زیادی وبسایت روی یک سرور قرار میگیرند و ممکن است چندین سایت از یک آدرس IP مشترک استفاده کنند. این موضوع باعث میشود فناوریهایی مانند SNI اهمیت زیادی پیدا کنند. وقتی چند سایت روی یک IP قرار دارند و هرکدام گواهی SSL/TLS مخصوص خود را دارند، سرور باید بداند درخواست کاربر مربوط به کدام دامنه است. SNI این اطلاعات را در ابتدای برقراری ارتباط TLS در اختیار سرور قرار میدهد.
به همین دلیل هنگام انتخاب هاست، فقط فضای ذخیرهسازی یا میزان ترافیک اهمیت ندارد؛ پشتیبانی از TLS، گواهی SSL، وبسرور مناسب و قابلیت میزبانی چند دامنه نیز مهم است. برای مثال، یک فروشگاه اینترنتی که با ووکامرس فعالیت میکند، بهتر است بهترین هاست برای سایت فروشگاهی را بر اساس عواملی مانند سرعت، پایداری، امنیت، منابع CPU و RAM و پشتیبانی از HTTPS انتخاب کند.
در چنین شرایطی، انتخاب سرویس مناسب میتواند روی تجربه کاربر و حتی تاثیر هاست بر سرعت سایت اثرگذار باشد. البته SNI بهتنهایی باعث افزایش سرعت سایت نمیشود؛ بلکه امکان استفاده بهینهتر از یک سرور و یک IP برای چندین سایت امن را فراهم میکند.
بنابراین اگر قصد خرید هاست دارید، بهتر است در کنار منابع سختافزاری، از فعال بودن HTTPS و پشتیبانی مناسب سرور از TLS و SNI نیز مطمئن شوید. در سرویسهای میزبانی مدرن، این قابلیتها معمولا به صورت پیشفرض فعال هستند.
شیوه کار SNI چگونه است؟
در توضیحات فوق با اینکه SNI چیست و تاریخچه آن آشنا شدیم، حالا بیایید ببینیم وقتی شما یک سایت امن را در مرورگر باز میکنید، SNI دقیقا چه نقشی دارد و چه اتفاقی پشت صحنه میافتد. مراحل کار SNI از ابتدا تا انتها را میتوانیم اینگونه توصیف کنیم:

مرحله اول – تایپ آدرس توسط کاربر
شما آدرس یک سایت امن، مانند www.example.com را در مرورگر وارد میکنید و کلید Enter را میزنید. مرورگر متوجه میشود که سایت از پروتکل HTTPS استفاده میکند و برای برقراری یک ارتباط امن، فرایند TLS Handshake را آغاز میکند.
مرحله دوم – شروع گفتگوی امن یا هندشیک TLS
مرورگر یک پیام به نام ClientHello به سرور ارسال میکند. این پیام را میتوانیم شروع فرایند هندشیک TLS بدانیم؛ یعنی مجموعهای از پیامها که برای ایجاد ارتباط امن میان مرورگر و سرور ردوبدل میشوند.
در ClientHello، اطلاعات مختلفی درباره ارتباط موردنظر ارسال میشود و در حالت استفاده از SNI، نام دامنه مقصد نیز در بخش Server Name Indication قرار میگیرد. برای آشنایی بیشتر با هندشیک، بهتر است مطلب ما در رابطه با اینکه «هندشیک چیست» را مطالعه کنید.
مرحله سوم – خواندن SNI توسط سرور
سرور پیام ClientHello را دریافت میکند. اگر چند وبسایت روی یک آدرس IP قرار داشته باشند، سرور با بررسی مقدار SNI متوجه میشود درخواست مربوط به کدام نام دامنه است.
به این ترتیب، سرور میتواند درخواست example.com را از درخواست another-site.com تشخیص دهد؛ حتی اگر هر دو سایت روی یک سرور و یک IP میزبانی شوند.
مرحله چهارم – انتخاب گواهی درست
پس از مشخص شدن نام دامنه، سرور میتواند گواهی SSL/TLS مناسب را برای همان سایت انتخاب کند و فرایند برقراری ارتباط امن را ادامه دهد. گواهی دیجیتال را میتوانیم مانند یک کارت شناسایی دیجیتال در نظر بگیریم که به مرورگر کمک میکند هویت سرور و اعتبار دامنه را بررسی کند.
مرحله پنجم – تایید گواهی توسط مرورگر
در ادامه، مرورگر گواهی دریافتشده را بررسی میکند. اگر گواهی معتبر باشد، نام دامنه با اطلاعات موجود در گواهی مطابقت داشته باشد و سایر بررسیهای امنیتی نیز موفقیتآمیز باشند، فرایند TLS Handshake تکمیل شده و ارتباط HTTPS برقرار میشود.
در نتیجه، کاربر میتواند سایت را بدون دریافت هشدار مربوط به گواهی نامعتبر مشاهده کند. برای آشنایی بیشتر با فناوریهای امنیتی وب، مطالعه مطلب تفاوت tls و ssl نیز مفید است.
مقایسه کار SNI در سایت با آیپی اختصاصی در مقابل هاست اشتراکی
برای درک بهتر شیوه کار و چیستی SNI، مقایسه کار SNI در سایت با آیپی اختصاصی در مقابل هاست اشتراکی میتواند جالب توجه باشد:
| وضعیت | آیا به SNI نیاز دارد؟ | دلیل |
| سایت روی آیپی اختصاصی | خیر | سرور فقط یک سایت دارد و میداند کدام گواهی را بفرستد |
| سایت روی هاست اشتراکی با HTTP | خیر | سایت امن نیست و اصلا گواهی ندارد |
| سایت روی هاست اشتراکی با HTTPS | بله | سرور بدون SNI نمیداند کدام گواهی را انتخاب کند |
جالب است بدانید که در روش جعل SNI (SNI Spoofing) از همین مکانیزم استفاده میشود. ابزارهای تغییر آیپی و فیلترشکنها، نام سایت مقصد را داخل SNI به شکل دیگری نشان میدهند تا سانسورچیها نتوانند بفهمند کاربر به کدام سایت متصل شده است. در ادامه این روش را بهتر خواهیم شناخت.
SNI Spoofing چیست؟
SNI Spoofing یا جعل SNI به تکنیکهایی گفته میشود که در آن مقدار قابل مشاهده یا مورد استفاده برای نام سرور در فرایند TLS به شکلی متفاوت از مقصد واقعی مدیریت میشود. این اصطلاح بیشتر در بحث دور زدن محدودیتهای شبکه و فیلترینگ مطرح میشود.
در واقع شیوه کار SNI Spoofing را میتوانیم اینگونه بیان کنیم:
- نام مجاز (مثل google.com یا auth.vercel.com) جایگزین نام واقعی سایت ممنوع میشود.
- سیستم فیلترینگ فریب میخورد و اجازه اتصال را صادر میکند.
- سرور اصلی نام واقعی را میخواند و کاربر را به سایت مقصد وصل میکند.
همچنین جالب است این واقعیتها را در مورد SNI Spoofing بدانید:
- این روش فقط نام سایت را پنهان میکند، نه کل ترافیک را
- روشهای مختلفی برای اجرای آن وجود دارد (تزریق بسته جعلی، تکهتکه کردن، TTL کم)
- با پروتکل HTTP/2 و TLS 1.3 هنوز سازگاری کامل ندارد.
- روز به روز با هوشمندتر شدن فیلترها، کارایی آن کمتر میشود.
تحقیقات دانشگاه روهر آلمان نشان میدهد که از میان ۳۸ تکنیک مختلف برای دور زدن فیلترینگ، روش «تکهتکه کردن پیام در لایه TLS» که یکی از روشهای محبوب SNI Spoofing است موفقترین روش بوده و توانسته در برابر سیستم فیلترینگ چین که پیشرفتهترین فیلتر جهان را دارد، بیش از ۸۰ درصد موفقیت داشته باشد. جالب اینجاست طبق همین آمار این روش در برابر فیلترینگ ایران (که سادهتر از چین است) تقریبا ۹۵ درصد موفق عمل میکند.
ابزارهای SNI Spoofing
لیست SNI Spoofing از ابزارهای معروف به صورت موارد زیر هستند:
- SNISPF: ابزار خط فرمان با پایتون برای ویندوز، مک و لینوکس
- SNI-Spoofing-Go: نسخه گو با عملکرد بالا برای لینوکس و ویندوز
- FakeSNI: نسخه اختصاصی لینوکس برای سرورهای حرفهای
- RM SNI Spoofer: ابزار گرافیکی برای کاربران عادی ویندوز
همچنین روش SNI Spoofing در اندروید با اپلیکیشنهایی مثل V2RayNG و Nekobox امکانپذیر است. کاربر فقط کافی است یک کانفیگ با تنظیمات جعل SNI اضافه کند.
ویژگیهای SNI چیست؟
حالا که با تاریخچه و شیوه کار SNI آشنا شدید، نوبت به این میرسد که ببینیم این فناوری چه ویژگیهایی دارد و چرا در زیرساخت وب اهمیت زیادی پیدا کرده است. در این بخش، مهمترین ویژگیهای نشانگر نام سرور (Server Name Indication) را بررسی میکنیم.
۱- صرفهجویی در آدرسهای IP
یکی از مهمترین مزایای SNI این است که ارائهدهندگان هاست میتوانند تعداد زیادی سایت HTTPS را روی یک آدرس IP مشترک میزبانی کنند. این قابلیت باعث میشود برای هر دامنه الزاما به یک IP اختصاصی نیاز نباشد و استفاده از منابع سرور به شکل بهینهتری انجام شود. ip اختصاصی چیست؟ در مقاله مربوطه با این مفهوم به خوبی آشنا شوید.
این ویژگی بهخصوص در هاست اشتراکی اهمیت زیادی دارد؛ زیرا ممکن است دهها یا حتی صدها وبسایت روی یک سرور و یک IP قرار گرفته باشند.
۲- گواهی جداگانه برای هر سایت
با استفاده از SNI، هر سایت میتواند گواهی SSL/TLS مخصوص دامنه خود را داشته باشد، حتی اگر چندین سایت روی یک IP مشترک میزبانی شوند.
برای مثال، اگر سه دامنه روی یک سرور قرار داشته باشند، سرور میتواند بر اساس نام دامنه ارسالشده در SNI، گواهی SSL مناسب را برای هر سایت انتخاب کند.
البته باید توجه داشت که SNI خودش گواهی امنیتی ایجاد نمیکند؛ بلکه به سرور کمک میکند در زمان برقراری ارتباط TLS، گواهی مناسب را انتخاب کند.
۳- مدیریت آسان گواهیها
پشتیبانی از SNI در وبسرورهایی مانند Nginx و Apache امکان میزبانی چندین دامنه امن روی یک IP را سادهتر کرده است.
در نتیجه مدیر سرور میتواند برای هر دامنه، تنظیمات و گواهی SSL/TLS مربوط به همان سایت را مدیریت کند، بدون اینکه برای هر سایت الزاما یک IP اختصاصی تهیه شود.
این موضوع در سرویسهای هاست اشتراکی، هاست ابری و سرورهای مجازی اهمیت زیادی دارد. اگر به منابع بیشتری برای اجرای پروژههای خود نیاز دارید، خرید سرور مجازی از خدمات پارس هاست میتواند سرویس بسیار خوبی برای میزبانی وبسایتها و سرویسهای آنلاین شما باشد.
۴- حذف هشدارهای گواهی برای کاربران
یکی از کاربردهای اصلی SNI این است که سرور میتواند متوجه شود کاربر درخواست کدام دامنه را ارسال کرده و گواهی مربوط به همان دامنه را ارائه دهد.
اگر گواهی اشتباه برای دامنه ارسال شود، مرورگر ممکن است با خطا یا هشدار مربوط به عدم تطابق نام دامنه و گواهی مواجه شود. SNI با فراهم کردن اطلاعات لازم برای انتخاب گواهی صحیح، به جلوگیری از این مشکل در میزبانی چندسایتی کمک میکند.
نکته: SNI بهتنهایی باعث معتبر شدن گواهی نمیشود. اعتبار گواهی، تطابق دامنه، تاریخ انقضا و سایر الزامات امنیتی نیز باید به صورت جداگانه بررسی شوند.
۵- سازگاری با مرورگرهای امروزی
SNI امروزه توسط تقریبا تمام مرورگرها و سیستمعاملهای مدرن پشتیبانی میشود. مرورگرهایی مانند Chrome، Firefox، Safari و Edge و همچنین بسیاری از کلاینتهای موبایل و نرمافزارهای مبتنی بر TLS از SNI پشتیبانی میکنند.
بنابراین، در سرویسهای مدرن میزبانی وب معمولا نیازی نیست کاربر برای استفاده از سایتهای با پروتکل HTTPS تنظیمات خاصی انجام دهد.
۶- هماهنگی با جدیدترین استانداردهای امنیتی
SNI با نسخههای تازه پروتکلهای امن مثل TLS 1.3 و HTTP/2 هماهنگ است. این یعنی سایت شما از بهروزترین روشهای امنیتی استفاده میکند.
۷- کاربرد فراتر از وبسایت
SNI فقط برای سایتهای اینترنتی نیست. سرویسهای ایمیل، اپلیکیشنهای پیامرسان و حتی بعضی بازیهای آنلاین هم از این فناوری استفاده میکنند.
دلایل استفاده از SNI چیست؟
آدرسهای IP روی اینترنت مثل منابع طبیعی محدود هستند. بدون SNI، هر سایت امن باید یک آیپی جداگانه داشته باشد. این کار هم گران است هم غیرممکن میشود. به همین دلیل است که به SN نیاز داریم. در حالت کلی دلایل استفاده از SNI را میتوانیم اینگونه بیان کنیم:
- کاهش نیاز به IP اختصاصی: چندین سایت HTTPS میتوانند روی یک آدرس IP مشترک قرار بگیرند.
- کاهش هزینه میزبانی: صاحبان سایت برای هر دامنه الزاما به خرید IP جداگانه نیاز ندارند.
- مدیریت سادهتر گواهیها: سرور میتواند بر اساس نام دامنه، گواهی SSL/TLS مناسب را انتخاب کند.
- پشتیبانی از هاست اشتراکی: ارائهدهندگان هاست میتوانند تعداد زیادی سایت امن را روی یک سرور و IP مشترک میزبانی کنند.
- استفاده بهینه از منابع سرور: محدودیت تعداد IP دیگر مانع اصلی برای میزبانی چندین سایت HTTPS روی یک سرور نیست.
- سازگاری با زیرساختهای مدرن وب: SNI در کنار فناوریهایی مانند TLS 1.3، HTTP/2 و HTTPS hsjthni lda,n.
- سهولت توسعه سرویسهای میزبانی: مدیران سرور میتوانند چندین دامنه و گواهی را روی یک زیرساخت مشترک مدیریت کنند.
کدام مرورگر از SNI پشتیبانی می کند؟
تقریبا همه مرورگرهای امروزی از SNI پشتیبانی میکنند و فقط مرورگرهای بسیار قدیمی (مخصوصا آنهایی که روی ویندوز ایکس پی اجرا میشوند) با این فناوری سازگاری ندارند.
وضعیت پشتیبانی مرورگرهای مختلف از روش SNI به صورت زیر است:
| مرورگر | نسخه شروع پشتیبانی | وضعیت |
| گوگل کروم | نسخه ۶ | پشتیبانی کامل |
| موزیلا فایرفاکس | نسخه ۲ | پشتیبانی کامل |
| اپرا | نسخه ۸ | پشتیبانی کامل |
| سافاری (مک) | نسخه ۳.۲.۱ | پشتیبانی کامل |
| سافاری (iOS) | نسخه ۴.۰ | پشتیبانی کامل |
| اندروید | نسخه ۳.۰ | پشتیبانی کامل |
| اینترنت اکسپلورر روی ویندوز ایکس پی | هیچ نسخهای | بدون پشتیبانی |
| اینترنت اکسپلورر روی ویستا و جدیدتر | نسخه ۷ | پشتیبانی محدود |
نکته: اگر کاربر شما از ویندوز ایکس پی و اینترنت اکسپلورر استفاده میکند، هنگام ورود به سایتهای امن روی هاست اشتراکی با خطای گواهی مواجه خواهد شد.
مزایا و معایب SNI چیست؟
SNI یا Server Name Indication یکی از فناوریهای مهم در زیرساخت ارتباطات امن وب است که امکان میزبانی چندین سایت HTTPS روی یک آدرس IP مشترک را فراهم میکند. با وجود مزایای متعدد، این فناوری محدودیتهایی نیز دارد. در ادامه مهمترین مزایا و معایب SNI را بررسی میکنیم.
مزایای SNI
این فناوری مشکلات مهمی را در میزبانی وب حل کرده و هزینهها را پایین آورده است و در کل مزایای زیر را به همراه دارد:
- کاهش هزینه هاست: چندین سایت میتوانند بدون نیاز به خرید IP اختصاصی برای هر دامنه، روی یک IP مشترک میزبانی شوند.
- مدیریت سادهتر گواهیهای امنیتی: سرور میتواند بر اساس نام دامنه ارسالشده در SNI، گواهی SSL/TLS مناسب را انتخاب کند.
- میزبانی تعداد زیادی سایت امن روی یک IP: صدها سایت HTTPS میتوانند روی یک سرور و IP مشترک قرار بگیرند.
- استفاده بهینه از منابع IP: SNI وابستگی به اختصاص یک IP جداگانه برای هر سایت HTTPS را کاهش میدهد.
- سازگاری با زیرساختهای مدرن: SNI در کنار نسخههای جدید TLS و فناوریهایی مانند TLS 1.3 مورد استفاده قرار میگیرد.
- کاربرد در سرویسهای مختلف: این فناوری فقط محدود به وبسایتها نیست و در برخی سرویسها و برنامههایی که از TLS استفاده میکنند نیز کاربرد دارد.
- سهولت مدیریت هاست اشتراکی: ارائهدهندگان خدمات میزبانی میتوانند چندین دامنه و گواهی را روی یک زیرساخت مشترک مدیریت کنند.
معایب SNI
با وجود همه مزایا، SNI یک نقطه ضعف بزرگ دارد که نمیتوانیم از آن بگذریم:
- نام دامنه در SNI سنتی رمزنگاری نمیشود: در نتیجه نام سایتی که کاربر قصد اتصال به آن را دارد میتواند در ابتدای ارتباط قابل مشاهده باشد.
- امکان مشاهده مقصد اتصال توسط برخی تجهیزات شبکه: ارائهدهنده اینترنت یا تجهیزات نظارتی شبکه، بسته به شرایط و سایر اطلاعات موجود، ممکن است بتوانند نام دامنه را از SNI تشخیص دهند.
- استفاده در سیستمهای فیلترینگ: قابل مشاهده بودن SNI باعث شده است که برخی سامانههای فیلترینگ و کنترل شبکه از آن بهعنوان یکی از شاخصهای شناسایی مقصد استفاده کنند.
- ناسازگاری با برخی نرمافزارهای قدیمی: مرورگرها و کتابخانههای قدیمی که از SNI پشتیبانی نمیکنند ممکن است هنگام اتصال به برخی سرویسهای مدرن با مشکل مواجه شوند.
- محدودیت در حفظ حریم خصوصی: SNI معمولی برای پنهان کردن نام دامنه طراحی نشده است و به همین دلیل نمیتوان آن را یک راهکار کامل برای حفظ حریم خصوصی دانست.
نحوه فعال سازی SNI در سرور
خبر خوب این است که در بیشتر سرورهای هاستینگ، SNI از قبل فعال است. حتی بسیاری از ارائهدهندگان هاست، گواهی SSL رایگان هم در اختیار شما میگذارند. فقط زمانی نیاز به دستکاری دارید که سرور اختصاصی خودتان را مدیریت میکنید. اگر نمیدانید تفاوت ssl رایگان و پولی چیست، حتما مقاله ما را در این باره بخوانید.
در ادامه روش فعالسازی روی کنترلپنلهای مختلف را توضیح میدهیم.
فعالسازی SNI در سیپنل
در سیپنل، SNI معمولا روشن است. برای اطمینان یا فعال کردن مجدد آن، مراحل زیر را انجام دهید. توجه کنید که باید به پنل WHM دسترسی داشته باشید.
مراحل فعالسازی در سیپنل به صورت زیر است:
- وارد پنل WHM شوید.
- در نوار جستوجو عبارت Tweak Settings را پیدا کنید.
- وارد بخش تنظیمات شوید.
- قسمت مربوط به SSL/TLS یا تنظیمات امنیتی را بررسی کنید.
- گزینههای مرتبط با امکان نصب و مدیریت SSL Hosts برای حسابهای cPanel را بررسی کنید.
- در صورت نیاز، تنظیمات را ذخیره کنید.
نکته: اگر از WHM نسخه ۱۱.۶۰ یا بالاتر استفاده میکنید، این گزینه از قبل فعال است. نسخههای ۱۱.۵۴ و پایینتر نیاز به فعالسازی دستی دارند. همچنین از نسخه ۱۱.۳۸ سیپنل به بعد، این قابلیت برای هاستهای اشتراکی نیز فعال است
فعال سازی SNI در دایرکت ادمین
در DirectAdmin نیز پشتیبانی از SNI در نسخههای جدید به شکل گسترده وجود دارد و نحوه تنظیم آن میتواند به نسخه DirectAdmin، وبسرور و ساختار سرویس بستگی داشته باشد.
اگر میخواهید با نحوه مدیریت هاست و امکانات این کنترلپنل بیشتر آشنا شوید، پیشنهاد میکنیم مطلب دایرکت ادمین چیست را در وبلاگ پارس هاست مطالعه کنید.
مراحل فعالسازی در دایرکت ادمین هم به صورت زیر است:
- به سرور خود از طریق SSH وصل شوید.
- فایل پیکربندی دایرکت ادمین را باز کنید.
nano /usr/local/directadmin/conf/directadmin.conf
- خط حاوی enable_ssl_sni را پیدا کنید.
- مقدار آن را به عدد ۱ تغییر دهید.
- فایل را ذخیره و ببندید.
- سرویس دایرکت ادمین را دوباره راهاندازی کنید.
systemctl restart directadmin
نکته: اگر این خط را در فایل پیدا نکردید، خودتان آن را اضافه کنید.
فعال سازی SNI در پلسک
در Plesk نیز پشتیبانی از SNI در نسخههای جدید وجود دارد و معمولا نیازی به فعالسازی دستی آن نیست.
مراحل فعالسازی در پلسک:
- وارد پنل کاربری پلسک شوید.
- به بخش Tools & Settings بروید.
- روی Server Settings کلیک کنید.
- در قسمت Security، گزینه SNI support را پیدا کنید.
- اگر خاموش است، آن را روشن کنید.
- دکمه OK را بزنید
نکته: در نسخههای قدیمی پلسک، ممکن است SNI پیشفرض خاموش باشد.
فعال سازی SNI در لینوکس (بدون کنترل پنل)
اگر از Nginx یا Apache به صورت دستی استفاده میکنید، SNI معمولا به طور پیشفرض فعال است و نیازی به تنظیم خاصی ندارد . فقط کافی است پیشنیازهای زیر را بررسی کنید:
پیشنیازهای لازم:
- OpenSSL نسخه ۰.۹.۸j یا بالاتر
- Nginx با ماژول –with-http_ssl_module کامپایل شده باشد
- Apache با ماژول SSL فعال باشد
روش بررسی در Nginx:
nginx -V 2>&1 | grep -i openssl
اگر خروجی شامل TLS SNI support enabled باشد، SNI فعال است.
نکته: اگر از هاست اشتراکی استفاده میکنید و به WHM یا SSH دسترسی ندارید، نیازی به انجام هیچ کاری نیست. فقط از ارائهدهنده هاست خود بخواهید SNI را برای شما فعال کند.
تفاوت SNI و SAN چیست؟
SNI یک قابلیت در مرورگر و سرور است که نام سایت مقصد را اعلام میکند؛ اما SAN یک بخش در گواهی امنیتی است که چندین نام دامنه را در یک گواهی جا میدهد.
برای درک بهتر اینکه تفاوت SAN و SNI چیست، به جدول زیر دقت کنید:
| جنبه مقایسه | SNI | SAN |
| این فناوری چیست؟ | قابلیت در پروتکل TLS | بخشی در داخل گواهی امنیتی |
| کجا قرار دارد؟ | در مرورگر و سرور | داخل فایل گواهی SSL/TLS |
| برای هر سایت چه نیازی دارد؟ | یک گواهی جداگانه | یک گواهی برای چندین سایت |
| زمان استفاده | هنگام اتصال به سرور | هنگام بررسی اعتبار گواهی |
| اضافه کردن سایت جدید | گواهی جدید میسازید | گواهی را دوباره صادر میکنید |
SNI رمزگذاریشده (ESNI) چیست؟
ESNI نسخه پیشرفته و امنتر SNI قدیمی است. در SNI معمولی، نام سایتی که به آن وصل میشوید بدون هیچ قفلی ارسال میشد و هر کسی بین شما و سرور میتوانست آن را ببیند. ESNI این مشکل را حل کرده و نام سایت مقصد را هم رمزنگاری میکند.
ویژگیهای کلیدی ESNI را میتوانیم اینگونه بیان کنیم:
- نام سایت مقصد را در همان ثانیه اول ارتباط قفل میکند.
- شرکت اینترنت شما نمیتواند ببیند به کدام سایت سر میزنید.
- از سوءاستفاده سانسورچیها برای ردیابی کاربران جلوگیری میکند.
- یک افزونه در پروتکل TLS است، نه یک فناوری جداگانه.
نکته: امروزه فناوری جدیدتری به نام ECH جایگزین ESNI شده است. مرورگرهای مدرن مثل کروم و فایرفاکس از این نسخه جدیدتر استفاده میکنند.
ECH چیست و چه فرقی با SNI و ESNI دارد؟
ECH مخفف Encrypted Client Hello است و جدیدترین نسخه از فناوریهایی است که نام سایت مقصد را از دید دیگران پنهان میکند.
در SNI معمولی، نام سایت بدون هیچ رمزنگاری ارسال میشد. ESNI آمد و فقط همان نام سایت را قفل کرد؛ اما ECH یک قدم فراتر رفته و تقریبا کل پیام اولیه مرورگر به سرور را رمزنگاری میکند.
تفاوت این سه فناوری در یک نگاه:
- SNI معمولی: هیچ چیزی را رمزنگاری نمیکند (قدیمی و ناامن)
- ESNI: فقط نام سایت را رمزنگاری میکند (منسوخ شده)
- ECH: کل پیام اولیه مرورگر را رمزنگاری میکند (استاندارد جدید)
ECH چطور کار میکند؟
سایت مقصد یک کلید عمومی را از طریق DNS منتشر میکند. مرورگر دو پیام میسازد:
- یکی با نام واقعی سایت (که قفل میشود)
- و یکی با نام ساختگی
سرور اگر کلید را داشته باشد، پیام واقعی را باز میکند و مقصد را میفهمد. اگر کلید را نداشته باشد، فقط نام ساختگی را میبیند.

گواهی Wildcard چیست؟
گواهی وایلدکارت یک گواهی امنیتی است که با یک علامت ستاره (*) در نام دامنه خود، از همه زیردامنههای شما محافظت میکند. به جای اینکه برای هر زیر دامنه جداگانه گواهی بخرید، یک گواهی وایلدکارت همه آنها را پوشش میدهد.
برای مثال اگر گواهی وایلدکارت برای *.websitename.com بخرید، این گواهی برای همه زیردامنههای زیر معتبر خواهد بود:
- blog.websitename.com
- shop.websitename.com
- new.websitename.com
- support.websitename.com
مزایای گواهی وایلدکارت را میتوانیم اینگونه بیان کنیم:
- هزینه بسیار کمتر از خرید گواهی جداگانه برای هر زیردامنه
- مدیریت آسانتر چون فقط یک گواهی دارید نه دهها گواهی
- نصب یکباره و تمام شدن کار برای همه زیردامنهها
همچنین فرق وایلدکارت با SAN بدین شکل است:
- SAN: یک گواهی برای چندین دامنه کاملاً متفاوت (مثل دو سایت جداگانه)
- وایلدکارت: یک گواهی برای یک دامنه اصلی و همه زیردامنههای آن
پیکربندی SNI در Mbed TLS
این بخش برای برنامهنویسانی است که میخواهند در پروژههای خود از SNI استفاده کنند. Mbed TLS یک کتابخانه امنیتی محبوب برای زبان C است. قبل از هر کاری باید گواهیهای X509 و قابلیت SNI را در آن فعال کنید.
فعالسازی قابلیتهای مورد نیاز در Mbed TLS به صورت زیر قابل انجام است:
./scripts/config.py set MBEDTLS_X509_CRT_PARSE_C
./scripts/config.py set MBEDTLS_SSL_SERVER_NAME_INDICATION
گام اول: تنظیم SNI در سمت کلاینت (مرورگر یا برنامه کاربر)
در سمت کلاینت، شما باید نام سرور مقصد را به Mbed TLS معرفی کنید. این کار با تابع mbedtls_ssl_set_hostname انجام میشود.
mbedtls_ssl_set_hostname( context, “virtualserver15.myhost.com” );
نکته بسیار مهم: اگر نام سرور را با این تابع تنظیم نکنید، Mbed TLS بدون اینکه به شما بگوید، تأیید گواهی را نادیده میگیرد. برای حفظ امنیت، همیشه این تابع را صدا بزنید، حتی اگر از SNI استفاده نمیکنید.
گام دوم: تنظیم SNI در سمت سرور
در سمت سرور، شما باید یک تابع راهنما بنویسید تا سرور بداند برای هر درخواست از کدام گواهی استفاده کند. این تابع لیست گواهیها را بررسی میکند و گواهی مناسب را با نام سروری که کلاینت فرستاده مطابقت میدهد.
تابع جستجوی گواهی مناسب:
int sni_callback( void *p_info, mbedtls_ssl_context *ssl,
const unsigned char *name, size_t name_len )
{
const sni_entry *cur = (const sni_entry *) p_info;
while( cur != NULL )
{
if( name_len == strlen( cur->name ) &&
memcmp( name, cur->name, name_len ) == 0 )
{
if( cur->ca != NULL )
mbedtls_ssl_set_hs_ca_chain( ssl, cur->ca, cur->crl );
if( cur->authmode != DFL_AUTH_MODE )
mbedtls_ssl_set_hs_authmode( ssl, cur->authmode );
return( mbedtls_ssl_set_hs_own_cert( ssl, cur->cert, cur->key ) );
}
cur = cur->next;
}
return( -1 );
}
فعالسازی تابع در سرور:
mbedtls_ssl_conf_sni( &conf, sni_callback, sni_info );
در رابطه با کدهای بالا به نکات زیر توجه کنید.
- گواهیهای X509 و SNI را حتما فعال کنید.
- در سمت کلاینت، نام سرور را با mbedtls_ssl_set_hostname تنظیم کنید.
- در سمت سرور، تابع callback را بنویسید تا گواهی مناسب را پیدا کند.
- تابع را با mbedtls_ssl_conf_sni به سرور معرفی کنید.
این کدها فقط الگوی اولیه هستند. شما باید آنها را بر اساس نیاز پروژه خود تغییر دهید.
راهنمای کامل تکنولوژی SNI
در این مطلب با مفهوم SNI چیست، نحوه کار Server Name Indication، کاربرد آن در HTTPS و TLS و نقش آن در میزبانی چندین سایت روی یک IP مشترک آشنا شدیم. SNI یکی از فناوریهای مهم اما کمتر دیدهشده در زیرساخت اینترنت است که هر روز هنگام استفاده از وبسایتهای امن از آن استفاده میکنیم.
مهمترین کاربرد SNI این است که به سرور کمک میکند در شرایطی که چندین دامنه روی یک IP میزبانی میشوند، تشخیص دهد درخواست مربوط به کدام دامنه است و گواهی SSL/TLS مناسب را انتخاب کند. از این رو، SNI نقش مهمی در هاست اشتراکی، میزبانی HTTPS و مدیریت گواهیهای امنیتی دارد.
با این حال، SNI معمولی یک محدودیت مهم دارد: نام دامنه در ابتدای ارتباط TLS به صورت رمزنگاریشده ارسال نمیشود. بنابراین SNI را نباید با یک فناوری حفظ حریم خصوصی یا ابزار رمزنگاری اشتباه گرفت. برای برطرف کردن این محدودیت، فناوریهایی مانند ESNI و پس از آن ECH (Encrypted Client Hello) توسعه پیدا کردند که با هدف محافظت بهتر از اطلاعات موجود در ابتدای ارتباط TLS طراحی شدهاند.
اگر قصد راهاندازی یک وبسایت دارید، آشنایی با SNI در کنار مفاهیمی مانند SSL چیست، میتواند به درک بهتر زیرساخت امنیتی وب کمک کند.
اگر درباره SNI چیست، SNI Spoofing، ECH یا نحوه استفاده از SNI در سرور سوال یا تجربهای دارید، میتوانید آن را در بخش نظرات با ما و سایر کاربران به اشتراک بگذارید.
سوالات متداول
۱. SNI چیست؟
SNI مخفف عبارت Server Name Indicationبه معنای «نشانگر نام سرور» است و یک افزونه در فناوری TLS به حساب میآید.
۲. آیا SNI امنیت سایت من را کاهش میدهد؟
خیر. SNI فقط مشکل شناسایی سایت را حل میکند و هیچ تاثیری بر قدرت رمزنگاری گواهی SSL/TLS شما ندارد.
۳. آیا میتوانیم SNI را غیرفعال کنیم؟
در سمت سرور میتوانید آن را خاموش کنید، اما این کار باعث میشود سایتهای روی هاست اشتراکی نتوانند از گواهی امنیتی جداگانه استفاده کنند.
۴. فرق SNI با CDN چیست؟
CDN (شبکه توزیع محتوا) برای پخش محتوا است؛ اما SNi برای شناسایی درست سایت مقصد در هاست اشتراکی کاربرد دارد. این دو فناوری کاملا جدا هستند.
۵. آیا SNI Spoofing غیرقانونی است؟
این بستگی به قوانین هر کشور دارد. در کشورهایی با فیلترینگ گسترده، کاربران از این روش برای دسترسی به اطلاعات استفاده میکنند. اما از نظر فنی، این روش یک ترفند برای فریب سیستم فیلترینگ است.
۶. چرا برخی سایتها با خطای گواهی مواجه میشوند؟
دلیل اصلی این است که کاربر از مرورگر بسیار قدیمی (مثل اینترنت اکسپلورر روی ویندوز ایکس پی) استفاده میکند که SNI را پشتیبانی نمیکند.
۰