Перенаправление http на https, когда порт http заблокирован

У нас есть веб-приложение на Java, работающее в Apache Tomact 8.0.36. HTTP-порт 80 настроен, а HTTPS-порт 443 настроен. Перенаправление на HTTPS настраивается в web.xml, как показано ниже, и работает нормально:

                 <security-constraint>
                         <web-resource-collection>
                         <web-resource-name>restricted methods</web-resource-name>
                             <url-pattern>/*</url-pattern>
                             <http-method>OPTIONS</http-method>
                             <http-method>DELETE</http-method>
                             <http-method>TRACE</http-method>
                          </web-resource-collection>
                          <auth-constraint/>
                </security-constraint>

Теперь порт 80 заблокирован на сервере, на котором развернуто приложение, и перенаправление на HTTPS не происходит. Есть ли способ заставить HTTPS перенаправление работать, когда порт HTTP заблокирован?

2 ответа

Есть ли способ заставить HTTPS перенаправление работать, когда порт HTTP заблокирован?

Я предполагаю, что вы имеете в виду заблокирован брандмауэром на сервере или перед ним.

В основном ответ - нет.

Чтобы любая форма перенаправления HTTP работала на сервере, сервер должен иметь возможность получать HTTP-запрос входящего соединения на порт 80. (Затем он отправит ответ 3xx, чтобы сообщить браузеру повторить попытку с другим URL-адресом. Этот URL будет HTTPS URL.)

Если HTTP-запрос блокируется до того, как сервер его получает, естественно, он ничего не может сделать.

Кроме того, если вы попытаетесь сделать что-то умное, например, сопоставить порт 80 с портом 443 в брандмауэре, вы в конечном итоге отправите HTTP-запрос на порт сервера HTTPS. Это не получится, потому что HTTPS-сервер ожидает согласования SSL / TLS. Это, вероятно, просто закроет связь.

Если вам действительно нужно это поддерживать, вам необходимо реализовать HTTP / HTTPS-прокси перед сервером, и он должен перенаправлять обратно в браузер пользователя. Но это глупо.

Если вы действительно хотите заставить людей использовать HTTPS, выполните одно из следующих действий:

  • Попросите администраторов сети открыть порт 80 на сервере и реализовать перенаправление 3xx на сервере обычным способом.
  • Держите порт 80 закрытым на сервере и не публикуйте URL-адреса http://. Если какой-либо пользователь пытается использовать URL-адрес http://, он получит либо "Отказ в соединении", либо "Тайм-аут соединения"... или, однако, браузер решит описать эти сценарии пользователям.

Если вы пытаетесь обойти сетевой блок администраторами, которые не сотрудничают, я бы посоветовал не беспокоиться. Они предположительно имеют свои причины.

Ты это пробовал?

<security-constraint>
<web-resource-collection>
<web-resource-name>Entire Application</web-resource-name>
<url-pattern>/*</url-pattern>
</web-resource-collection>
<user-data-constraint>
<transport-guarantee>CONFIDENTIAL</transport-guarantee>
</user-data-constraint>
</security-constraint>
Другие вопросы по тегам