LINUX.ORG.RU
ФорумAdmin

SSL и неSSL на одном веб-сервере.

 , ,


1

1

Подскажите, пожалуйста, как по-человечески решить следующую проблему: один веб-сервер (в данном случае nginx) хостит несколько сайтов на разных доменах. Некоторые домены имеют ssl-сертификат, и их нужно хостить на портах 80 и 443, некоторые не имеют, и их нужно хостить только на 80. Но если все сконфигурировать в лоб, то nginx отвечает на https-запрос по всем доменам, даже тем, которые не имеют ssl-сертификата. Ответ получается неприятным - используется сертификат от другого домена и вылазит предупреждение в броузере. Я понимаю, почему так происходит, но не понимаю что с этим делать. Поэтому, два вопроса.

1. Как сконфигурировать nginx, чтоб он просто обрывал коннект при запросе на 443 для домена, не имеющего сертификат?

2. Если ли какая-то возможность выдать человеческий ответ при запросе на 443 и отсутствии сертификата, например редирект на порт 80? Я понимаю, что при запросе по https клиент ожидает зашифрованного ответа, а чтоб зашифровать нужен сертификат, но может там есть какие-то неизвестные воркэраунды в протоколе?

3. Что-то еще можете посоветовать?

★★★★★

если все сконфигурировать в лоб,

А почему не настроить каждый vhost раздельно?

sin_a ★★★★★ ()

По-человечески — сгенерировать сертификаты всем сайтам и/или докупить еще IP-адресов.

Deleted ()

1. Никак

2. Нет

3. Для каждого хоста с SSL ставить отдельный порт/отдельный IP. Ибо сначала идет обмен ключами, и только потом браузер говорит внутри туннеля, куда же он хочет достучаться. Ну или забить на ругань на неверный сертификат.

NiTr0 ★★★★★ ()
Ответ на: комментарий от Harald

Честно признаться, не разбирался, как оно работает, но с nginx это работает.

В Apache — да, на одном порту/ip был возможен только один сертификат.

В nginx каждый vhost может иметь свой сертификат.

beastie ★★★★★ ()
Последнее исправление: beastie (всего исправлений: 1)

1. Как сконфигурировать nginx, чтоб он просто обрывал коннект при запросе на 443 для домена, не имеющего сертификат?

Что значит - не имеющего сертификат? Неужели ты вешаешь все https сайты на все доступные IP ?

На одной паре IP:порт может быть только один сертификат. Если ты думаешь по-другому - проверь внимательнее.

router ★★★★★ ()
Ответ на: комментарий от router

Wrong.

$ nginx -V 2>&1 | grep TLS
TLS SNI support enabled

Это ключ к multiple SSL на одном ip/port. (С Apache, да, другой разговор.)

beastie ★★★★★ ()
Ответ на: комментарий от sin_a

каждый vhost раздельно и настроен, но если хотя бы в одном стоит listen 443 ssl, то он будет на всех виртуальных хостах отвечать по этому порту.

provaton ★★★★★ ()
Последнее исправление: provaton (всего исправлений: 1)
Ответ на: комментарий от provaton

В таком случае единственным решением будет повесить все сайты у которых и 80 и 443 на один ип, а все у которых только 80 на другой ип, иначе на 443 всегда будет отзываться потому что он ведь слушает порт.

hidden_4003 ()
Ответ на: комментарий от router

Вы че, котоны, в нынешние-то времена дефицита айпишников, если скажешь регистратору что тебе еще пара подсетей для виртуального хостинга нужна, то расстреляют на месте и скажут что так и было. Уже давно SNI везде внедрили.

provaton ★★★★★ ()
Ответ на: комментарий от provaton

Насчет пункта 2, сделать ничего нельзя потому что если клиент уже начал соединение по https то уже слишком поздно что-то менять и даже чтобы отдать ему редирект надо сначала установить ssl соединение со всеми вытекающими проблемами т.е. неподписанный или неверный сертификат и соответственно предупреждение браузера.

hidden_4003 ()
Ответ на: комментарий от hidden_4003

Я понимаю, просто понадеялся, что есть какое-то хитрое расширение протокола типа СНИ для такого рода задач.

provaton ★★★★★ ()
Ответ на: комментарий от provaton

Я с апачем делал так:
- каждому vhost отдельный ip в 10.x.x.x
- SSL реверс-прокси к ip адресам с map по имени. Прокси был oops.

Shadow ★★★★★ ()
Последнее исправление: Shadow (всего исправлений: 1)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.