Гид по технологиям

Настройка Apache, Tomcat (mod_jk) и SSO CAS

• 6 min read • Инфраструктура • Обновлено 19 Nov 2025
Настройка Apache, Tomcat и SSO CAS
Настройка Apache, Tomcat и 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.

Основные шаги

  1. Установить Apache, Tomcat, mod_jk.
  2. Настроить mod_jk и рабочие узлы (workers).
  3. Развернуть CAS server (cas.war) в Tomcat.
  4. Скомпилировать и настроить mod_auth_cas в Apache.
  5. Настроить SSL на Tomcat и экспортировать сертификат для Apache.
  6. Тестирование и отладка.

Установка Apache, Tomcat и mod_jk

  1. В YaST: Software → Software Management — найдите и установите Apache (включая devel), Tomcat (webapps) и apache2-mod_jk.
  2. В System → Runlevel Editor запустите службы Apache и Tomcat.
  3. Проверьте Apache: в браузере откройте http://localhost — при корректной конфигурации может отображаться «access denied».
  4. Проверьте 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

  1. Скачайте CAS Server с http://www.ja-sig.org/products/cas/index.html и распакуйте.
  2. В каталоге modules переименуйте cas-server-webapp-x.x.war в cas.war.
  3. В Tomcat Manager (http://localhost:8080 — Manager; логин root/password) выберите deploy from file и укажите cas.war.
  4. В 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 der

CASCertificatePath в конфиге mod_auth_cas должен указывать на этот PEM‑файл.

Тестирование и отладка

  1. Перезапустите Tomcat, затем Apache.
  2. Откройте защищённый URL в браузере — вы должны быть перенаправлены на CAS и после успешной аутентификации вернуться в приложение.
  3. Если возникает ошибка SSL handshake, проверьте:
    • Keystore/Truststore содержит правильный сертификат.
    • CASCertificatePath указывает на PEM‑сертификат.
    • Время и дата на серверах синхронизированы.
    • Порты 8443/8009 открыты и прослушиваются.
  4. Просматривайте логи:
    • 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.

Мини‑методология развертывания

  1. Подготовка тестового стенда с копией конфигураций.
  2. Развёртывание по шагам: Apache → Tomcat → mod_jk → CAS → mod_auth_cas → SSL.
  3. Тесты на каждом шаге и фиксация логов.
  4. Прогон сценариев входа/выхода/таймаута.
  5. Перенос в продуктив с этапным откатом.

Краткий глоссарий

  • AJP: протокол для связки Apache и Tomcat.
  • CAS: Central Authentication Service, SSO‑решение.
  • mod_jk: Apache‑модуль для AJP.
  • mod_auth_cas: модуль Apache для интеграции с CAS.

Безопасность и приватность

  • Не храните пароли в открытом виде в конфигурациях.
  • Контролируйте права на keystore и PEM‑файлы.
  • Рассмотрите использование доверенных сертификатов CA в продакшене.
  • При использовании LDAP/AD для аутентификации проверьте соответствие требованиям конфиденциальности и GDPR.

Тестовые случаи и критерии приёмки

  1. Открыть незашифрованный статический файл — доступ без редиректа.
  2. Открыть защищённый сервлет — редирект на CAS, затем успешный вход и возврат в приложение.
  3. Удаление cookie CAS — повторный редирект на CAS.
  4. Просмотр логов на наличие ошибок 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‑юнит для автоматизации развёртывания.

Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

Несколько аккаунтов Skype: Multi Skype Launcher
Программное обеспечение

Несколько аккаунтов Skype: Multi Skype Launcher

Журнал для работы: повысить продуктивность
Productivity

Журнал для работы: повысить продуктивность

Персональные звуки уведомлений на Android
Android.

Персональные звуки уведомлений на Android

Скачивание шоу Hulu для офлайн‑просмотра
Стриминг

Скачивание шоу Hulu для офлайн‑просмотра

Microsoft Start: персонализированная новостная лента
Новости

Microsoft Start: персонализированная новостная лента

Как изменить имя в Epic Games быстро
Гайды

Как изменить имя в Epic Games быстро