Как проверить SNI


SNI или Server Name Indication — расширение популярного криптографического протокола TLS широко использующегося в веб. Рассмотрим как проверить SNI на сервере.



Практический смысл SNI в том, что если в настройках веб-сервера включена поддержка технологии на одном IP адресе может размещаться неограниченное количество сайтов, работающих по https.



Проверить SNI используя apache2ctl и openssl


Изначально https можно было использовать только при наличии выделенного IP адреса. Т.е. если возникала необходимость разместить на сервере второй сайт, работа с которым была бы возможна по защищенному соединению, нужно было использовать другой белый IP.



В современных Debian системах SNI работает без дополнительных настоек. Используется ли он определяется версией openssl.



Проверить имеется ли поддержка SNI можно как для Apache, так и для Nginx очень просто.

apache2ctl -S

VirtualHost configuration:
wildcard NameVirtualHosts and _default_ servers:
*:80 is a NameVirtualHost
default server 127.0.0.1 (/etc/apache2/sites-enabled/000-default:1)
port 80 namevhost 127.0.0.1 (/etc/apache2/sites-enabled/000-default:1)
port 80 namevhost example.com (/etc/apache2/sites-enabled/example.com:2)
Syntax OK



В выводе несколько виртуальных хостов и сообщение wildcard NameVirtualHosts and _default_ servers, его наличие говорит о том, что SNI поддерживается.



Если в качестве фронтэнда на сервере Nginx достаточно посмотреть его версию

nginx -V

nginx version: nginx/1.2.1
TLS SNI support enabled
configure arguments: --prefix=/etc/nginx --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --http-client-body-temp-pa...



Сначала выводится информация о версии, второй строкой информация о поддержке SNI, затем перечислены все опции, с которыми собирался пакет.

Обе команды можно выполнять только если имеется root доступ к серверу. Если его нет, но требуется выяснить есть ли поддержка SNI можно воспользоваться openssl.



openssl устанавливается на любую машину, имеющую доступ в сеть.



Далее выполняется команда, в которой дважды указывается доменное имя сайта, работающего с сервера, для которого выясняем наличие поддержки SNI.

openssl s_client -servername example.com -tlsextdebug -connect example.com:443 | grep 'TLS'



Наличие в выводе строки TLS server extension «server name» (id=0), len=0 будет означать, что SNI используется и на сервере с одним IP адресом можно разместить любое количество сайтов, работающих по http.

Читайте про то, как установить SSL сертификат на Apache и на Nginx.

Сказать спасибо