Кот за спиной Apache:Использование SSL с помощью j_security_check

StackOverflow https://stackoverflow.com/questions/1458977

Вопрос

У меня небольшая проблема с использованием 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 либо перенаправлять relative (чтобы не менять https на http), либо перенаправлять на 443 вместо 8443?Это то, что я должен применять с помощью Tomcat или Apache mod_proxy?

Ваше здоровье

Ник

Это было полезно?

Решение

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

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top