В 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-код. Если вы хотите, вы также можете попробовать определить фильтр, который добавит точный атрибут, который вы хотите, и распечатайте его в журнале.