Перенаправление http на https, когда порт http заблокирован - PullRequest
0 голосов
/ 25 сентября 2018

У нас есть веб-приложение на 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 ]

0 голосов
/ 25 сентября 2018

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

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

По сути, ответ - нет.

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

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

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

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

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

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

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

0 голосов
/ 25 сентября 2018

Вы пробовали это?

<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>
...