Ранее у меня был Apache 2.2.17, работающий как обратный прокси-сервер, который запрашивал аутентификацию клиента (используя SSLVerifyClient) и передавал эту аутентификацию сервлету приложения jetty / tomcat. Затем мое приложение Java считывает эту информацию (x509Certificate) из запроса.
При обновлении до новых серверов мы решили перейти на последнюю версию Apache, но этот процесс, похоже, больше не работает. Apache по-прежнему запрашивает аутентификацию клиента, но, похоже, не передает ее Tomcat.
Вот соответствующие части рабочего (v2.2.17) файла httpd.conf:
<VirtualHost _default_:443>
ServerName xxxxxxxx
SSLEngine On
SSLCertificateFile conf/ssl-prod/xxxxxxxx.crt
SSLCertificateKeyFile conf/ssl-prod/xxxxxxxx.key
SSLCACertificatePath conf/ssl.certs/
<Location />
ProxyPass http://xxxxxxxx:8009/
ProxyPassReverse http://xxxxxxxx:8009/
Order deny,allow
Allow from all
</Location>
<Location /login/>
SSLVerifyClient optional
SSLVerifyDepth 10
ProxyPass http://xxxxxxxx:8009/
ProxyPassReverse http://xxxxxxxx:8009/
Order deny,allow
Allow from all
</Location>
</VirtualHost>
Таким образом, это просто стандартный SSL-прокси, пока пользователь не перейдет на страницу в папке «входа в систему», после чего apache запросит аутентификацию клиента.
Я попытался установить несколько других переменных, чтобы увидеть, заставит ли это работать ProxyAddHeaders On ProxyPreserverHost On (и Off), но безуспешно.
У нас также была такая же проблема при переходе на последнюю версию ветки 2.2.23, но когда мы скопировали старую версию, которую мы использовали, на новый сервер, она работала нормально. Единственное другое отличие состоит в том, что мы переходим с 32-разрядного сервера на 64-разрядный (обе Windows используют исполняемые файлы ApacheLounge).
Любые идеи?
У вас нет никакого механизма для передачи информации об аутентифицированном клиенте на сервер Tomcat.
AJP - это протокол, который по умолчанию используется на порте 8009, а не HTTP, и в нем есть встроенные механизмы для передачи данных сертификата клиента (если SSLOptions +ExportCertData
есть в Apache). Вы уверены, что не собираетесь этим пользоваться?
Если нет, вам нужно будет реализовать что-то, чтобы справиться с этим, как в Apache, так и в вашем приложении Tomcat. Вероятно, HTTP-заголовок с информацией о сертификате клиента.