仅在具有Java的Tomcat 8+上启用日志记录SSL握手失败(审核目的日志)

Man*_*anu 10 java security ssl tomcat

当REST客户端尝试连接到我的应用程序时,我需要记录SSL握手是否失败.该应用程序使用Spring Boot和Java 8构建,并部署在Tomcat 8上.

在SSL握手失败的情况下,由于TLS连接中断,因此可能必须在Tomcat层或Java中完成日志记录要求,因为Tomcat在我的情况下使用底层JVM进行SSL证书验证.

<Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol" SSLEnabled="true" scheme="https" secure="true" keystoreFile="keyStore-1.jks" keystorePass="password" keystoreType="jks" truststoreFile="TrustStore.jks" truststorePass="passwrd" truststoreType="jks" clientAuth="want" sslProtocol="TLSv1.2" />
Run Code Online (Sandbox Code Playgroud)

我知道启用调试级别日志记录.

-Djavax.net.debug = SSL

但这会记录大量信息并会减慢进程.并记录成功的SSL条件.有没有办法单独使用Java或Tomcat级别的最小日志来启用故障案例.

我不是从调试的角度看这个,因为SSL调试日志非常好.此要求更多来自日志记录和审计目的,并且启用调试日志不是一个可行的选项.仅记录SSL发生的错误而不是所有十六进制/证书数据的机制.

ego*_*nko 9

不幸的是,这是不可能的。并且它与Tomcat无关。SSL 的日志记录它不是应用程序中标准日志记录的一部分。您可以尝试使用以下选项减少输出:

-Djava.net.debug=handshake
Run Code Online (Sandbox Code Playgroud)

其他一些:

  • record - 打印每个 SSL 记录的跟踪(在 SSL 协议级别)。
  • 握手 - 打印收到的每个握手消息
  • keygen - 打印密钥交换的密钥生成数据。
  • session - 打印 SSL 会话活动。
  • defaultctx - 打印默认 SSL 初始化信息。
  • sslctx - 打印有关 SSL 上下文的信息。
  • sessioncache - 打印有关 SSL 会话缓存的信息。
  • keymanager - 打印有关调用密钥管理器的信息。
  • trustmanager - 打印有关调用信任管理器的信息。
  • 数据 - 对于握手跟踪,打印出每条消息的十六进制转储。
  • 详细 - 对于握手跟踪,打印详细信息。
  • 明文 - 对于记录跟踪,打印出记录的十六进制转储。

请参阅文档

如果您真的需要这个并且性能对您的应用程序至关重要,您可以使用ASM / Btrace /etc检测SSLSocket(在文档中您可以阅读有关握手过程的信息)并检查其中的握手状态。但在这种情况下,您将没有调试信息 - 只有 true/false。

另请参阅包含所有可用设置的Tomcat 文档。在那里你可以读到有JSSEImplementation类,它在 Tomcat 中使用。它是 JSSE 的包装器。