2011-06-25 12 views
9

Estoy usando un proxy inverso (Apache) delante de Jetty 6. Los usuarios se conectan a Apache con SSL y Apache envía algunas de las solicitudes a Jetty a través de HTTP simple. Quiero que Jetty use cookies de sesión seguras.Jetty cookies de sesión segura cuando está detrás del proxy inverso usando HTTP

Uno pensaría que esto sería lo primero que alguien haría después de instalar Jetty, pero me está costando mucho hacerlo funcionar.

Configuré Jetty para utilizar cookies seguras como se describe en another stackoverflow question. Sin embargo, Jetty se niega a usar cookies seguras, supongo que se debe a que la conexión del proxy inverso no es SSL.

Intenté convencer a Jetty de que está trabajando en una solicitud que vino a través de SSL siguiendo una descripción en sonatype.com. Es decir, añadí lo siguiente en Apache:

RequestHeader set X-Forwarded-Scheme "https" 

y en /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> 

Aún no hay galletas seguras. ¿Alguna sugerencia?

Respuesta

5

No pude conseguir que esto funcione con Jetty 6. Después de actualizar a Jetty 9, lo puse en funcionamiento.

Lo cambié en /etc/jetty.xml. Se comentó a cabo y yo sin comentar que:

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

En el proxy inverso (ahora nginx) proxy_set_header X-reenviado-Proto se utiliza contar embarcadero si la solicitud fue http o 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; 
} 

Finalmente, en el web.xml de la aplicación web, se habilitan cookies de sesión seguras y de solo 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> 
Cuestiones relacionadas