【问题标题】:Logging HAProxy specific Cipher in Tomcat's Access Log在 Tomcat 的访问日志中记录 HAProxy 特定的密码
【发布时间】:2019-06-05 18:17:25
【问题描述】:

我在 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 中定义的模式中的这些信息。这是当前模式的 sn-p:

<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 模式代码以将其注销。当然,我也愿意接受更好的解决方案。

谢谢!

【问题讨论】:

    标签: java tomcat logging tomcat8 haproxy


    【解决方案1】:

    通过将 ssl_fc_cipher 设置为 haproxy.cfg 中的自定义 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" />
    

    【讨论】:

      【解决方案2】:

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

      '%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"
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-10-04
        • 2022-05-18
        • 2012-02-23
        • 2019-05-11
        • 2022-06-21
        • 2011-03-10
        • 1970-01-01
        相关资源
        最近更新 更多