2010-08-24 5 views
8

Lasciatemi spiegare la mia situazione.Posso eseguire Tomcat in modo sicuro sulla porta 443 e non correttamente su 8080

Attualmente, ho un sacco di applicazioni in esecuzione su Tomcat 6, sulla porta predefinita 8080.

Ho appena creato alcune applicazioni che avranno bisogno di un log in. Ho intenzione di acquistare un certificato SSL per l'installazione su questo server.

Non mi piace l'idea di utilizzare la porta 8443 perché rende l'URL più complicato. Se eseguo Tomcat sulla porta 80, dovrei cambiare dozzine di link e dovrei eseguire Tomcat come root (anziché come tomcat).

C'è qualche problema nell'esecuzione di applicazioni non sicure sulla porta 8080 ma con esecuzione protetta sulla porta 443?

sto immaginando il mio setup avrà gli URL che assomigliano a questo:

http://mydomain.com:8080/report/controller?id=weather

https://mydomain.com/secure/controller?id=profile

è possibile?

+3

non vi necessario eseguire Tomcat come root per la porta 443? – erickson

risposta

5

Sì, è perfettamente OK. Basta configurare i connettori per utilizzare le rispettive porte. Ma per il 443 immagino che sia richiesta anche la root.

+0

Un avvertimento è se sei su * nix ed esegui come non root, poiché solo root può eseguire il binding alle porte <1024, ma non dovrebbe essere difficile trovare documenti su come ovviare a questo problema. – nos

+1

La cosa normale è associare alla porta e quindi passare a un utente normale con privilegi minimi. Non so come Tomcat è impostato per gestirlo (senza l'httpd di Apache in primo piano). –

36

Setup Connettore HTTP su 8080 e connettore HTTPS su 8443. Nella dichiarazione <Connector> aggiungere l'attributo proxyPort e impostarlo sulla porta HTTP e HTTPS predefinita (rispettivamente 80 e 443). Imposta la regola di reindirizzamento del firewall da 80 a 8080 e da 443 a 8443. Quindi il server accetterà URL normali http e https senza la necessità di specificare i numeri di porta.

Di seguito è riportata una dichiarazione di esempio di questi connettori.

<Connector 
    maxSpareThreads='75' 
    port='8080' 
    proxyPort='80' 
    enableLookups='false' 
    maxThreads='150' 
    connectionTimeout='20000' 
    disableUploadTimeout='true' 
    minSpareThreads='5' 
    maxHttpHeaderSize='8192' 
    redirectPort='443' 
    acceptCount='200' 
/> 

<Connector 
    SSLEnabled='true' 
    keystoreFile='/path/to/keystore.jks' 
    maxSpareThreads='75' 
    port='8443' 
    proxyPort='443' 
    algorithm='SunX509' 
    enableLookups='false' 
    secure='true' 
    maxThreads='150' 
    connectionTimeout='20000' 
    disableUploadTimeout='true' 
    scheme='https' 
    minSpareThreads='5' 
    maxHttpHeaderSize='8192' 
    sslProtocol='SSL' 
    acceptCount='200' 
    clientAuth='false' 
/> 

Ed ecco alcuni redirect comandi iptables:

# Redirect external packets 
-A PREROUTING -j NAT-Port-Redirect 

# redirect http traffic 
-A NAT-Port-Redirect -p tcp -m tcp --dport 80 -j REDIRECT --to-ports 8080 
# redirect https traffic 
-A NAT-Port-Redirect -p tcp -m tcp --dport 443 -j REDIRECT --to-ports 8443 
+3

Sebbene il poster abbia contrassegnato la risposta sopra come una risposta, la tua soluzione è molto migliore. –

+5

Ottima e pulita soluzione. L'ho fatto per il reindirizzamento su Ubuntu: iptables -t nat -A PREROUTING -i eth0 -p tcp -dport 443 -j REDIRECT --to-port 8443. – hsnm

+0

Ho seguito i passaggi precedenti. Ma ho ottenuto Codice di errore: ERR_SSL_VERSION_OR_CIPHER_MISMATCH –