У меня есть экземпляр Nginx, использующий SNI для обслуживания нескольких доменов HTTPS с одного IP-адреса.
Единственная проблема с настройкой заключается в том, что Nginx отвечает первым (действующим по умолчанию) доменом всякий раз, когда запрашивается URL-адрес для голого IP-адреса сервера или домена, указанного на этом IP-адресе, для которого нет соответствующего блока HTTPS-сервера. В этом случае я бы предпочел просто вернуть стандартный 403 Forbidden - я бы настроил для этого серверный блок по умолчанию, но я не вижу способа обойти предупреждения о несоответствии сертификата клиента.
(Как c | C) я настраиваю Nginx для отклонения запросов к таким неизвестным / неопределенным доменам без необходимости указывать конкретный сертификат ssl, который нарушит работу браузеров? (т.е. мне нужно, чтобы Nginx отклонил запрос с ошибкой 403, прежде чем расстраивать клиента с помощью «плохого» сертификата - с точки зрения клиента это должно быть идентично случаю, когда блок HTTPS-сервера не определен вообще.)
Этот вопрос очень похож на тот, на который я ответил вчера: nginx и SNI: возможно ли автоматическое разрешение SSL-сертификата по имени домена
Невозможно отклонить соединение до того, как пользователь увидит сообщение о неверном сертификате в своем браузере. К тому времени, когда Nginx может вернуть ответ HTTP 403, квитирование SSL завершится, и для его завершения браузер должен принять предоставленный сертификат. Вы можете отклонить соединение только после того, как пользователь принял сертификат, настроив сервер по умолчанию:
server {
listen 433 default_server ssl;
ssl_certificate common.crt;
ssl_certificate_key common.key;
return 403;
}
Однако самые последние браузеры поддерживают указание имени сервера, и если у вас есть сертификат, установленный для каждого виртуального хоста, то маловероятно, что обычный пользователь увидит это сообщение.
Можно было бы отклонить соединения без действительного имени хоста, указанного SSL с помощью iptables, но это, вероятно, довольно сложно и вообще не будет соответствовать никаким стандартам.
Обновленная информация: Возможно return 444
чтобы прервать TCP-соединение непосредственно перед отображением ошибки сертификата.
Если ваши домены являются поддоменами одного и того же главного (* .example.com), вы можете использовать подстановочный сертификат. В противном случае я не думаю, что вы сможете предоставить какой-либо сертификат, который понравится браузеру.