Назад | Перейти на главную страницу

Запрос HTTPS на конкретный виртуальный хост с балансировкой нагрузки (с использованием Shibboleth для SSO)?

В одной среде у нас есть три сервера с балансировкой нагрузки, на каждом из которых есть по одному экземпляру Tomcat, обслуживаемый двумя разными виртуальными хостами Apache. Каждый из этих двух виртуальных хостов (обслуживаемых всеми тремя серверами) имеет свой собственный балансировщик нагрузки. Внутренне первый хост (назовем его barfoo) обслуживается портом 443 (HTTPS) с его сертификатом, а второй хост (назовем его foobar) обслуживается портом 1443 (HTTPS). Когда вы нажимаете foobar, он переходит к балансировщику нагрузки, который использует привязку IP для этого хоста, поэтому вы можете легко протестировать логин / HTTPS на одном из серверов, обслуживающих foobar, но не на других (потому что вы продолжаете получать этот сервер на всю жизнь сеанса LB, iirc).

Кроме того, каждый из серверов использует Shibboleth v2 для authN / SSO, используя mod_shib (iirc). Итак, обычный запрос к foobar попадает в LB, направляется на 3-й сервер (и будет делать это с тех пор, пока длится сеанс LB), затем Apache, затем к Shibboleth SP, который просматривает запрос, выполняет вы входите в систему через переговоры с Shibboleth IdP, затем снова нажимаете Apache, который, в свою очередь, обращается к Tomcat, обрабатывает и возвращает ответ. (Я здесь опускаю некоторые шаги.)

Мы хотели бы подключиться к одному из отдельных серверов (foobar-03.acme.org, который, как мы скажем, имеет IP 1.2.3.4) через HTTPS (пропуская балансировщик нагрузки), поэтому сначала мы пытаемся поместить его в / etc / хосты:

1.2.3.4 foobar.acme.org

Но поскольку foobar.acme.org является вторичным виртуальным хостом, работающим на 1443, он пытается получить barfoo.acme.org, а не foobar.acme.org на порте 1443, и видит, что сертификат для barfoo.acme.org недействителен для этого case, поскольку он не соответствует хосту запроса, foobar.acme.org.

Я думал, что туннель ssh может быть достаточно простым, поэтому я попробовал:

ssh -L 7777:foobar-03.acme.org:1443 myuser@foobar-03.acme.org

Я пытался просто ударить https: // локальный: 7777 / имя веб-приложения в браузере, но когда вход в систему Shibboleth завершен, он снова пытается перенаправить на barfoo.acme.org, который является хостом по умолчанию для 443, и мы попадаем в бесконечный цикл перенаправления.

Затем я попытался настроить SSH-туннель с привилегированным портом 443, локально перейдя на 443 из foobar-03.acme.org в качестве имени хоста для этого виртуального хоста:

sudo ssh -L 443:foobar-03.acme.org:1443 myuser@foobar-03.acme.org

Я также отредактировал / etc / hosts, чтобы добавить:

127.0.0.1 foobar.acme.org

Это, наконец, сработало, и я смог заставить браузер подключиться к отдельному хосту HTTPS на https://foobar.acme.org/webappname, минуя балансировщик нагрузки.

Это было немного неудобно и не сработало для всех из-за необходимости использовать локальный порт 443 и ssh для сервера.

Есть ли в этом случае более простой способ перейти к отдельному хосту и войти в него?

Скотт Кантор предположил, что Webisogetс карта Команда может быть хорошим способом создания сценариев доступа к отдельным Shibbolized приложениям на определенных серверах более простым способом, для мониторинга и т. д.