具有客户端证书主题名称的Tomcat 7访问日志

问题描述 投票:8回答:2

我正在尝试在我的tomcat访问日志文件中包含客户端证书信息。

我已经审查了这篇文章:https://serverfault.com/questions/624790/tomcat-log-the-equivalent-of-ssl-client-s-dn,但这仅返回对证书的引用,而我实际上不能提取任何属性。

我的日志文件模式如下:

pattern="... [%{javax.servlet.request.X509Certificate}r]"

这将返回:[[Ljava.security.cert.X509Certificate; @ 667a078]

是否有一种访问证书属性的方法,例如:

pattern="... [%{javax.servlet.request.X509Certificate.SubjectName}r]"

我希望能够在不进行任何代码修改的情况下提取证书信息。

apache tomcat ssl logging client-certificates
2个回答
0
投票

如果您使用该使用者名称对用户进行身份验证,那么我认为您可以使用“ %u”登录用户名称

如果需要其他任何内容,则需要编写javax.servlet.FilterServletRequestListener,将该值设置为ServletRequest上的属性。该值可以是实现toString()的任何对象。

javax.servlet.request.X509Certificate请求属性是一个证书数组,在Servlet规范ch.3.9 SSL属性(Servlet规范3.1)中定义]


0
投票

我有同样的问题。我发现的唯一方法是覆盖AccessLogValve。

  1. 创建一个简单的Maven Java项目
  2. <dependency> <groupId>org.apache.tomcat</groupId> <artifactId>tomcat-catalina</artifactId> <version>x.x.x</version> <scope>provided</scope> </dependency>
  3. 覆盖AccessLogValve并实施@Override public void log(Request request, Response response, long time) {
  4. 请从请求中的X509证书中读取您的委托人(很遗憾,我无法共享此代码)request.setUserPrincipal(xyz)
  5. 包装罐子
  6. 复制到您的tomcat lib文件夹中
  7. confix server.xml以使用Valve,用您的Valve替换Valve类

    <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"-->

© www.soinside.com 2019 - 2024. All rights reserved.