web-dev-qa-db-fra.com

tomcat 7: redirige automatiquement les requêtes https vers le port 8443

Sur Tomcat7, notre application Web s'exécute via https sur le port 8443 et fonctionne très bien sauf que nous ne pouvons pas rediriger le port par défaut https (443) à 8443 Par conséquent, le ': 8443' doit être inclus dans l'URL chaque fois que nous devons accéder à l'application. J'inclus certaines parties de notre fichier server.xml. Que faut-il faire pour pouvoir charger nos pages sans avoir à saisir les informations de port dans l'URL?

 <Connector port="8080" protocol="HTTP/1.1"
           connectionTimeout="20000"
           URIEncoding="UTF-8"
           enableLookups="false"
           redirectPort="8443" />

<Connector port="80" protocol="HTTP/1.1"
           connectionTimeout="20000"
           URIEncoding="UTF-8"
           enableLookups="false"
           redirectPort="8443" />

<Connector port="443" protocol="HTTP/1.1"
           connectionTimeout="20000"
           URIEncoding="UTF-8"
           enableLookups="false"
           redirectPort="8443" />
...

<Connector port="8443"
            maxHttpHeaderSize="65536"
            scheme="https"
            secure="true"
            SSLEnabled="true"
            clientAuth="false"
            enableLookups="true"
            acceptCount="100"
            disableUploadTimeout="true"
            maxThreads="200"
            sslProtocol="TLS"
            keystoreFile="/toto/has/a/certificate.jks"
            keystorePass="totohasapassword"
            protocol="org.Apache.coyote.http11.Http11NioProtocol" />
9
jon

J'ai trouvé une solution simple sur coderanch en utilisant iptables: http://coderanch.com/t/601907/Tomcat/SSL-work

Voici la ligne à saisir:

iptables -t nat -A PREROUTING -p tcp --dport 443 -j REDIRECT --to-port 8443

Nouvelle modification

Voici ma réponse complète maintenant. Nous avons eu un problème avec la réponse précédente car lorsque nous appelions l'URL depuis http, la redirection était correcte mais ajoutait toujours ": 8443" à la fin, ce qui n'était pas très agréable.

Donc en termes d'iptable, voici ce que nous avons écrit:

Sudo iptables -t nat -I PREROUTING -p tcp --destination-port 80 -j REDIRECT --to-ports 8080
Sudo iptables -t nat -A OUTPUT -p tcp -d <your_ip_address>,<your_ip_address>  --dport 80 -j  REDIRECT --to-port 8080
Sudo iptables -t nat -I PREROUTING -p tcp --destination-port 443 -j REDIRECT --to-ports 8443

Maintenant, il est également important d'ajouter des redirections dans le fichier de configuration Tomcat server.xml :

<Connector port="8080"
           enableLookups="false"
           redirectPort="443" />

<Connector port="443" protocol="HTTP/1.1"
           enableLookups="false"
           redirectPort="8443" />

Voilà, redémarrez Tomcat et tout devrait fonctionner. Je ne suis pas un expert des configurations iptables, veuillez donc valider avec les administrateurs système avant de modifier toute configuration existante en production.

16
jon