Вопрос по spring-security, tomcat, ssl, apache, grails – Tomcat за Apache и SSL

9

Я искал везде, но не могу найти четкого решения для следующей ситуации:

У нас есть веб-приложение (Grails + Spring Security), которое работает в tomcat, за Apache.Part приложения должно работать по протоколу https, поэтому при использовании Spring Security Channel Security при каждом переходе к защищенной части приложения Spring перенаправляет вас на https с кодом состояния 302.

Теперь tomcat настроен так, чтобы знать о https и сертификатах, поэтому он знает, как обращаться с ssl. Фактически, когда сторонний apache, переходя непосредственно к URL-адресу и порту для прямого доступа к tomcat, все работает на 100%.

Проблема теперь возникает, когда Apache ставится перед tomcat. Конфигурация apache, которая у нас есть на данный момент, отлично работает для незащищенных частей приложения. Мы используем mod_jk для прокси Apache и Tomcat.

Однако, как только вы попытаетесь перейти в безопасную часть приложения, Spring перенаправит вас,

<code><VirtualHost _default_:443> ... </VirtualHost>
</code>

часть конфигурации Apache ... и здесь начинается проблема.

Из того, что я прочитал, apache через mod_jk может передать обработку ssl tomcat. Но мы не можем получить правильную конфигурацию для этого. Так как tomcat уже настроен для ssl, он знает, где находятся сертификаты, и Spring Security настроен, мы хотели бы, чтобы tomcat обрабатывал все ssl, и apache просто для того, чтобы заложить его в tomcat.

Это вообще возможно, или я что-то упустил? У кого-нибудь есть четкая инструкция как это настроить? Любая помощь будет оценена.

Мы используем Apache 2.2 и Tomat 7.0.27

Спасибо

Ваш Ответ

2   ответа
5

Вы не можете просто ретранслировать трафик SSL / TLS на Tomcat из Apache. Либо ваше SSL-соединение заканчивается в Apache, а затем вы должны перенаправить трафик через прокси-сервер Tomcat (SSL редко используется в этом случае), либо вы заставляете клиентов подключаться к Tomcat напрямую и позволяете ему обрабатывать SSL-соединение.

Я не уверен, где вы это прочиталиmod_jk может передать само соединение SSL к Tomcat. Это должно было бы ретранслировать сокет напрямую, поэтому в обход протокола AJP, используемогоmod_jk (Кстатиmod_proxy_ajp это новый путь, или дажеmod_proxy_http).

Я не уверен, почему вы хотите, чтобы Apache находился перед Tomcat, если вы хотите, чтобы Tomcat все равно обрабатывал запросы SSL. Если это связано с номерами портов или чем-то подобным, используйте правило брандмауэра для переадресации порта 443 на порт Tomcat.

Кроме того, будьте осторожны с тем, как выполняются эти автоматические перенаправления с HTTP на HTTPS:они происходят только после того, как был сделан первоначальный HTTP-запрос.

Согласен. Особенно о точке mod_proxy_ *. Мы используем Apache, который обрабатывает наш SSL, а затем mod_proxy_http для пересылки запросов в Tomcat. Работает отлично. И супер простой конфиг.
0

Из вашего поста я не могу сказать, сталкиваетесь ли вы с проблемой при получении ssl для работы на Apache или, поскольку у вас есть определенные части приложения через http, Apache никогда не перенаправляет через ssl. Обратите внимание, что вполне нормально иметь несколько «сегментов». через ssl (имеется в виду пользователь -> Apache через ssl и Apache -> tomcat через ssl).
1. Если проблема заставляет ssl работать через Apache - вам нужно убедиться, что ssl настроен правильно на стороне Apache.
2. Если проблема заключается в «перенаправлении», попробуйте сохранить отдельные URL для http и https. Например, /something.mysite.com/non_ssl/ и /something.mysite.com/ssl/. Это облегчит написание правил в Apache.

Похожие вопросы