2010-08-24 25 views
8

Déjenme explicar mi situación.¿Puedo ejecutar Tomcat de forma segura en el puerto 443 e inseguro en 8080

Actualmente, tengo una gran cantidad de aplicaciones que se ejecutan en Tomcat 6, en el puerto predeterminado 8080.

acabo de crear algunas aplicaciones que necesitarán un registro. Me voy a comprar un certificado SSL para instalar en este servidor.

No me gusta la idea de usar el puerto 8443 porque hace que la URL sea más complicada. Si ejecuto Tomcat en el puerto 80, tendría que cambiar docenas de enlaces y tendría que ejecutar Tomcat como root (en lugar de Tomcat).

¿Hay algún problema al ejecutar las aplicaciones inseguras en el puerto 8080 pero teniendo la ejecución segura en el puerto 443?

estoy imaginando mi configuración tendrá URL que tener este aspecto:

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

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

Es esto posible?

+3

¿No le gustaría tener que ejecutar Tomcat como root para el puerto 443? – erickson

Respuesta

5

Sí, está perfectamente bien. Simplemente configure los conectores para usar los puertos respectivos. Pero para 443 supongo que también se requerirá root.

+0

Una advertencia es si está en * nix y se ejecuta como no root, ya que solo root puede vincularse a los puertos <1024, pero no debería ser difícil encontrar documentos sobre cómo solucionarlo. – nos

+1

Lo habitual es vincularse al puerto y luego pasar a un usuario normal con privilegios mínimos. No sé cómo se configura Tomcat para manejar eso (sin Apache httpd en el frente). –

36

Configure el conector HTTP en el conector 8080 y HTTPS en 8443. En su declaración <Connector>, agregue el atributo proxyPort y configúrelo en el puerto HTTP y HTTPS predeterminado (80 y 443, respectivamente). Configure la regla de redirección de firewall de 80 a 8080 y de 443 a 8443. Luego, el servidor aceptará las URL http y https regulares sin la necesidad de especificar números de puerto.

A continuación se muestra una declaración de muestra de estos conectores.

<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' 
/> 

Y aquí están algunos redirigir comandos de 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

Aunque el cartel marcó la respuesta anterior como respuesta, su solución es mucho mejor. –

+5

Solución genial y limpia. Lo hice para redireccionar en Ubuntu: iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 443 -j REDIRECT - a-port 8443. – hsnm

+0

He seguido los pasos anteriores. Pero tengo Código de error: ERR_SSL_VERSION_OR_CIPHER_MISMATCH –

Cuestiones relacionadas