SNI Logo

SNI که مخفف عبارت Server Name Indication یا اعلانگر نام کارگزار است یک قابلیت اضافی در در پروتکل TLS است که به وسیله آن کاربر نام دامنه مورد نظری که تلاش برای برقراری ارتباط با آن دارد را از ابتدای شروع اتصال به سرور اعلام میکند.

این قابلیت به سرور اجازه میدهد تا با گواهینامه های مختلف بر روی یک IP و یک درگاه (port) فعالیت کند و وب سایت های مختلفی را در HTTPS میزبانی کند و لازم نیست که همه آن وب سایت ها گواهینامه یکسانی داشته باشند یا از IP های مختلفی استفاده کند.

 

پیش زمینه ای از مشکل

زمانی که یک اتصال TLS برقرار میشود، کاربر (client) یک گواهینامه دیجیتال از سرور درخواست میکند، پس از دریافت آن را مورد آزمایش و بررسی قرار میدهد تا ببیند که آیا نام آن مقصدی که قصد اتصال به آن داشته در این گواهینامه موجود است یا نه.اگر این اسم موجود بود، اتصال به روند عادی خود ادامه میدهد اما اگر این نام در گواهینامه دیجیتال موجود نبود ممکن است که اتصال قطع شود و کاربر با اخطاری مواجه شود که گواهینامه معتبر نیست و شاید یک حمله مرد میانی رخ داده. البته بعضی از نرم افزار ها این قابلیت را به کاربر میدهد که این اخطار را نادیده بگیرد و با مسئولیت کاربر به آن گواهینامه اعتماد کند و اتصال را از سربگیرد.

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

پیشنهاد بهینه سرور به شما
کد های ارور آپاچی (۴۰۱,۴۰۳,۴۰۴,۴۱۲,۵۰۰)

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

از طرفی اگر قرار باشد هر وب سایتی از https برای ایمن سازی اتصال خود با کاربران استفاده کند،باید هر آی پی به یک دامنه تعلق بگیرد و این در حالیست که اختصاص IP ها باید از نظر سازمان RIR مورد تائید باشد و IP های نسخه ۴ فرسوده هستند و عمرشان به زودی به پایان خواهد رسید.

هرچند که IP های نسخه ۶ به دلیل ظرفیت بسیار بالا با مشکل انقراض مواجه نیستند اما امروزه همچنان اکثر وب سایت ها بر بستر IPv4 میزبانی میشود و از یک اتصال ایمن محروم خواهند بود.

SNI چگونه مشکل را برطرف کرد؟

SNI این مشکل را با ارسال نام دامنه مورد نظر کاربر به سرور در بدو اتصال TLS حل کرد.این کار باعث شد تا سرور از همان ابتدای اتصال متوجه شود که کدام گواهینامه مناسب درخواست کاربر است.

پیشنهاد بهینه سرور به شما
معرفی میکروتیک

این راه حل در نتیجه باعث شد تا تعداد نامحدودی از وب سایت های HTTPS بتوانند در یک IP و درگاه (port) یکسان بتوانند با گواهینامه های مختلف میزبانی شوند.

این قابلیت اولین بار در ماه جوئن ۲۰۰۳ تحت عنوان RFC 3546 به قوانین اینترنتی اضافه شد وآخرین نسخه استاندارد آن RFC 6066 است.

پیاده سازی

در سال ۲۰۰۴ یک وصله (Patch) که در پروژه EdelKey آماده شده بود برای پشتیبانی SNI به OpenSSL اضافه شد.دو سال بعد در ۲۰۰۶ این وصله به نسخه (branch) در حال توسعه OpenSSL اضافه شد و در سال ۲۰۰۷ بصورت رسمی در نسخه ۰.۹.۸ این برنامه معرفی شد.

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

 

پشتیبانی

نرم افزارنوعپشتیبانی میشود؟تذکراتسال پشتیبانی
Internet Explorerمرورگر وببلهاز نسخه ۷ در ویندوز Vista ( در ویندوز XP پشتیبانی نمیشود)۲۰۰۶
Mozilla Firefoxمرورگر وببلهاز نسخه ۲.۰۲۰۰۶
cURLکتابخانه و ابزار خط فرمانبلهاز نسخه ۷.۱۸.۱۲۰۰۸
Safariمرورگر وببلهدر ویندوز XP پشتیبانی نمی شود. 
Google Chromeمرورگر وببلهاز نسخه ۶۲۰۱۰
BlackBerry 10مرورگر وببلهدر تمامی نسخه BB10 پشتیبانی میشود.۲۰۱۳
BlackBerry OSمرورگر وبخیردر نسخه های قبل از ۷.۱ پشتیبانی نمیشود. 
elinksمرورگر وبخیردر نسخه های قبل از ۰.۱۲pre6 پشتیبانی نمیشود. 
Windows Mobileمرورگر وببلهتقریبا بعد از نسخه ۶.۵ 
مرورگر پیشفرض Androidمرورگر وببلهاز نسخه ۳ برای تبلت ها و از نسخه ۴ برای تلفن های همراه۲۰۱۱
wgetابزار خط فرمانبلهاز نسخه ۱.۱۴ 
مرورگر نوکیا برای Symbianمرورگر وبخیر  
مرورگر Opera برای Symbianمرورگر وبخیردر سری ۶۰ پشتیبانی نمیشود. 
IBM HTTP Serverکارگزار وببلهاز نسخه ۹.۰.۰ 
Apache Tomcatکارگزار وببلهدر نسخه های قبل از ۸.۵ پشتیبانی نمیشود. 
Apache HTTP Serverکارگزار وببلهاز نسخه ۲.۲.۱۲۲۰۰۹
Microsoft IISکارگزار وببلهاز نسخه ۸۲۰۱۲
nginxکارگزار وببلهاز نسخه ۰.۵.۲۳۲۰۰۷
Jettyکارگزار وببلهاز نسخه ۹.۳.۰۲۰۱۵
Qtکتابخانهبلهاز نسخه ۴.۸۲۰۱۱
Mozilla NSS server sideکتابخانهخیر  
۴th Dimensionکتابخانهخیردر نسخه های قبل از ۱۵.۲ پشتیبانی نمیشود. 
Javaکتابخانهبلهاز نسخه ۱.۷۲۰۱۱
ColdFusion / Luceeکتابخانهبله

ColdFusion از نسخه ۱۰ آپدیت ۱۸ و نسخه ۱۱ آپدیت ۷

Lucee از نسخه ۴.۵.۱.۰۱۹، نسخه ۵.۰.۰.۵۰

۲۰۱۵
Erlangکتابخانهبلهاز نسخه r17۲۰۱۳
Goکتابخانهبلهاز نسخه ۱.۴۲۰۱۱
Perlکتابخانهبلهاز نسخه ۱.۵۰ Net::SSLeay و نسخه ۱.۵۶ IO::Socket::SSL۲۰۱۲
PHPکتابخانهبلهاز نسخه ۵.۳۲۰۱۴
Pythonکتابخانهبلهاز نسخه ۲.۷.۹rc1 و ۳.۲alpha4

۲۰۱۱ برای نسخه ۳

۲۰۱۴ برای نسخه ۲

Rubyکتابخانهبلهاز نسخه ۲.۰۲۰۱۱
پیشنهاد بهینه سرور به شما
کد های ارور آپاچی (۴۰۱,۴۰۳,۴۰۴,۴۱۲,۵۰۰)

منبع: WikiPedia