2015-02-23 4 views
0

В настоящий момент я использую nginx в качестве своего веб-сервера. Некоторое время назад я узнал о Server Name Indicication (SNI), что очень помогло, так как у меня есть несколько доменов (включая все поддомены), запущенные с моего сервера.есть способ запретить https-подключения к некоторым подобластям, которые не имеют сертификатов при использовании SNI.

Итак, я вышел из моего основного домена и нескольких поддоменов на моем сервере. Работает отлично, не проблема: D

(причина, по которой я не просто использовал подстановочный знак, потому что я использую http://www.startssl.com/, который предоставляет мне бесплатные ssl-сертификаты, но для подстановочных знаков мне придется заплатить, а сервер не так важен для этого, это просто хобби-проект)

Итак, на вопрос: Если кто-то просматривает несуществующий (дополнительный) домен или тот, у которого нет установленного сертификата, они получают, конечно, большое предупреждение в браузере, потому что nginx обслуживал сертификат по умолчанию, который, конечно, не соответствует этому несуществующему домену. Мне было интересно, можно ли было бы сообщить nginx, если sni-система попросит не существовавшее доменное имя, просто прекратить соединение или, может быть, сделать что-то подобное, вместо предупреждения о несоответствии имени появится какая-то другая предупреждение в браузере говорит, что сайт не существует (если даже такая система существует ...)

Я знаю одно решение: заберите файл-подстановочный знак dns, поэтому несуществующий действительно не существует, но это не помогает для тех, которые существуют, но не на https. Кроме того, я не могу просто добавить новый поддомен и также отредактировать dns-настройки для него. (Я знаю, я ленив, но какой ботаник нет: P)

О, и если такая вещь невозможна, мне просто нужно жить так, как сейчас, не так уж важно, но это сделает мой сервер менее «более холодным» xd (им жаль, им просто случайный технолог).

+0

Я бы предложил попросить об этом на ServerFault, но удалите все упоминания о любителе, поскольку он предназначен для профессионального контекста. – Bruno

ответ

0

Просто не использовать SSL для субдоменов :) например

server { 
    listen 80; 
    listen 443; 
    server_name example.com; 
    ... 
} 
server { 
    listen 80; 
    server_name *.example.com; 
    ... 
} 
+0

Для каждого субдомена, у которого не было ssl-сертификата, в нем уже не было «прослушивания 443». Оказывается, если вы перейдете к https-соединению на подобном поддомене, nginx просто служит первому ssl- (sub) доменному имени, которое он может найти Так что, хотя это было не совсем решение, мне удалось заставить меня думать правильно и найти решение! Я добавлю это как сам ответ –

0

Оказывается, ответ на SuddenHead почти раствор. Это потребовало лишь небольшого дополнительного шага. Я уже сделал то, что сказал SuddenHead, но если вы посетили несуществующий субдомен или субдомен, который не имеет ssl, он просто будет обслуживать первый поддомен ssl, который он может найти. Решение оказалось очень простым. Убедитесь, что вы добавляете серверный блок в Nginx-конфигурацию и убедитесь, что это первого один Nginx прочтет:

server { 
    listen 80 default_server; 
    listen 443 default_server; 

    return 404; 
} 

Это также будет служить 404-странице любого несуществующему поддомена (что-то, что я также хотел, если это не было желательно, я думаю, что исключение правила listen 80 должно работать), и поскольку данные о ssl-сертификате не указаны, доступ к нему на https дает ошибку в отношении ssl-соединения, которое невозможно установить, вместо ошибка домена-несоответствия с предупреждениями о чем-то может быть неправильной и прочей. Это в основном то, что я искал: D

Теперь я уверен, что для этого есть более «приятные» способы, но это делает все, что мне нужно.

EDIT: Я искал, поставив default_server в инструкции для прослушивания, что, конечно, сломает все, что по умолчанию ssl будет сломан ... ooops.Так что я боялся, что не думал об этой мысли, и это не решение в конце концов :(