Файлы cookie сеанса Jetty Secure, когда за обратным прокси используется HTTP - PullRequest
9 голосов
/ 25 июня 2011

Я использую обратный прокси-сервер (Apache) перед Jetty 6. Пользователи подключаются к Apache с помощью SSL, и Apache пересылает некоторые запросы в Jetty по обычному HTTP.Я хочу, чтобы Jetty использовала безопасные сеансовые куки-файлы.

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

Iнастройте Jetty для использования безопасных файлов cookie, как описано в другой вопрос stackoverflow .Тем не менее, Jetty отказывается использовать безопасные файлы cookie - я предполагаю, что это связано с тем, что соединение с обратным прокси-сервером не является SSL.

Я пытался убедить Jetty в том, что он работает над запросом, который пришел через SSL, следуя описанию в sonatype.com .То есть я добавил следующее в Apache:

RequestHeader set X-Forwarded-Scheme "https"

и в /etc/jetty/jetty.xml:

<Set name="handler">
  <New id="Handlers" class="org.mortbay.jetty.handler.rewrite.RewriteHandler">
    <Set name="rules">
      <Array type="org.mortbay.jetty.handler.rewrite.Rule">
        <Item>
          <New id="forwardedHttps"
               class="org.mortbay.jetty.handler.rewrite.ForwardedSchemeHeaderRule">
            <Set name="header">X-Forwarded-Scheme</Set>
            <Set name="headerValue">https</Set>
            <Set name="scheme">https</Set>
          </New>
        </Item>
      </Array>
    </Set>

    <Set name="handler">
      <New id="Handlers" class="org.mortbay.jetty.handler.HandlerCollection">
        <Set name="handlers">
          <Array type="org.mortbay.jetty.Handler">
            <Item>
              <New id="Contexts" class="org.mortbay.jetty.handler.ContextHandlerCollection"/>
            </Item>
            <Item>
              <New id="DefaultHandler" class="org.mortbay.jetty.handler.DefaultHandler"/>
            </Item>
            <Item>
              <New id="RequestLog" class="org.mortbay.jetty.handler.RequestLogHandler"/>
            </Item>
          </Array>
        </Set>
      </New>
    </Set>
  </New>
</Set>

Все еще нет безопасных файлов cookie.Есть предложения?

1 Ответ

5 голосов
/ 05 ноября 2013

Я не смог заставить это работать с Jetty 6. После обновления до Jetty 9 я получил его на работу.

Я изменил это в /etc/jetty.xml.Это было закомментировано, и я раскомментировал его:

<!-- Uncomment to enable handling of X-Forwarded- style headers -->
 <Call name="addCustomizer">
  <Arg><New class="org.eclipse.jetty.server.ForwardedRequestCustomizer"/></Arg>
</Call>

В обратном прокси-сервере (теперь nginx) proxy_set_header X-Forwarded-Proto используется, чтобы сообщить Jetty, был ли запрос http или https:

location / {
  proxy_pass http://127.0.0.1:8080;
  proxy_pass_header Server;
  proxy_set_header Host $http_host;
  proxy_set_header X-Forwarded-Proto $scheme;
}

Наконец, в web.xml веб-приложения это включает безопасные и сессионные куки-файлы только для http:

<?xml version="1.0" encoding="UTF-8"?>

<web-app xmlns="http://java.sun.com/xml/ns/javaee"
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
      version="3.0">

  <!-- filters and other stuff here -->

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

</web-app>
...