Що таке SNI (Server Name Indication)

Раніше, при встановленні SSL сертифікатів спеціалісти стикалися з проблемою яка полягала в тому що для цього потрібно мати окремий виділений IP, а також що за однією IP адресою можна встановити тільки один SSL сертифікат.

Це встановлює певні технічні обмеження для адмінів сайтів та серверів через те, що можна використати тільки  один  SSL сертифікат на сокет (комбінація IP адреси і сокета), а також потребує додаткових фінансових витрат для компанії,

пов'язаних в купівлею додаткових IP адрес або обладнання, що дозволяє використовувати кілька мережевих адаптерів.

 

Мультидоменні SSL сертифікати (Multidomain, SAN, UCC SSL) був і є одним з найзручніших варіантів розв'язання цього питання.

Поява технології Server Name Identification (SNI) була прийнята з радістю тому, що спростила напрямок роботи з сертифікатами SSL TLS.

Як Ви напевно здогадалися, ця технологія дозволяє встановити кілька цифрових SSL сертифікатів безпеки за однією IP адресою.

 

Розглянемо більш детально що ж таке SNI.

SNI (Server Name Indication) це технологія яка дозволяє встановити кілька SSL сертифікатів за одним IP.

Server Name Indication в перекладі з англійської Індикація імені сервера, інакше кажучи це розширення TLS протоколу, яке вказує до якого хосту намагається під'єднатися клієнт

на початку процесу з'єднання. Це дозволяє серверу з самого початку визначити коректне ім'я віртуального хоста для запиту і установки захищеного з'єднання.

За допомогою SNI, ви можете мати кілька доменів, прив'язаних до одного і того ж IP-адресою і порту, і на кожному з цих доменних імен Ви можете встановити окремий SSL сертифікат.

 

При виконанні TLS з'єднання клієнт запитує цифровий SSL сертифікат з веб-сервера; як тільки сервер відправляє сертифікат, клієнт розглядає його і порівнює ім'я,

яке відправило запит на підключення, з ім'ям або іменами, включеними в сертифікат. Якщо збіг знайдено, з'єднання триває як зазвичай. Якщо ж збігів немає,

браузер попереджає користувача про дану невідповідність, після чого зв'язок може бути перервана. Проте, деякі програми дозволяють користувачеві обійти попередження,

приступивши до підключення з користувачем, які беруть на себе відповідальність за правдивість інформації, SSL сертифікату і, як наслідок, з'єднання.

І хоча в сучасному SSL сертифікаті можна вказати кілька доменних імен і просто використовувати цей сертифікат у віртуальному хості за замовчуванням,

є багато хостинг провайдерів, які обслуговують занадто багато веб-сайтів на одній адресі для більшої практичності, що робить захист окремих доменів неможливою.

 

Щоб розв'язати дану проблему SNI розширення відправляє ім'я віртуального домену в рамках процесу TLS перемовин. Завдяки цьому сервер заздалегідь обирає потрібний віртуальний домен і надає

браузеру сертифікат вже з коректним ім'ям. Як наслідок, клієнти та сервери, що підтримують технологію SNI, можуть використати

одну IP адресу для обслуговування групи різних доменів, для яких недоцільно отримувати загальний мультидоменний SSL сертифікат.


Системні вимоги для використання SNI

OpenSSL 0.9.8f і вище з опцією підтримки TLS Extensions (опція Enable-tlsext; OpenSSL 0.9.8k і пізніше має це включення за замовчуванням).

Apache, сконфігурований з цим OpenSSL (./configure --with-SSL = / шлях / до / вашої / OpenSSL). В цьому випадку, mod_ssl автоматично виявить наявність розширень TLS і буде підтримувати SNI.

Встановлена бібліотека LD_LIBRARY_PATH або еквівалент, щоб вказати на бібліотеку OpenSSL, якщо Apache при запуску не може знайти її (bin / envvars).

 

Як дізнатися чи підтримується SNI на Вашому сервері APACHE?

Якщо налаштувати кілька імен на основі віртуальних хостів для адреси, де налаштований SSL, і SNI не вбудовані в Apache, то після запуску Apache Ви отримаєте в журналі помилок повідомлення:

«You should not use name-based virtual hosts in conjunction with SSL!!»(«Ви не повинні використовувати віртуальні хости, засновані на імені, в поєднанні з SSL!!»).

 

Якщо розширення SNI вбудовано, то журнал помилок покаже:

«[warn] Init: Name-based SSL virtual hosts only work for clients with TLS server name indication support (RFC 4366)» («[попередження] Віртуальні хости, засновані на імені, з SSL працюють тільки для клієнтів з підтримкою TLS SNI (RFC 4366) ».

 

Які браузери підтримують SNI

Браузери ПК:

Internet Explorer 7 або більш пізні версії

Firefox 2

Opera 8 c TLS 1.1

Google Chrome:

Підтримується на Windows XP, на Chrome 6 і пізніших версіях

Підтримується на Vista і пізніших версіях за умовчанням

OS X 10.5.7 в Chrome версії 5.0.342.0 і вище

Safari 2.1 і пізніших версій (вимагає OS X 10.5.6 і вище або Windows Vista і вище).

Примітка: Жодна з версій Internet Explorer під Windows XP не підтримує SNI

 

 

Мобільний браузер:

Мобільна версія Safari для iOS 4.0

Android 3.0 (Honeycomb) і більш пізні версії

Windows Phone 7

Якщо Apache підтримує SNI, в разі отримання запиту по протоколу SSL без імені хоста SNI для віртуального хоста, заснованого на імені, і SSLStrictSNIVHostCheck включений, він буде відхилений (403), і з'явиться наступне повідомлення:

No hostname was provided via SNI for a name based virtual host (тобто імені хоста для даного SNI не було знайдено)

Якщо SSLStrictSNIVHostCheck вимкнений, то запит буде оброблятися, як якщо б сервер не мав підтримки SNI.