1. Начало
  2. SSL/TLS сертификати
  3. SNI технология – какво означава и как работи?

SNI технология – какво означава и как работи?

В тази статия ще Ви покажем в какво се състои разликата между HTTP, HTTPS и SNI без да навлизаме в излишни технически подробности.

Начин на работа на HTTP

При традиционния споделен хостинг клиентът (браузърът на потребителя) създава HTTP заявка, DNS системата резолва IP адреса на сървъра и заявката се изпраща към този сървър.

GET /hello.html HTTP/1.1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.89 Safari/537.36 OPR/49.0.2725.47
Host: www.example.com 
Accept-Language: en-us
Accept-Encoding: gzip, deflate
Connection: Keep-Alive

Сървърът взима хост името от заявката (в примера: www.example.com) и в своята конфигурация открива записа за съответния виртуален хост, базиран на имена (name-based virtual host). От конфигурираната DocumentRoot на сайта сървърът доставя на клиента поискания файл и уеб страницата http://www.example.com/hello.html се зарежда в браузъра.

<VirtualHost *:80>
    DocumentRoot "/www/example1"
    ServerName www.example.com
    # Other directives here
</VirtualHost>

Начин на работа на HTTPS

Когато клиентът създаде HTTPS заявка, отново DNS резолва IP адреса на сървъра и изпраща заявката, но тъй като на този IP адрес може да има инсталиран само един SSL сертификат, клиентът и сървърът започват директно процеса handshake (здрависване) като уточняват наличните шифри и създават споделен ключ за криптиране на HTTPS сесията.

Ако на същия IP адрес има конфигурирани няколко различни сайта, те всички ще зареждат сайта със сертификата тъй като SSL не поддържа виртуален хостинг базиран на имена и обвързва IP адреса с домейна, посочен в SSL сертификата.

<VirtualHost 192.168.0.1:443>
    DocumentRoot /var/www/website
    ServerName www.example.com
    SSLEngine on
    SSLCertificateFile /etc/ssl/crt/primary.crt
    SSLCertificateKeyFile /etc/ssl/crt/private.key
    SSLCertificateChainFile /etc/ssl/crt/intermediate.crt
</VirtualHost>

Какво променя SNI?

SNI е съкращение от Server Name Indication и означава Посочване името на сървъра. SNI е разширение на протокола TLS и показва с кой от хостваните на сървъра домейни клиентът желае да установи криптирана връзка в началото на процеса handshake (здрависване).

Получавайки домейн името още в заявката сървърът избира подходящия SSL сертификат, който изпраща обратно на клиента за проверка.

Клиентът сравнява хост името, с което се опитва да се свърже, с домейн името, записано в сертификата.

Ако двете имена съвпадат, установяването на криптирана връзка продължава следвайки стандартния TLS протокол.

<VirtualHost *:443>
     ServerName www.example.com
     DocumentRoot /var/www/site
     SSLEngine on
     SSLCertificateFile /path/to/www.example.com.crt
     SSLCertificateKeyFile /path/to/www.example.com.key
     SSLCertificateChainFile /path/to/ca-bundle.crt
</VirtualHost>

<VirtualHost *:443>
     ServerName www.example.net
     DocumentRoot /var/www/example.net
     SSLEngine on
     SSLCertificateFile /path/to/www.example.net.crt
     SSLCertificateKeyFile /path/to/www.example.net.key
     SSLCertificateChainFile /path/to/ca-bundle.crt
</VirtualHost>

Ако няма съвпадение, потребителят може да бъде предупреден за несъответствието и връзката може да бъде отменена, тъй като несъответствието може да означава опит за атака от типа man-in-the-middle (човек-в-средата).

SNI решава проблема с недостатъчния брой свободни IPv4 адреси, за да може всеки сайт да бъде защитен със собствен SSL сертификат.

SNI прави възможно от сървър с един IPv4 адрес да се зареждат голям брой HTTPS сайтове, вместо всеки HTTPS сайт да ползва отделен IPv4 адрес.

Браузъри и сървъри, които поддържат SNI

За да се използва Server Name Indication SNI, библиотеката SSL/TLS трябва да може да поддържа SNI чрез приложение. Освен това приложението трябва да изпрати името на хоста в библиотеката SSL/TLS.

Най-използваните съвременни браузъри поддържат SNIhttps://caniuse.com/sni.

Най-използваните сървъри също поддържат SNIhttps://en.wikipedia.org/wiki/Server_Name_Indication#Support.

В хостинг акаунта можете да инсталирате много SSL сертификати за различните домейни, като няма да Ви е нужен отделен собствен IP адрес за всеки. Вижте още: 3 мита за самостоятелния IP адрес | Blog

Обновена: 05.11.2021

Беше ли Ви полезна тази статия?

Вижте още