Проверить SNI

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

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

 

 

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

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

В Debian 8 и более свежих системах 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.