У нас есть веб-сервер Apache 2.4 с парой виртуальных хостов с разными сертификатами.
Я установил виртуальные хосты на основе имени SNI: ap.mmm.com и ac.mmm.com, он отлично работает. Все на одном IP (172.12.12.1) и на одном 443-м порту. Возникает вопрос: что произойдет, если клиент будет использовать IP, а не имя сервера для доступа к серверу Apache: т.е. будет использовать 172.12.12.1:443 вместо ap.mmm.com?
Он будет отображать первый в конфигурации для этого IP / порта, если имя хоста не указано (и, следовательно, имя хоста не будет совпадать). «Если совпадение ServerName или ServerAlias не найдено в наборе виртуальных хостов, содержащих наиболее конкретную совпадающую комбинацию IP-адреса и порта, то будет использован первый в списке виртуальный хост, который соответствует этому».
SNI такой же, если вы не используете SSLstrictSNIVhostCheck. Первый (по умолчанию) виртуальный хост будет использоваться для любого запроса, в котором указанное имя сервера не соответствует другому виртуальному хосту. Есть одна директива, связанная с использованием SNI с виртуальными хостами на основе имен, SSLStrictSNIVHostCheck, которая определяет, разрешать ли клиентам без SNI доступ к виртуальному хосту на основе имени. http://httpd.apache.org/docs/2.4/mod/mod_ssl.html#sslstrictsnivhostcheck
Если это общий хост с сайтами, которые могут не одобрять просмотр чужого сайта при загрузке по IP, я бы рекомендовал сначала создать пустой виртуальный хост для каждой директивы namevirtualhost прямо под namevirtualhost. Один для ssl (возможно, с сертификатом основного сервера) и один для порта 80. Это обеспечит отображение пустого хоста вместо первого из реальных сайтов.