Подтвердить что ты не робот

Проблема с функцией безопасности сеанса JBoss 6 с использованием сервлета 3.0

Мы перенесли наше приложение с JBoss 5 на JBoss6, и одной из основных причин этого является использование новых функций сервлета 3.0. Все отлично работает, кроме одной новой функции JBoss 6 и сервлета 3.0: настройка cookie сеанса только на передачу через защищенный канал, даже если запрос был сделан через простой HTTP. Это очень важная функция безопасности для нас и достигается путем добавления

<secure>true</secure>

в web.xml. Это часть нашего web.xml:

<session-config>
<session-timeout>25</session-timeout>
<cookie-config>
    <http-only>true</http-only>
    <secure>true</secure>
</cookie-config>
<tracking-mode>COOKIE</tracking-mode>

Когда мы удаляем

<secure>true</secure>

все работает нормально. Когда он есть, для каждого запроса создается новый jsessionid, даже если он находится на защищенной странице (HTTPS) или на незащищенной странице (HTTP). Кроме того, логин не работает, поскольку после входа в систему с безопасными учетными данными пользователь перенаправляется обратно на страницу входа.

Я полагаю, это может быть проблемой с Tomcat 7, так как она также использует спецификацию сервлета 3.0. Любые советы будут высоко оценены.

Привет

4b9b3361

Ответ 1

В соответствии с Спецификация HTTP:

Безопасный

Дополнительно. Атрибут Secure (без значения) направляет пользователя агент использовать только (неуказанные) защищенные средства для связи с источником сервер, когда он отправляет этот файл cookie.

Пользовательский агент (возможно, под контролем пользователя) может определить какой уровень безопасности он считает целесообразным для "безопасного" печенье. Атрибут Secure следует считать безопасностью совет от сервера к пользовательскому агенту, указывая, что он находится в интерес сессии к защите содержимого cookie.

Это означает, что спецификация оставляет его открытым для браузера (агента пользователя) для определения того, что является "безопасным".

Элемент Secure в web.xml является ссылкой для свойства HTTP Cookie Secure, и вы можете отслеживать это значение с помощью инструмент отладки браузера.

Если сообщение не является "безопасным", браузер не отправит полученный файл cookie на сервер по следующим запросам.

Проблема заключается не в том, что JBoss всегда возвращает новые файлы cookie, но браузер, который его не отправляет, потому что общение небезопасно. Затем JBoss создает новый сеанс для каждого запроса.

Очень ясно, что для нешифрованной связи (а не HTTPS) браузер не отправит cookie, это ожидается, так как вы отмечаете cookie как secure = true.

Но даже если вы используете HTTPS, "безопасный" относится к концепции безопасности браузера, например:

  • Срок действия сертификата может быть истек.
  • Сертификат самоподписанный
  • Вы используете имя хоста, отличное от того, кто подписал сертификат

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

Проблема должна быть связана с настройками SSL/TLS или Cookie, что означает, что вам нужно проверить, что вы сделали, и устранить проблему. Я не думаю, что есть ошибка в JBoss или JBossWeb (вилка Tomcat 6), вызывающая ее, и, конечно же, это не ошибка спецификации.

Мне удалось настроить финал JBoss 6.1.0 с TLS и конфигурацией web.xml, и все работало, как ожидалось.

Я предлагаю вам дважды проверить вашу конфигурацию, отладочную информацию браузера и оповещения.