On 01/07/2010 03:42, John-Paul Ranaudo wrote:
> I have now realized the root of the problem. The cause of the problem is
> that the load balancer will sometimes proxy an HTTPS request as an HTTP
> request so when we send back a redirect we send it back with the wrong
> scheme (HTTP). So here is my current configuration:
> 
> <Connector port="80" protocol="HTTP/1.1" connectionTimeout="20000" />
> <Connector port="443" protocol="HTTP/1.1" connectionTimeout="20000"
> scheme="https" secure="true" />
> 
> Port 443 is not really handling the SSL because the load balancer is. I set
> "secure" to true to mark the connections as secure to tomcat and not needing
> SSL decryption as recommended.
> 
> The one framework in which uses HTTPS will send most request as HTTPS
> however the load balancer (for unknown reasons) proxies the request as HTTP
> (port 80). So now when we send a redirect it's to HTTP (port 80) not HTTPS
> (port 443). It should be port 443.
> 
> Any idea how I can handle this in a connector configuration?
> 
> My first thought is to create two virtual hosts which will then have 2
> different server.xml's. If I do this I can tell tomcat to proxy all HTTP
> (port 80) requests to port 443 but only for that one virtual host (which
> contains the problem framework).
> 
> Any thoughts?
> 
> Thanks and Regards,
> 
> John-Paul Ranaudo
> Application Architect
> 
> On Fri, Jun 25, 2010 at 2:22 PM, Christopher Schultz <
> ch...@christopherschultz.net> wrote:
> 
> John-Paul,
> 
> On 6/25/2010 1:40 PM, John-Paul Ranaudo wrote:
>>>> Ok, so I am assuming I do not have to setup SSL (certificates etc) since
> my
>>>> load balancer is decoding the connection. So even if the load balancer is
>>>> "decoding" the connection I still have to have SSLEnabled="true"?
> 
> No, Pid was saying that setting one of the two options (SSLEnabled and
> secure) to "true" makes sense... setting both to "false" is not
> particularly useful.
> 
>>>> However if
>>>> I do, does this not make Tomcat try and decode the "connection"?
> 
> Yes, setting SSLEnabled="true" will make the connector try to perform
> the decryption.
> 
>>>> *Which is the root of my problem. How to use the HTTPS protocol without
>>>> having Tomcat decrypt the connection since the load balancer has done
> this
>>>> for me. *
> 
> It sounds like you just want Tomcat to know that the connection is
> secure, but without actually doing the decryption. You should be able to
> do it like this:
> 
> <Connector
>  port="443" <- this is the port that the LB talks to
>   protocol="HTTP/1.1"
>  connectionTimeout="20000"
>   scheme="https" <- so request.getScheme returns correct value
>  secure="true" <- so request.isSecure returns correct value
> />
> 
> There's no need to set SSLProtocol or SSLEnabled (you're not using SSL,
> remember), they will default to "false".
> 
>>>> The link to the documentation is correct. However the properties of the
>>>> connector are confusing to me. For example "SSLEnabled" if fairly obvious
>>>> but "secure" it confusing. Not sure under what context I need to set
> this.
> 
> You can set these to different values, for instance, to instruct the
> server to report connections as secure even when they aren't actually
> tunneled through SSL (as above).
> 
>>>> The application always uses relative paths so whatever protocol the
>>>> framework is using will be what is returned in the page.
> 
> Good. How about redirects?
> 
>>>> I have also tried setting the redirect port thinking I can redirect
> requests
>>>> to 443 to the port 80 internally and scheme to 'https'. This actually had
>>>> the effect of making one framework (the one with https) work but broke
> the
>>>> other.
> 
> The redirect port is only used when the server decides that a webapp
> requires a secure connection (see <transport-guarantee> in web.xml), and
> the server issues a redirect to the client to upgrade the connection to
> HTTPS. The default is 443, so if a client arrives on port 80, they will
> be redirected to the same URL except with https:// on the front and the
> port added if it's not the default of 443.
> 
> Now, you have to remember that the port number that does out attached to
> a redirect URL (say, https://myhost:443/foo/bar) is probably the port on
> the load-balancer the client will hit, not necessarily the port on the
> local machine. The following configuration is perfectly legitimate:
> 
> <!-- non-secure connector -->
> <Connector
>  port="8080"
>   protocol="HTTP/1.1"
>  connectionTimeout="20000"
>   redirectPort="443"
> />
> 
> <!-- secure connector -->
> <Connector
>  port="8443"
>   protocol="HTTP/1.1"
>  connectionTimeout="20000"
>   scheme="https" <- so request.getScheme returns correct value
>  secure="true" <- so request.isSecure returns correct value
> />
> 
> As you see, redirectPort is set to a port that isn't being handled by
> Tomcat. That's okay, because the load-balancer is presumably handling
> requests to myhost:443, terminating the SSL, and proxying the cleartext
> HTTP request to the "8443" connector, which then reports secure="true"
> to anyone who asks.

Are you using a transport-guarantee element in your web.xml?


p


> Hope that helps,
> -chris
>>
---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org
For additional commands, e-mail: users-h...@tomcat.apache.org
>>
>>


Attachment: signature.asc
Description: OpenPGP digital signature

Reply via email to