À quoi sert le port de redirection dans Tomcat?

13

Il est difficile de donner un sens à la documentation de Tomcat et en consultant server.xml, vous trouverez une multitude de ports qui peuvent être difficiles à comprendre car ils ne sont pas vraiment expliqués correctement ou de manière approfondie dans la documentation.

Par exemple, cette ligne dans le fichier de configuration server.xml

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

Et ici, vous pouvez trouver un autre port de redirection:

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

Je comprends ce que fait le port du connecteur. Dans le premier cas, vous l'utilisez pour créer un travailleur dans Apache et l'envoyer là-bas, dans le second, vous ouvrez un port pour accéder directement à Tomcat. Cependant, en ce qui concerne le port de redirection, les choses deviennent floues.

Voici l'explication donnée par la documentation tomcat pour le port ajp:

Si ce connecteur prend en charge les demandes non SSL et qu'une demande est reçue pour laquelle une correspondance nécessite un transport SSL, Catalina redirigera automatiquement la demande vers le numéro de port spécifié ici.

Je choisis toujours un port de redirection aléatoire sur 1024 et cela fonctionne,

Mais quand cela entrerait-il en pratique? Comment savoir quand une demande nécessite un transport SSL?

J'ai un serveur satellite exécutant un module tomcat. Ce module entre en vigueur en redirigeant le trafic vers le connecteur ajp avec apache depuis le serveur principal et vice versa.

Dans le serveur principal, https est appliqué dans apache. Cela signifie-t-il que toutes les demandes sont envoyées au serveur satellite cryptées ou en texte brut? Je sais que si j'accède au serveur satellite via le port 8080, il n'est pas chiffré, mais je me demande si cela s'applique également au trafic redirigé vers le serveur principal et où ce port de redirection entre-t-il en vigueur.

Ulukai
la source

Réponses:

6

Comme il est défini dans la documentation, le port de redirection apparaîtra lorsque la demande SSL arrivera sur le serveur et comme le port du connecteur http ne peut pas gérer les demandes SSL, il sera redirigé vers le port défini. Mais leur doit être une autre section définie dans le fichier server.xml dans laquelle le port de redirection défini servira de port de connecteur pour gérer les demandes SSL. Par exemple, si vous souhaitez que les requêtes http soient traitées par le port 80 et les requêtes https par le port 443, le fichier server.xml ressemblera à ceci:

<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 est le certificat SSL de votre site Web.

Si vous ne configurez pas l'autre section avec le port de redirection comme port de connecteur, vos demandes ne seront pas redirigées vers ce port. Par exemple, si le site Web ne prend pas en charge les demandes SSL et que vous essayez d'envoyer une demande https à ce site Web, une erreur comme Échec de la connexion sécurisée s'affiche sur le navigateur.

Gaurav Pundir
la source
C'est suffisant. Qu'en est-il de la configuration pour ajp par opposition à http? Est-ce également une bonne idée d'utiliser des ports inférieurs à 1024 comme vous le mentionnez? Cela signifierait exécuter tomcat en tant que root et ce n'est pas bon.
Ulukai
1
Je n'ai pas beaucoup d'idée sur ajp, mais la redirection doit fonctionner de la même manière que http. À propos de l'utilisation des ports sous 1024, c'est à vous de décider. 80 et 443 sont des ports par défaut pour le protocole https & https, pas besoin de les mentionner explicitement dans l'url. Si vous souhaitez utiliser des ports non standard, c'est à vous de décider. Exécutant également tomcat avec root, cela dépend de l'application déployée. Si vous ne faites pas confiance à votre application avec une perspective de sécurité, vous ne devez pas exécuter tomcat avec root. Vous pouvez également utiliser apache ou nginx comme proxy pour exécuter sur les ports 80 et 443 et rediriger votre demande vers le tomcat.
Gaurav Pundir
Je noterai que cela iptablesfonctionne également bien pour rediriger le trafic vers Tomcat, entre autres approches .
SeldomNeedy
Cette explication est incomplète. Si vous redirigez de non-SSL vers un port SSL, il ne suffit pas d'inclure le connecteur cible dans server.xml. Il est également nécessaire de configurer la section <security-constraint> dans web.xml. Voir stackoverflow.com/questions/9526425/…
luiscolorado