Настройка Apache, Tomcat (mod_jk) и SSO CAS
Введение
Это руководство показывает, как связать Apache и Tomcat через mod_jk и как защитить сервлеты (в Tomcat) и статический контент (в Apache) с помощью JA-SIG CAS (Single Sign‑On). Примеры основаны на OpenSUSE 10.2/11, Apache 2, Tomcat 5.5/6, но советы применимы и к другим дистрибутивам с соответствующей адаптацией путей и версий.
Важно: замените в примерах имена пользователей, пароли, FQDN и пути на значения вашей инфраструктуры.
Что вам понадобится
- Доступ root или эквивалент sudo.
- Apache2 с devel-пакетом.
- Tomcat (пакет webapps).
- Пакет apache2-mod_jk и исходники mod_auth_cas для сборки.
- Базовое знание работы с SSL/keystore и команда keytool/openssl.
Основные шаги
- Установить Apache, Tomcat, mod_jk.
- Настроить mod_jk и рабочие узлы (workers).
- Развернуть CAS server (cas.war) в Tomcat.
- Скомпилировать и настроить mod_auth_cas в Apache.
- Настроить SSL на Tomcat и экспортировать сертификат для Apache.
- Тестирование и отладка.
Установка Apache, Tomcat и mod_jk
- В YaST: Software → Software Management — найдите и установите Apache (включая devel), Tomcat (webapps) и apache2-mod_jk.
- В System → Runlevel Editor запустите службы Apache и Tomcat.
- Проверьте Apache: в браузере откройте http://localhost — при корректной конфигурации может отображаться «access denied».
- Проверьте Tomcat: откройте http://localhost:8080 — должна отображаться стартовая страница Tomcat.
Конфигурация mod_jk
Откройте /etc/apache2/httpd.conf и добавьте следующие строки (или внесите в конфиг виртуального хоста):
LoadModule jk_module /usr/lib/apache2/mod_jk.so
JkWorkersFile /etc/apache2/workers.properties
JkMount /*.jsp worker1
JkMount /servlets-examples/*
JkMount /cas/* worker1Пояснение: строки JkMount направляют запросы с указанными путями в Tomcat через указанный worker. Если путь к вашему сервлету известен, его можно указать явно, например:
JkMount /trn-webapp-0.8.1/map worker1 Создайте /etc/apache2/workers.properties со следующим содержимым:
worker.list=worker1
worker.worker1.port=8009
worker.worker1.host=localhost
worker.worker1.type=ajp13Проверьте в /etc/tomcat5/base/server.xml, что AJP-коннектор включён и использует порт 8009:
Убедитесь, что строка не закомментирована. Если используется Tomcat 6 или другие пути, адаптируйте путь к server.xml.
Для отладки аккаунтов можно временно заменить /etc/tomcat5/base/tomcat-users.xml на следующий пример (не оставляйте в проде пароли по умолчанию):
Настройка DocumentRoot для тестирования (пример для OpenSUSE/Tomcat):
[...]
DocumentRoot "/srv/www/tomcat5/base/webapps/"
[...]
[...]
Options All
[...] После изменения конфигурации: сначала перезапускайте Tomcat, затем Apache. Это важно, если меняется конфигурация Tomcat.
Проверьте работу mod_jk через браузер: откройте директорию servlets-examples и запустите примеры. Логи для отладки:
- Apache: /var/log/apache2/error.log
- Tomcat: /var/log/tomcat5/base/catalina.out
Развёртывание JA-SIG CAS
- Скачайте CAS Server с http://www.ja-sig.org/products/cas/index.html и распакуйте.
- В каталоге modules переименуйте cas-server-webapp-x.x.war в cas.war.
- В Tomcat Manager (http://localhost:8080 — Manager; логин root/password) выберите deploy from file и укажите cas.war.
- В Manager появится ссылка cas; пройдите аутентификацию: по умолчанию CAS может принимать одинаковые имя/пароль для теста.
Если CAS успешно запустился, можно защищать сервлеты. Для подлинной аутентификации подключите LDAP или другую бекенд‑систему — смотрите документацию и howto на сайте JA‑SIG.
Сборка и настройка mod_auth_cas
Скачайте исходники mod_auth_cas: https://www.ja-sig.org/svn/cas-clients/mod_auth_cas/tags/mod_auth_cas-1.0.7/src/
Скомпилируйте с помощью apxs2:
apxs2 -i -c mod_auth_cas.cЕсли библиотека mod_auth_cas установлена в /usr/lib/apache2, то всё в порядке.
Создайте временный каталог для куки CAS, например /tmp/cas/
В httpd.conf (или в конфиге vhost) добавьте:
LoadModule auth_cas_module /usr/lib/apache2/mod_auth_cas.so
CASCookiePath /tmp/cas/
CASloginURL https://localhost/cas/login
CASValidateURL https://localhost/cas/serviceValidate
CASCertificatePath /root/Desktop/exported-pem.crt
AuthType CAS
Require valid-user
Обязательно замените localhost на фактический FQDN вашего сервера. Этот фрагмент защищает каталог /srv/tomcat6/webapps/.
Настройка SSL для Tomcat и экспорт сертификата
Tomcat должен обслуживать CAS по HTTPS. Пример SSL‑Connector в server.xml:
Если вы хотите явно указать keystore, используйте такой блок:
Если в системе нет .keystore, создайте его:
linux-3pjy:~ # keytool -genkey -alias tomcat -keyalg RSA -keystore /usr/share/tomcat6/.keystoreВвод команд keytool приведёт к запросу пароля и данных сертификата (CN, OU, O, L, ST, C). После создания экспортируйте сертификат в DER‑формате и переконвертируйте в PEM для Apache:
linux-3pjy:~/Desktop # keytool -export -alias tomcat -keystore /usr/share/tomcat6/.keystore -file exported-der.crt
linux-3pjy:~/Desktop # openssl
OpenSSL> x509 -out /root/Desktop/exported-pem.crt -outform pem -in /root/Desktop/exported-der.crt -inform derCASCertificatePath в конфиге mod_auth_cas должен указывать на этот PEM‑файл.
Тестирование и отладка
- Перезапустите Tomcat, затем Apache.
- Откройте защищённый URL в браузере — вы должны быть перенаправлены на CAS и после успешной аутентификации вернуться в приложение.
- Если возникает ошибка SSL handshake, проверьте:
- Keystore/Truststore содержит правильный сертификат.
- CASCertificatePath указывает на PEM‑сертификат.
- Время и дата на серверах синхронизированы.
- Порты 8443/8009 открыты и прослушиваются.
- Просматривайте логи:
- Apache: /var/log/apache2/error.log
- Tomcat: /var/log/tomcat5/base/catalina.out
- CAS: лог приложения в Tomcat (обычно catalina.out или лог внутри cas.war)
Частые ошибки и способы их решения
Проблема: модуль mod_jk не направляет запросы.
Решение: проверьте путь к модулю LoadModule, права на /etc/apache2/workers.properties и наличие AJP коннектора в server.xml.Проблема: 403 или отсутствие редиректа на CAS.
Решение: проверьте директивы AuthType/Require в Apache, правильность JkMount и разрешения на каталог.Проблема: “Unable to perform SSL handshake with (cas server)”.
Решение: экспортируйте сертификат из keystore, установите CASCertificatePath, убедитесь в совпадении CN и FQDN и в наличии truststore при необходимости.Проблема: после входа сессия не распознаётся.
Решение: проверьте CASCookiePath, права на каталог, корректность настроек домена/пути cookie.
Алтернативные подходы
- Вместо mod_jk можно использовать mod_proxy_ajp или mod_proxy_http (см. преимущества/недостатки ниже).
- Для SSO можно использовать другие провайдеры: SAML (Shibboleth), OpenID Connect (Keycloak, Dex).
Сравнение кратко:
- mod_jk: хорошо отлажен для AJP, стабильная маршрутизация.
- mod_proxy_ajp/proxy_http: проще конфигурировать в современных дистрибутивах, но требует внимания к тайм-аутам и заголовкам.
Руководство по приёму конфигурации
Критерии приёмки:
- Apache отвечает на HTTP-запросы.
- Tomcat отвечает на порт 8080 и AJP порт 8009.
- CAS развёрнут и доступен по HTTPS на порту 8443.
- Защищённый URL перенаправляет на CAS и возвращает успешную аутентификацию.
- Логи не содержат ошибок SSL или AJP после тестовых сценариев.
Роль‑ориентированные чек‑листы
Администратор сервера:
- Установить пакеты и зависимости.
- Настроить и проверить AJP/SSL коннекторы.
- Обеспечить безопасное хранение паролей keystore.
Разработчик приложения:
- Проверить JkMount для нужных путей.
- Убедиться, что приложение корректно обрабатывает заголовки и сессии.
Инженер безопасности:
- Проверить сертификаты, политику шифрования TLS, срок действия и доверенные CA.
- Убедиться в ограничении доступа к /etc/apache2 и keystore.
Мини‑методология развертывания
- Подготовка тестового стенда с копией конфигураций.
- Развёртывание по шагам: Apache → Tomcat → mod_jk → CAS → mod_auth_cas → SSL.
- Тесты на каждом шаге и фиксация логов.
- Прогон сценариев входа/выхода/таймаута.
- Перенос в продуктив с этапным откатом.
Краткий глоссарий
- AJP: протокол для связки Apache и Tomcat.
- CAS: Central Authentication Service, SSO‑решение.
- mod_jk: Apache‑модуль для AJP.
- mod_auth_cas: модуль Apache для интеграции с CAS.
Безопасность и приватность
- Не храните пароли в открытом виде в конфигурациях.
- Контролируйте права на keystore и PEM‑файлы.
- Рассмотрите использование доверенных сертификатов CA в продакшене.
- При использовании LDAP/AD для аутентификации проверьте соответствие требованиям конфиденциальности и GDPR.
Тестовые случаи и критерии приёмки
- Открыть незашифрованный статический файл — доступ без редиректа.
- Открыть защищённый сервлет — редирект на CAS, затем успешный вход и возврат в приложение.
- Удаление cookie CAS — повторный редирект на CAS.
- Просмотр логов на наличие ошибок SSL/AJP.
Итог
Связка Apache + Tomcat через mod_jk с защитой через JA‑SIG CAS обеспечивает централизованную аутентификацию и гибкое разделение ответственности между веб‑сервером и контейнером сервлетов. Ключевые моменты — корректная настройка AJP/SSL, экспорт и доверие сертификатов, порядок перезапуска сервисов (Tomcat → Apache) и тщательная отладка логов.
Важно: в продуктивной среде замените тестовые пароли и используйте доверенные сертификаты.
Список полезных файлов и путей (обобщённо):
- /etc/apache2/httpd.conf
- /etc/apache2/workers.properties
- /etc/tomcat5/base/server.xml
- /etc/tomcat5/base/tomcat-users.xml
- /var/log/apache2/error.log
- /var/log/tomcat5/base/catalina.out
В конце, если нужно, могу подготовить краткое пошаговое playbook‑руководство для Ansible или systemd‑юнит для автоматизации развёртывания.
Похожие материалы
Несколько аккаунтов Skype: Multi Skype Launcher
Журнал для работы: повысить продуктивность
Персональные звуки уведомлений на Android
Скачивание шоу Hulu для офлайн‑просмотра
Microsoft Start: персонализированная новостная лента