¿Para qué sirve el puerto de redireccionamiento en Tomcat?

13

Es difícil dar sentido a la documentación de Tomcat y al mirar server.xml encontrará una ensalada de puertos que puede ser difícil de entender porque en realidad no se explica adecuadamente, o extensamente, en la documentación.

Por ejemplo, esta línea en el archivo de configuración server.xml

<Connector port="8345" protocol="AJP/1.3" redirectPort="9875" />

Y aquí puedes encontrar otro puerto de redireccionamiento:

<Connector executor="tomcatThreadPool"
               port="8080" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443" /> 

Entiendo lo que hace el puerto del conector. En el primer caso, lo usa para crear un trabajador en apache y enviarlo allí, en el segundo abre un puerto para acceder directamente a tomcat. Sin embargo, cuando se trata del puerto de redireccionamiento, las cosas se vuelven confusas.

Aquí está la explicación dada por la documentación de tomcat para el puerto ajp:

Si este conector admite solicitudes que no son SSL, y se recibe una solicitud para la que se requiere transporte SSL, Catalina redirigirá automáticamente la solicitud al número de puerto especificado aquí.

Siempre elijo un puerto de redireccionamiento aleatorio sobre 1024 y funciona,

¿Pero cuándo entraría esto en práctica? ¿Cómo sabe cuándo una solicitud requiere transporte SSL?

Tengo un servidor satelital que ejecuta un módulo tomcat. Este módulo entra en vigor al redirigir el tráfico al conector ajp con apache desde el servidor principal y viceversa.

En el servidor principal, https se aplica en apache. ¿Significa esto que todas las solicitudes se envían al servidor satelital encriptadas o en texto plano? Sé que si accedo al servidor satelital a través del puerto 8080 no está encriptado, pero me pregunto si esto también se aplica al tráfico que se redirige al servidor principal y dónde entra en vigencia este puerto de redireccionamiento.

Ulukai
fuente

Respuestas:

5

Como se define en la documentación, el puerto de redireccionamiento aparecerá en la imagen cuando la solicitud SSL llegue al servidor y dado que el puerto del conector http no puede manejar las solicitudes SSL, redirigirá al puerto definido. Pero debe ser otra sección definida en el archivo server.xml en el que el puerto de redireccionamiento definido actuará como un puerto conector para manejar las solicitudes SSL. Por ejemplo, si desea que las solicitudes http sean manejadas por el puerto 80 y la solicitud https por el puerto 443, el server.xml se verá así:

<Connector port="80" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="443" />

<Connector port="443" protocol="org.apache.coyote.http11.Http11Protocol" SSLEnabled="true" scheme="https" secure="true" sslProtocol="TLS" keystoreFile="/path/to/kestorefile" keystorePass="my_keystore_password"/>

Keystorefile es el certificado SSL de su sitio web.

Si no configura la otra sección con el puerto de redireccionamiento como puerto de conector, sus solicitudes no serán redirigidas a ese puerto. Por ejemplo, si el sitio web no admite solicitudes SSL e intenta enviar una solicitud https a ese sitio web , se mostrará un error como Error de conexión segura en el navegador.

Gaurav Pundir
fuente
Lo suficientemente justo. ¿Qué pasa con la configuración de ajp en lugar de http? ¿También es una buena idea usar puertos menores de 1024 como usted menciona? Eso significaría ejecutar tomcat como root y eso no es bueno.
Ulukai
1
No tengo mucha idea sobre ajp, pero la redirección debe funcionar igual que http. Acerca del uso de puertos inferiores a 1024, depende totalmente de usted. 80 y 443 son puertos predeterminados para el protocolo https y https, no es necesario mencionarlos explícitamente en la url. Si desea utilizar puertos no estándar, depende de usted. También ejecuta tomcat con root, depende de la aplicación implementada. Si no confía en su aplicación con una perspectiva de seguridad, no debe ejecutar tomcat con root. A la inversa, puede usar apache o nginx como proxy para ejecutar en los puertos 80 y 443 y redirigir su solicitud al tomcat.
Gaurav Pundir
Notaré que iptablestambién funciona bien para redirigir el tráfico a Tomcat, entre otros enfoques .
SeldomNeedy
Esta explicación es incompleta. Si está redirigiendo desde un puerto que no es SSL a un puerto SSL, no es suficiente incluir el conector de destino en server.xml. También es necesario configurar la sección <security-constraint> en web.xml. Ver stackoverflow.com/questions/9526425/…
luiscolorado el