
فناوری SNI چیست؟ نشانگر نام سرور یا SIN مخفف عبارت Server Name Indication است و توسعه دهنده پروتکل TLS است. این فناوری نشان می دهد که مرورگر در شروع فرآیند دست دادن با کدام نام میزبان ارتباط برقرار کرده است. استفاده از این فناوری به سرور اجازه می دهد تا چندین گواهینامه SSL را به یک آدرس IP و دروازه متصل کند. در این مقاله توسط وبلاگ پارس پاکبه سوالSNI چیست؟پاسخ می دهیم و به تمام نکات در این زمینه اشاره می کنیم.
قبل از تکنولوژی SNIاوضاع چطور بود؟
هنگامی که کاربر از وب سایت شما بازدید می کند، مرورگر کاربر به وب سرور متصل می شود و نام دامنه را برای آن ارسال می کند. با این حال، زمانی که میخواهیم یک اتصال بر اساس پروتکل SSL/TLS ایجاد کنیم، فرآیند کمی پیچیدهتر میشود. زیرا مرورگر ابتدا و قبل از اینکه بخواهد بداند به کدام صفحه دسترسی خواهد داشت، به یک گواهی دیجیتال از سرور نیاز دارد. بعد از اینکه مرورگر این گواهی را دریافت کرد، نام این گواهی را با نام صفحه ای که به آن دسترسی خواهد داشت مقایسه می کند و اگر این نام ها مطابقت داشته باشند، اتصال به طور عادی انجام می شود.
حالا اگر این دو اسم با هم همخوانی نداشته باشند چه اتفاقی می افتد؟ در این صورت کاربر قادر به دسترسی به وب سایت شما نخواهد بود و پیام هشداری را مشاهده خواهد کرد. همچنین، با توجه به اینکه اتصال ناموفق میتواند به معنای حمله Man in the Middle باشد، احتمالاً از ادامه روند جلوگیری میشود.
برای جلوگیری از این اتفاق، وب سایت هایی که از SSL استفاده می کنند باید آدرس IP خود را نیز داشته باشند. این به وب سرور اجازه می دهد تا از آدرس IP استفاده کند تا تعیین کند که بازدیدکننده در تلاش است به کدام وب سایت متصل شود و گواهی دیجیتال مناسب را برای مرورگر یا مشتری ارسال کند.
راه حلی به نام تکنولوژی SNI
مشکل از جایی شروع می شود که آدرس های IP محدود می شوند. بنابراین، الزام هر وب سایت به داشتن یک آدرس IP منحصر به فرد می تواند در دراز مدت به دلیل رشد بسیار سریع وب سایت ها، مشکلاتی را ایجاد کند. راه حل این مشکل در دسترس است تکنولوژی SNI خوب.
مرورگرها از تکنولوژی SNI پشتیبانی، در طول یک راه اندازی ایمن، بلافاصله نام وب سایتی را که بازدیدکننده قصد اتصال به آن را دارد به سرور ارسال می کند. بنابراین سرور اکنون می داند که کدام گواهی را به مرورگر کاربر ارسال کند. این امر به مرورگرها و سرورهای پشتیبان SNI اجازه میدهد تا گواهیهای متعددی را برای چندین نام دامنه به یک آدرس IP متصل کنند.
در پاسخ به سوال SNI چیست؟خلاصه این را باید بگوییم تکنولوژی SNI این یک فناوری کاملاً جدید است که از سال 2004 تا 2007 ادامه داشت. مشکل پیاده سازی این فناوری این بود که از یک طرف کتابخانه TLS باید حاوی برنامه TLS باشد و از طرف دیگر این کتابخانه باید نام میزبان ها را به TLS کتابخانه
علاوه بر این، این امکان وجود دارد که کتابخانه TLS در برنامهها گنجانده شده باشد یا جزء سیستم عامل مورد نظر باشد. به همین دلیل برخی از مرورگرها تکنولوژی SNI اجرا در هنگام اجرا بر روی هر سیستم عامل؛ اما برخی از آنها این فناوری را تنها بر روی سیستم عامل های خاصی پیاده سازی می کنند.
گواهی SSL چیست و چگونه کار می کند؟ مزایا و معایب SSL چیست؟ در مقاله زیر بخوانید.
SSL چیست؟
مزایا و معایب استفاده تکنولوژی SNI
مزایایی که استفاده از SNI برای شما به ارمغان می آورد. آن ها هستند:
- از یک IP/پورت برای همه برنامه های تحت وب بدون نیاز به تنظیم IP منحصر به فرد یا پورت غیر پیش فرض استفاده کنید.
- امکان استفاده از یک گواهی برای هر برنامه وب که امنیت و سادگی بیشتری را در مقایسه با استفاده از گواهی SSL Wildcard برای شما فراهم می کند.
ناگفته نماند که فناوری همیشه بدون ایراد نیست و هر فناوری دارای معایبی است و این شما به عنوان یک کاربر فناوری تصمیم می گیرید که با توجه به مزایا و معایب آن تصمیم بگیرید که از آن استفاده کنید یا نه.
یکی از مشکلات اصلی SNI این است که پروتکل WebDAV از آن پشتیبانی نمی کند. اگر برای اولین بار است که نام WebDAV را می شنوید، بهتر است بدانید که این پروتکل نسخه بهبود یافته HTTP است و اکنون احتمالاً مشکل SNI را بهتر درک می کنید.
فناوری SNI چیست و چه مزایا و معایبی دارد؟
با کدام مرورگرها تکنولوژی SNI سازگار و کدام ناسازگار است؟
برخی از سیستم عامل ها و مرورگرها با تکنولوژی SNI سازگار نیستند؛ شامل:
- ویندوز XP با هر نسخه ای از Windows Explorer نصب شده است
- نسخه های قدیمی تر از نسخه 6 اینترنت اکسپلورر
- مرورگر سافاری در صورت نصب بر روی سیستم عامل ویندوز XP
- مرورگر بلک بری
- نسخه های قدیمی تر از 6.5 ویندوز موبایل
- مرورگر نوکیا و اپرا برای سیستم عامل سیمبین
اگر بخواهید با هر یک از این ترکیب ها به وب سایتی متصل شوید که از پروتکل HTTPS استفاده می کند، وب سایت همچنان برای شما قابل دسترسی خواهد بود. اما پیغام خطای عدم تطابق گواهینامه را نیز دریافت خواهید کرد.
راه حل پیشنهادی برای این مشکل استفاده از مرورگر دیگری است تکنولوژی SNI پشتیبانی می کند. با این حال، اگر میخواهید با همان مرورگر ناسازگار ادامه دهید، وبسایت درخواستی معمولاً با HTTPS باز میشود. اما یک گواهی متفاوت برای اتصال ایمن استفاده می شود. اما باید توجه داشته باشید که همه کاربران پس از وارد کردن آدرس وب سایت با پیام هشدار یکسانی مواجه می شوند که ممکن است چندان مناسب برند شما نباشد. به همین دلیل پیشنهاد می کنیم از یکی از مرورگرهای سازگار با این فناوری استفاده کنید. سپس این مرورگرها را فهرست کرده ایم:
- اینترنت اکسپلورر نسخه 7 یا بالاتر روی ویندوز ویستا یا جدیدتر نصب شده است
- مرورگر موزیلا فایرفاکس 2 یا جدیدتر
- مرورگر Opera 8.0 یا بالاتر (اگر از این مرورگر استفاده می کنید، پروتکل TLS 1.1 باید فعال باشد)
- مرورگر اپرا موبایل با حداقل نسخه 10.1 بتا سیستم عامل اندروید
- Google Chrome روی ویندوز ویستا یا جدیدتر نصب شده است
- Google Chrome نسخه 6 یا بالاتر (اگر سیستم عامل شما ویندوز XP است)
- مرورگر Safari 3.0 یا نسخه های جدیدتر
نحوه پیکربندی تکنولوژی SNI
به محض اینکه بدانید SNI چیست؟در مرحله بعدی باید ساخت SNI یا به عبارت دیگر، پیکربندی آن را یاد بگیرید. اولین چیزی که باید به آن توجه کنید این است که SNI به گواهینامه های X509 نیاز دارد. بنابراین، اولین قدم این است که این گواهی را در فایل پیکربندی Mbed TLS خود فعال کنید:
./scripts/config.py set MBEDTLS_X509_CRT_PARSE_C ./scripts/config.py set MBEDTLS_SSL_SERVER_NAME_INDICATION
اینها گزینه های معمول زمان کامپایل برای Mbed TLS هستند. بنابراین، قبل از کامپایل کتابخانه باید آنها را تنظیم کنید. در مرحله بعدی باید تکنولوژی SNI هر دو سمت مشتری و سمت سرور را پیکربندی کنید. نحوه انجام این کار در زیر توضیح داده شده است.
1. پیکربندی تکنولوژی SNI از سمت مشتری
برنامه افزودنی SNI از همان نام سرور به عنوان مشتری برای تأیید گواهی سرور در طول فرآیند دست دادن استفاده می کند. بنابراین، می توانید آن را در همان تابع تنظیم کنید:
mbedtls_ssl_set_hostname( context, "virtualserver15.myhost.com" );
توجه: اگر نام میزبان با این تابع تنظیم نشده باشد، Mbed TLS بدون اینکه شما بدانید به طور کامل تأیید گواهی را رد می کند. بنابراین همیشه یک نام میزبان با این تابع تنظیم کنید. حتی زمانی که از SNI استفاده نمی کنید.
2. پیکربندی تکنولوژی SNI سمت سرور
Mbed TLS یک راه حل بسیار انعطاف پذیر برای انتخاب گواهینامه مناسب ارائه می دهد. توسعه دهنده سرور برنامه باید تابع callback را پیاده سازی کند. مثال زیر نمونه خوبی از این موضوع است:
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; /* traverse the certificate info list */ while( cur != NULL ) { /* find the one with the name requested */ if( name_len == strlen( cur->name ) && memcmp( name, cur->name, name_len ) == 0 ) { /* set the corresponding CA if applicable */ if( cur->ca != NULL ) mbedtls_ssl_set_hs_ca_chain( ssl, cur->ca, cur->crl ); /* set the authentication mode if it differs from the default */ if( cur->authmode != DFL_AUTH_MODE ) mbedtls_ssl_set_hs_authmode( ssl, cur->authmode ); /* set the certificate in the context */ return( mbedtls_ssl_set_hs_own_cert( ssl, cur->cert, cur->key ) ); } /* step to the next certificate info in the list */ cur = cur->next; } /* certificate not found: return an error code */ return( -1 ); }
همچنین برای فعال کردن Mbed TLS با استفاده از قابلیت callback، باید آن را ثبت کنید. با استفاده از کدهای زیر نیز می توان این کار را انجام داد:
mbedtls_ssl_conf_sni( &conf, sni_callback, sni_info );
نتیجه
فناوری SNI چیست؟ گناه (مخفف عبارت Server Name Indication) یک فناوری جدید در زمینه امنیت وب است. با استفاده از این فناوری مشخص می شود که در ابتدای فرآیند دست دادن به کدام میزبان باید متصل شود. البته مفهوم SNI بسیار پیچیده تر است. به همین منظور در این مقاله وبلاگ پارس پک به بیان چیستی SNI و نکات مهم مربوط به این فناوری و نحوه فعال سازی آن پرداخته ایم.
سوالات متداول
1. چرا استفاده کنید تکنولوژی SNI ضروری است که؟
تکنولوژی SNI در فرآیند دست دادن SSL/TLS گنجانده شده است تا اطمینان حاصل شود که مشتریان (مانند مرورگرها) به گواهی SSL صحیح برای وب سایت مورد نظر دسترسی دارند.
2. کاربرد SNI چیست؟?
اگر می خواهید چندین دامنه را با استفاده از آدرس IP یکسان ایمن کنید، استفاده کنید تکنولوژی SNI این گزینه مناسب برای شما است. استفاده از این فناوری معمولاً نسبت به گواهی جایگزین سنتی هزینه کمتری دارد.
3. چگونه مطمئن شویم که گواهی SNI به درستی کار می کند؟
یک راه حل ساده برای اطمینان از اینکه SNI به درستی کار می کند این است که دو دامنه را امتحان کنید که به یک آدرس IP حل می شوند. اگر هر دو از پروتکل HTTPS استفاده کنند، فناوری SNI به درستی کار می کند.
4. چگونه SNI را غیرفعال کنم؟
برای غیرفعال کردن SNI، فقط jsse را مشخص کنید. enableSNIExtension را در مدیریت پیام به False تغییر دهید.