Ведение журнала конкретного шифра HAProxy в журнале доступа Tomcat - PullRequest
0 голосов
/ 10 января 2019

У меня есть веб-приложение за HAProxy Балансировщик нагрузки, настроенный в режиме завершения SSL для обработки / дешифрования соединения SSL. Фронтенд и бэкэнд секции haproxy.cfg выглядят следующим образом:

frontend web_applications
  mode http
  option httplog
  option forwardfor
  capture request header Referer len 2000
  capture request header User-Agent len 250
  capture request header Host len 100
  capture request header X-Forwarded-For len 50
  reqadd X-Forwarded-Proto:\ https
  default_backend web_applications
  bind *:443 ssl crt /etc/haproxy/certs/cert.pem ciphers AES256

backend web_applications
  mode http
  balance roundrobin
  server web_applications webappserver.net:80 check

Теперь мне нужно улучшить журнал доступа tomcat бэкэнд-приложения, чтобы регистрировать шифры, связанные с HAProxy. Так что в этом случае «AES256». Я ищу способ доступа к этой информации в шаблоне, определенном в AccessLogValve файла конфигурации сервера tomcat. Вот фрагмент текущего шаблона:

<Valve className="org.apache.catalina.valves.AccessLogValve" 
                    directory="/var/cps" 
                    prefix="access_log" 
                    suffix=".txt"
                    locale="en_US"
                    rotatable="false"
                    maxLogMessageBufferSize="512"
                    pattern="%{X-Forwarded-For}i %a %{begin:yyyy-MM-dd-HH:mm:ss.SSSZ}t %{end:yyyy-MM-dd-HH:mm:ss.SSSZ}t &quot;%r&quot; %s %b" />

Есть ли способ получить доступ к этой информации шифра из HTTP-запроса, полученного в бэкэнд-приложении? Я думал, есть ли способ, которым я могу поместить его в качестве атрибута в HttpServetRequest, используя пользовательский фильтр и добавить код шаблона% {xxx} r, чтобы выйти из него. Конечно, я открыт и для лучших решений.

Спасибо!

Ответы [ 2 ]

0 голосов
/ 15 января 2019

Мне удалось получить шифр SSL в журнале доступа Tomcat, установив ssl_fc_cipher в качестве настраиваемого заголовка HTTP в haproxy.cfg:

frontend web_applications
  mode http
  option httplog
  option forwardfor
  capture request header Referer len 2000
  capture request header User-Agent len 250
  capture request header Host len 100
  capture request header X-Forwarded-For len 50
  reqadd X-Forwarded-Proto:\ https
  default_backend web_applications
  bind *:443 ssl crt /etc/haproxy/certs/cert.pem ciphers AES256
  http-request set-header X-SSL-Cipher %[ssl_fc_cipher]

backend web_applications
  mode http
  balance roundrobin
  server web_applications webappserver.net:80 check

Захват пользовательского заголовка X-SSL-Cipher в AccessLog Valve:

<Valve className="org.apache.catalina.valves.AccessLogValve" 
                    directory="/var/cps" 
                    prefix="access_log" 
                    suffix=".txt"
                    locale="en_US"
                    rotatable="false"
                    maxLogMessageBufferSize="512"
                    pattern="%{X-Forwarded-For}i %a %{begin:yyyy-MM-dd-HH:mm:ss.SSSZ}t %{end:yyyy-MM-dd-HH:mm:ss.SSSZ}t &quot;%r&quot; %s %b %X-SSL-Cipher}i" />
0 голосов
/ 11 января 2019

В haproxy вы можете использовать настраиваемую возможность ведения журнала, чтобы указывать в журнале информацию о шифре. См. документацию haproxy для настраиваемой регистрации .

'%sslc' - ssl_ciphers (ex: AES-SHA)

Пример пользовательской строки журнала, включающей запись в шифр:

defaults
  log-format "%ci:%cp [%tr] %ft %b/%s %TR/%Tw/%Tc/%Tr/%Ta %ST %B %CC \ %CS %tsc %ac/%fc/%bc/%sc/%rc %sq/%bq %hr %hs %{+Q}r %sslc"
...