Tomcat:记录 SSL_CLIENT_S_DN 的等效内容

Tomcat:记录 SSL_CLIENT_S_DN 的等效内容

在 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}rAccessLogValve请求中打印属性,然后 tomcat(或 servlet api)添加该属性(请参阅 tomcat 源代码github

问题是该toString()方法X509Certificate非常冗长。我确信 DN 就在这里,但还有很多信息。

如果您不想接触 Java 代码,可以这样做。如果您愿意,您还可以尝试定义一个过滤器,添加您想要的精确属性并将其打印在日志中。

相关内容