Форма входа в Java EE с балансировщиком нагрузки, преобразовывающая https в http

У меня есть проблема, и я считаю, что она сводится к несовместимости с нашим балансировщиком нагрузки, веб-сервером (ihs), конфигурацией https и безопасностью форм Java EE с помощью j_security_check.

Я понимаю, что когда клиент пытается перейти на защищенную страницу, сервер (websphere) отправляет перенаправление с URL-адресом формы входа, что мы и видим в нашей среде dev & tst. Однако производственная установка имеет веб-сервер (ihs), который потребляет URL-адрес https, выбивает s и пересылает URL-адрес http в веб-сферу (известный как разгрузка ssl). Когда Websphere отвечает перенаправлением, он делает это без https, но с http://server-name/loginformи я вижу ошибку браузера, что он не может получить доступ к http://server-name/loginform,

Соответствующая часть web.xml:

<security-constraint>
  <web-resource-collection>
    <web-resource-name>Whitelist</web-resource-name>
    <url-pattern>/*</url-pattern>
  </web-resource-collection>
   <auth-constraint>
    <role-name>authenticated-users</role-name>
  </auth-constraint>
</security-constraint>
  <security-constraint>
  <web-resource-collection>
    <web-resource-name>login</web-resource-name>
    <url-pattern>/keepalive</url-pattern>
    <url-pattern>/signin</url-pattern>
    <url-pattern>/signin/error</url-pattern>
    <url-pattern>/resources/*</url-pattern>
  </web-resource-collection>
</security-constraint>
<security-role>
  <description>Any LDAP authenticated user</description>
  <role-name>authenticated-users</role-name>
</security-role>
<login-config>
  <auth-method>FORM</auth-method>
  <form-login-config>
    <form-login-page>/signin</form-login-page>
    <form-error-page>/signin/error</form-error-page>
  </form-login-config>
</login-config>

Мне интересно, является ли это неправильной конфигурацией на стороне Java (моя ответственность), я ожидаю URL в form-login-page (/ логин) быть относительным в браузере. Но я также считаю, что балансировщик нагрузки должен автоматически преобразовывать http call в https call (чужая ответственность). Я надеюсь, что у кого-то есть предложения.

1 ответ

Решение

Вы должны предоставить немного больше информации в своем вопросе, например, какой балансировщик нагрузки вы используете, идет ли он прямо в WAS или через IHS, как настроено ваше веб-приложение (web.xml).

Итак, вот несколько общих советов, которые могут быть полезны для вас.

Перенаправление на SSL в WebSphere

Если у вас уже настроена защита и форма входа в систему правильно отображается в http, вам просто нужно добавить следующее в web.xml:

<security-constraint>
...
    <user-data-constraint>
        <transport-guarantee>CONFIDENTIAL</transport-guarantee>
    </user-data-constraint>
</security-constraint>

Это гарантирует, что WebSphere будет генерировать перенаправление на https, когда клиент пытается получить доступ к защищенным страницам.

Разгрузка SSL

Если ваш балансировщик нагрузки настроен на разгрузку SSL-запросов и запросов в WebSphere с использованием обычного http, то вам необходимо настроить WebSphere, чтобы знать об этом. Это делается путем настройки настраиваемого свойства httpsIndicatorHeader и добавления настраиваемого заголовка в балансировщик нагрузки.

Другие вопросы по тегам