On 17/06/2015 19:08, Jeffrey Janner wrote:
> I’ve been deploying letting Tomcat do it all when it came to connectors
> and SSL, with the app forcing everything to SSL in the
> <security-constraints> section.  Now I’m setting up a haproxy front-end
> that will both terminate the SSL and take care of the redirect from HTTP
> to HTTPS for me and tomcat only running a standard HTTP port on 8080.
> 
> So my question is, Is it still important for the app to know that it
> operating “secure”, and if so, what settings are a must?

Yes it is extremely important.

You need secure="true" for everything received over HTTPS and
secure="false" for everything received over HTTP.

It is simpler in your case since Tomcat only ever sees traffic that has
been received over HTTPS.

There are several ways to ensure secure="true"

In your case, setting on the connector is the simplest and best option.

If proxying over AJP, the AJP connector takes care of it.

The RemoteIP[Valve|Filter] or the SSLValve can handle this if proxying
over HTTP.


There are several reasons it is important (the first reason is the big one):

1. cookies created over secure connections will have the secure flag set
which will ensure that browsers never send the cookie over HTTP. I once
watched a customer go very white while I was explaining this when they
realised that their banking app was sending authentication cookies over
HTTP connections.

2. The user data constraint in web.xml will only be satisfied if
secure="true"

HTH,

Mark


> 
> Here is the old setup:
> 
>  
> 
> SERVER.XML:
> 
> <Service name="Catalina">
> 
>     <Connector address="${IP_ADDRESS}" port="80" maxHttpHeaderSize="8192"
> 
>                maxThreads="50" enableLookups="false" redirectPort="443"
> acceptCount="100"
> 
>                connectionTimeout="20000" disableUploadTimeout="true"
> compression="on"
> 
>       
> compressableMimeType="text/html,text/xml,text/plain,text/css,text/csv,text/javascript,text/rtf,text/richtext"
> 
>     />
> 
>     <Connector address="${IP_ADDRESS}" port="443" maxHttpHeaderSize="8192"
> 
>                maxThreads="150" enableLookups="false" acceptCount="100"
> 
>                connectionTimeout="20000" disableUploadTimeout="true"
> compression="on"
> 
>       
> compressableMimeType="text/html,text/xml,text/plain,text/css,text/csv,text/javascript,text/rtf,text/richtext"
> 
>                scheme="https" secure="true" SSLEnabled="true"
> 
>                SSLHonorCipherOrder="true"
> 
>                SSLCipherSuite="list-of-ciphers"
> 
>                SSLCertificateFile="path-to-server.crt"
> 
>                SSLCertificateKeyFile="path-to-server.key"
> 
>                SSLCertificateChainFile="path-to-server_chain.crt"
> 
>                SSLPassword="password" />
> 
>     <Engine name="Catalina" defaultHost="localhost ">
> 
>       <Host name="localhost " appBase=" webapps"
> 
>        unpackWARs="true" autoDeploy="false" deployXML = "false">
> 
>         <Valve className="org.apache.catalina.valves.AccessLogValve"
> directory="logs"
> 
>                prefix="localhost_access_log." suffix=".txt"
> 
>                pattern="%h %l %u %t &quot;%r&quot; %s %b" />
> 
>       </Host>
> 
>     </Engine>
> 
>   </Service>
> 
>  
> 
> CONTEXT.XML:  No tomcat-level parameters specified
> 
>  
> 
> WEB.XML: (only the important bits, assume servlets and filters won’t change)
> 
>     <security-constraint>
> 
>         <web-resource-collection>
> 
>             <web-resource-name>Everything</web-resource-name>
> 
>             <url-pattern>/*</url-pattern>
> 
>         </web-resource-collection>
> 
>         <user-data-constraint>
> 
>             <transport-guarantee>CONFIDENTIAL</transport-guarantee>
> 
>         </user-data-constraint>
> 
>     </security-constraint>
> 
>  
> 
> Here is the new setup:
> 
> SERVER.XML:
> 
> <Service name="Catalina">
> 
>     <Connector port="${tomcatPort}" protocol="HTTP/1.1"
> 
>                connectionTimeout="20000"
> 
>                redirectPort="8443" />
> 
>    <Engine name="Catalina" defaultHost="localhost " jvmRoute=”serverX”>
> 
>       <Host name="localhost " appBase=" webapps"
> 
>        unpackWARs="true" autoDeploy="false" deployXML = "false">
> 
>         <Valve className="org.apache.catalina.valves.AccessLogValve"
> directory="logs"
> 
>                prefix="localhost_access_log." suffix=".txt"
> 
>                pattern="%h %l %u %t &quot;%r&quot; %s %b" />
> 
>       </Host>
> 
>     </Engine>
> 
>   </Service>
> 
>  
> 
> CONTEXT.XML: no changes
> 
> WEB.XML: drop the <security-constraints> section?
> 
>  
> 
> Am I missing something from a security standpoint here?
> 
> And yes, I’m aware I need to adjust some parameters in the <Connector>
> that are left out in the second example.  I’m just interested in things
> like secure-cookie, etc.
> 
>  
> 
>  
> 
> Jeffrey Janner
> 
> Sr. Network Administrator
> 
> jeffrey.jan...@polydyne.com <mailto:first.l...@polydyne.com>
> 
> *PolyDyne Software Inc.*
> 
> Main:   512.343.9100
> 
> Direct:  512.583.8930  
> 
>  
> 
> */ /**/cid:image002.png@01CC0FB7.4FF43CE0/*
> 
> */ /*
> 
> *Speed, Intelligence & Savings in Sourcing*
> 
>  
> 


---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org
For additional commands, e-mail: users-h...@tomcat.apache.org

Reply via email to