在Tomcat的访问日志中记录HAProxy特定的密码

时间:2019-01-10 20:01:56

标签: java tomcat logging tomcat8 haproxy

我在HAProxy负载平衡器后面有一个Web应用程序,该应用程序设置为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”。我正在寻找一种以tomcat服务器配置文件的AccessLogValve中定义的模式访问此信息的方法。这是当前模式的代码段:

<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 :(得分:0)

在haproxy中,您可以使用自定义日志记录功能来指定对密码信息进行日志记录。参见the haproxy documentation for custom logging

arraySort(figures, function (a, b){ return (a.price < b.price) ? -1 : (a.price == b.price ? 0 : 1); });

包含密码日志记录的示例自定义日志字符串:

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

答案 1 :(得分:0)

通过在haproxy.cfg中将 ssl_fc_cipher 设置为自定义HTTP标头,我能够在Tomcat的访问日志中获取SSL密码:

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

在AccessLog Valve中捕获X-SSL-Cipher自定义标头:

<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" />