Tomcat за Apache: использование SSL с j_security_check - PullRequest
1 голос
/ 22 сентября 2009

У меня небольшая проблема с использованием SSL на Tomcat, который стоит за Apache. Я использовал Google все утро, чтобы попытаться найти хорошее решение, но пока ничего.

Как часть моей конфигурации SSL VirtualHost у меня есть

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

Это работает нормально в большинстве случаев, но j_security_check после успешного входа с https://mysite.com/MyApp, перенаправляет на страницу HTTP http://mysite.com/MyApp/secret.html вместо того, чтобы оставить ее как страницу HTTPS https://mysite.com/MyApp/secret.html. Это не только логин, который является конфиденциальным, но и данные, которые передаются, поэтому мне нужно сохранить его HTTPS. Когда я добавляю в приложение защитные ограничения

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

он перенаправляет на https://mysite.com:8443/MyApp/secret.html. Я понимаю, что он перенаправляет на 8443, потому что для server.xml SSL настроен на 8443, но, так как он проксируется через Apache, на самом деле он должен быть 443.

Я понимаю, что у меня нет ProxyPassReverse, но это не то, что я могу добавить в раздел файла конфигурации Apache

Как я могу заставить j_security_check либо перенаправить родственника (чтобы не менять https на http), либо перенаправить на 443 вместо 8443? Это то, что я должен применять через Tomcat или Apache mod_proxy?

Приветствия

Nik

1 Ответ

1 голос
/ 22 сентября 2009

Вы действительно не можете рассчитывать на то, что Tomcat выполнит перенаправление на SSL для вашей настройки. Вам нужно написать фильтр для перенаправления самостоятельно.

Для вашей конкретной настройки это может работать, если вы добавите redirectPort следующим образом:

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

Пожалуйста, удалите разъем HTTPS. Это может привести к путанице в некоторых версиях Tomcat, если у вас есть и redirectPort, и HTTPS-коннектор. Похоже, вы все равно не хотите, чтобы люди получали доступ к вашему HTTPS-порту.

Это работает, только если у вас есть Apache и Tomcat на одной машине. В производственной среде это может быть не так.

...