Перенаправление 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>