Если вы хотите предложить HTTPS с самого начала, вы должны предоставить сертификат, принятый клиентом с самого начала. Потому что в противном случае клиент не примет SSL-соединение, и вы не сможете перенаправить клиента на другой сайт или версию только для HTTP. Это означает, что для поддержки этого случая вы
- либо нужно иметь один сертификат, содержащий все ваши домены, чтобы вы могли предоставить клиентам, не являющимся SNI, надлежащий сертификат. Но в этом случае вам вообще не нужен SNI.
- или вы должны установить сертификат по умолчанию, который не соответствует большинству ваших имен. В этом случае вы можете предоставить клиенту другую страницу или перенаправить ее только в том случае, если клиент примет этот неверный сертификат.
Если вам не нужно иметь HTTPS с самого начала, то есть если клиент обычно сначала подключается с помощью простого HTTP, то вы можете попытаться обнаружить поддержку SNI, чтобы позже можно было перенаправить клиент. Это может быть сделано путем добавления изображения, некоторого JavaScript или подобного материала с вашего HTTPS-сайта, и если загрузка прошла успешно, вы знаете, что клиент либо поддерживает SNI, либо игнорирует ошибки сертификата.
Конечно, это оставляет все открытыми для атак «человек посередине», потому что все, что нужно сделать человеку «посредник», - это обслуживать какой-то другой сертификат или вообще сделать HTTPS недоступным, потому что в этом случае вы никогда не попробуете обновить подключение к HTTPS. Кроме того, это можно использовать для того, чтобы заставить клиентов выглядеть как SNI, если вместо этого это делает посредник. И это касается не только не-SNI-клиентов, но и SNI-совместимые клиенты могут только перехватываться. Таким образом, хотя это было бы теоретически возможно, это не рекомендуется, потому что вы можете просто все посредничать и, таким образом, сделать основной смысл использования HTTPS спорным.