2012-04-06 1 views
9

Ho cercato ovunque ma non riesco a trovare una soluzione chiara per la seguente situazione:Tomcat dietro Apache e SSL

Abbiamo un'applicazione web (Grails + Primavera di sicurezza) che è in esecuzione in Tomcat, dietro apache. La parte dell'applicazione deve essere eseguita su https, quindi utilizzando Spring Security Channel Security, ogni volta che si accede a una parte dell'applicazione protetta, Spring reindirizzerà a https con un codice di stato 302.

Ora, tomcat è impostato per la conoscenza degli https e dei certificati, quindi sa come gestire ssl. Infatti, quando apache side-stepping andando direttamente all'URL e alla porta per colpire direttamente tomcat, tutto funziona al 100%.

Il problema ora si verifica quando si inserisce apache di fronte a tomcat. La configurazione di apache che abbiamo al momento funziona bene per le parti non sicure dell'applicazione. Stiamo usando mod_jk per proxy apache e tomcat.

Tuttavia, non appena si tenta di andare in una parte sicura della richiesta, Primavera sarà favore usare, colpirà la parte

<VirtualHost _default_:443> ... </VirtualHost> 

della configurazione di apache ... e questo è dove il il problema inizia

Da quello che ho letto, è possibile che apache, tramite mod_jk, passi la gestione di ssl a tomcat. Ma non possiamo sembrare che la configurazione sia corretta. Dato che tomcat è già configurato per ssl, sa dove sono i certificati e Spring Security è configurato, vorremmo che Tomcat gestisse tutti gli ssl e apache si limitasse a metterli in cast di tomcat.

Questo è possibile o mi manca qualcosa? Qualcuno ha alcune istruzioni chiare su come impostare questo? Qualsiasi aiuto sarà molto apprezzato.

Stiamo utilizzando Apache 2.2 e Tomat 7.0.27

Grazie

risposta

5

Non si può semplicemente inoltrare il traffico SSL/TLS per Tomcat di Apache. La tua connessione SSL termina con Apache, quindi dovresti invertire il traffico verso Tomcat (in questo caso raramente è utile SSL), oppure puoi connettere i client direttamente a Tomcat e lasciare che gestisca la connessione SSL.

Non sono sicuro di dove abbia letto che mod_jk può trasmettere la stessa connessione SSL a Tomcat. Dovrebbe essere necessario inoltrare direttamente la presa, ignorando quindi il protocollo AJP utilizzato da mod_jk (a proposito, mod_proxy_ajp è il nuovo modo, o anche mod_proxy_http).

Non sono sicuro del motivo per cui si desidera che Apache si trovi di fronte a Tomcat se si desidera che Tomcat gestisca comunque le richieste SSL. Se questo ha a che fare con numeri di porta o qualcosa del genere, usa una regola del firewall per inoltrare la porta 443 alla porta Tomcat.

Inoltre, prestare attenzione al modo in cui vengono eseguiti questi reindirizzamenti automatici da HTTP a HTTPS: they only happen after the initial HTTP request has been made.

+1

Sono d'accordo. Soprattutto per il punto mod_proxy_ *. Utilizziamo Apache che gestisce il nostro SSL e quindi mod_proxy_http per inoltrare le richieste a Tomcat. Funziona alla grande. E super semplice configurazione. – Gregg

0

Dal tuo post, non riesco a capire se stai riscontrando un problema durante il caricamento di ssl su Apache o se, dato che hai determinate parti dell'app su http, Apache non reindirizza mai su ssl. Si noti che è perfettamente corretto avere più "segmenti" su ssl (che significa utente -> Apache su ssl e Apache -> tomcat su ssl).
1.Se il problema è far sì che ssl funzioni su Apache, è necessario assicurarsi che ssl sia configurato correttamente sul lato Apache.
2. Se il problema è "reindirizzamento", provare e mantenere URL separati per http e https. Come /something.mysite.com/non_ssl/ e /something.mysite.com/ssl/. Questo renderà più facile scrivere le regole in Apache.