Question

J'ai un petit problème avec l'utilisation de SSL sur un Tomcat qui est derrière Apache. Je l'ai utilisé Google toute la matinée pour essayer de trouver une bonne solution, mais rien jusqu'à présent.

Dans le cadre de ma configuration SSL VirtualHost je

<Location /MyApp/>
  ProxyPass http://localhost:8080/MyApp/
</Location>

Cela fonctionne très bien pour la plupart des cas, mais j_security_check, après une connexion réussie de https://mysite.com/MyApp , redirige vers une page HTTP http://mysite.com/MyApp/secret.html au lieu de laisser comme une page HTTPS https://mysite.com/MyApp/secret.html . Il est non seulement la connexion qui est confidentiel, mais les données qui sont transmises, donc je dois le garder HTTPS. Quand j'ajoute à la sécurité-de l'application contraintes

<user-data-constraint>
  <transport-guarantee>CONFIDENTIAL</transport-guarantee>
</user-data-constraint>

https://mysite.com:8443/MyApp/secret.html . Je me rends compte qu'il redirige vers 8443 parce que server.xml SSL est configuré pour 8443, mais comme cela est par Apache proxy, il devrait en fait 443.

Je me rends compte que je n'ai pas ProxyPassReverse, mais ce n'est pas quelque chose que je peux ajouter dans une section du fichier de configuration d'Apache

Comment puis-je forcer j_security_check soit redirect relative (afin de ne pas changer https à http) ou rediriger vers 443 au lieu de 8443? Est-ce quelque chose que je devrais appliquer via mod_proxy de Tomcat ou Apache?

Vive

Nik

Était-ce utile?

La solution

Vous ne pouvez pas vraiment compter sur Tomcat pour faire la redirection vers SSL pour votre configuration. Vous devez écrire un filtre pour faire vous-même redirigent.

Pour votre configuration spécifique, il pourrait fonctionner si vous ajoutez redirectPort comme ça,

<Connector ... port="8080" redirectPort="443"/>

S'il vous plaît retirer le connecteur HTTPS. Il pourrait confondre une version de Tomcat lorsque vous avez à la fois redirectPort et le connecteur HTTPS. On dirait que vous ne voulez pas que les gens d'accéder à votre port HTTPS de toute façon.

Cela ne fonctionne que lorsque vous avez Apache et Tomcat sur la même machine. Dans un environnement de production, qui peuvent ne pas être le cas.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top