Как настроить Apache и mod_proxy_ajp для передачи SSL-клиентского сертификата

Вопрос или проблема

Как настроить Apache и mod_proxy_ajp для передачи SSL-клиентского сертификата

Я разработал приложение на Java, которому нужен клиентский SSL-сертификат, и в тестовой среде с Apache 2.2 и mod_jk все работает нормально. В производственной среде конфигурация не использует mod_jk, а использует mod_proxy_ajp. Я ищу пример конфигурации Apache, который настраивает SSL и mod_proxy_ajp для передачи SSL клиентского сертификата на сервер приложения на Java (который прослушивает протокол AJP). Большое спасибо.

Используя mod_proxy_ajp, вам нужно установить директиву RequestHeader, чтобы передать параметры SSL. Просто обратитесь к документации Apache для примеров установки директивы либо в секции <Location>, либо в <VirtualHost>.

Моя конфигурация выглядит так (хотя эта конфигурация ломает все дополнительные правила mod_rewrite, которые я создаю… и я не знаю почему):

<Location />
    ProxyPass ajp://localhost:8009/
    ProxyPassReverse ajp://localhost:8009/
</Location>
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} 
Redirect permanent / https://mysite.com/myapp?user=

Я настроил веб-сервер Apache и обнаружил, что mod_ajp передает клиентский сертификат без явной конфигурации. Моя конфигурация Apache:

SSLEngine on
SSLOptions +StdEnvVars +ExportCertData
ProxyRequests Off
SSLVerifyClient optional_no_ca
<Proxy />
        Allow from All
</Proxy>
ProxyPass /sportellosociale ajp://localhost:8009/sportellosociale 
ProxyPassReverse /sportellosociale ajp://localhost:8009/sportellosociale*

Я опустил директивы SSLCertificate.

Ответ или решение

Конфигурация Apache с использованием модуля mod_proxy_ajp для передачи SSL клиентского сертификата может быть довольно сложной задачей, но её можно успешно реализовать, следуя некоторым важным шагам.

Шаг 1: Установите необходимые модули

Убедитесь, что у вас установлены и активированы модули mod_ssl, mod_proxy, mod_proxy_ajp и mod_headers. Вы можете активировать необходимые модули с помощью следующих команд:

a2enmod ssl
a2enmod proxy
a2enmod proxy_ajp
a2enmod headers

Шаг 2: Настройте виртуальный хост

Создайте или отредактируйте файл конфигурации виртуального хоста для вашего сайта. Ниже приведен пример конфигурации:

<VirtualHost *:443>
    ServerName mysite.com
    DocumentRoot /path/to/your/document/root

    SSLEngine on
    SSLCertificateFile /path/to/your/certificate.crt
    SSLCertificateKeyFile /path/to/your/private.key
    SSLCertificateChainFile /path/to/your/chainfile.pem

    # Настройки для SSL
    SSLVerifyClient optional_no_ca
    SSLOptions +StdEnvVars +ExportCertData

    # Настройка прокси
    ProxyRequests Off
    <Proxy *>
        Require all granted
    </Proxy>

    ProxyPass /sportellosociale ajp://localhost:8009/sportellosociale
    ProxyPassReverse /sportellosociale ajp://localhost:8009/sportellosociale

    # Передача клиентского сертификата
    RequestHeader set X-Client-Cert "%{SSL_CLIENT_CERT}s"

    # Перенаправление на HTTPS, если запрос идет по HTTP
    RewriteEngine On
    RewriteCond %{HTTPS} off
    RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
</VirtualHost>

Шаг 3: Параметры SSL

  • SSLEngine on: Включает поддержку SSL.
  • SSLCertificateFile, SSLCertificateKeyFile и SSLCertificateChainFile: Указывают пути к необходимым сертификатам.
  • SSLVerifyClient optional_no_ca: Настраивает верификацию клиентского сертификата. В этом случае он будет необязательным, если сертификат не подписан CA.

Шаг 4: Передача клиентского сертификата

Для передачи клиентского сертификата на сервер приложений, используя AJP, вам нужно установить заголовок с помощью RequestHeader:

RequestHeader set X-Client-Cert "%{SSL_CLIENT_CERT}s"

Шаг 5: Проверьте конфигурацию и перезапустите Apache

Не забудьте проверить конфигурацию на наличие ошибок:

apachectl configtest

Если ошибок нет, перезапустите Apache:

systemctl restart apache2

Заключение

Теперь ваш сервер Apache должен корректно обрабатывать SSL и передавать клиентские сертификаты на сервер приложений, использующий AJP. Убедитесь, что ваше Java-приложение правильно обрабатывает заголовок X-Client-Cert. Если у вас возникнут дополнительные вопросы или проблемы, не стесняйтесь их задавать.

Оцените материал
Добавить комментарий

Капча загружается...