Назад | Перейти на главную страницу

Tomcat: записать эквивалент SSL_CLIENT_S_DN

В Apache HTTPD можно создавать собственные журналы запросов, которые включают значение SSL_CLIENT_S_DN. Поскольку сайт требует взаимной аутентификации (клиентские сертификаты), это обеспечивает хороший журнал аудита того, кто обращается к веб-серверу. Вопрос в том, что у нас также есть большое количество хостов tomcat, и мы хотели бы сделать то же самое с журналами запросов, созданными tomcat. Хотя я не могу найти способ сделать это. Я просмотрел клапаны доступа в tomcat, но не нашел подходящей переменной.

Я искал здесь информацию о конфигурации: http://tomcat.apache.org/tomcat-7.0-doc/config/valve.html#Access_Log_Valve

Также это экземпляры tomcat с коннектором HTTPS, настроенным с clientAuth = True. Они не сидят за прокси.

Как я могу записать DN сертификата клиента в журнал запросов?

Не тестировалось, но вы можете попробовать использовать такой шаблон:

%{javax.servlet.request.X509Certificate}r

Которая должна распечатать сертификат x509, используемый пользовательским агентом для аутентификации (с цепочкой). Это использует %{xxx}r узор из AccessLogValve который печатает атрибуты из запроса и tomcat (или api сервлета), которые добавляют этот атрибут (см. исходный код tomcat на github )

Проблема в том toString() метод X509Certificate довольно многословен. Я уверен, что DN здесь, но информации гораздо больше.

Это если вы не хотите трогать java-код. Если вы хотите, вы также можете попробовать определить фильтр, который добавит точный атрибут, который вы хотите, и распечатайте его в журнале.