在 Apache HTTPD 中,可以创建包含 SSL_CLIENT_S_DN 值的自定义请求日志。由于站点需要相互身份验证(客户端证书),因此这提供了有关谁在访问 Web 服务器的良好审计日志。问题是我们也有大量的 tomcat 主机,并且想对 tomcat 创建的请求日志做同样的事情。但我似乎找不到办法做到这一点。我查看了 tomcat 中的访问阀,但似乎找不到合适的变量。
我一直在这里寻找配置信息:http://tomcat.apache.org/tomcat-7.0-doc/config/valve.html#Access_Log_Valve
这些也是带有 HTTPS 连接器且配置了 clientAuth=True 的 tomcat 实例。它们不位于代理后面。
如何在请求日志中记录客户端证书 DN?
答案1
未经测试,但您可以尝试使用以下模式:
%{javax.servlet.request.X509Certificate}r
它应该打印用户代理用于身份验证的 x509 证书(使用链)。它使用模式%{xxx}r
从AccessLogValve
请求中打印属性,然后 tomcat(或 servlet api)添加该属性(请参阅 tomcat 源代码github)
问题是该toString()
方法X509Certificate
非常冗长。我确信 DN 就在这里,但还有很多信息。
如果您不想接触 Java 代码,可以这样做。如果您愿意,您还可以尝试定义一个过滤器,添加您想要的精确属性并将其打印在日志中。