仅在Tomcat 8+ with Java

时间:2017-03-17 12:45:38

标签: java security tomcat ssl

当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" />

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

  

-Djavax.net.debug = SSL

但是这记录了很多信息并且会减慢这个过程。并记录成功的SSL条件。有没有办法单独使用Java或Tomcat级别的最小日志来启用故障案例。

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

2 个答案:

答案 0 :(得分:2)

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

-Djava.net.debug=handshake

其他一些人:

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

请参阅docs

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

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

答案 1 :(得分:1)

我有多次相同的问题,并且按照以下方式进行破解。我在intelliJ中设置了项目。

  1. 设置VM选项的调试级别:-Djavax.net.debug = all(编辑配置-> VM选项)保存并应用。
  2. 以调试模式运行project(App),并检查服务器与客户端之间的调用。例如,您会发现从服务器到控制台中控制台之间的其他CertificateRequest调用。

***证书申请 证书类型:RSA,DSS,ECDSA 支持的签名算法:SHA512withRSA,未知(hash:0x6,签名:0x2),SHA512withECDSA,SHA384withRSA,未知(hash:0x5,签名:0x2),SHA384withECDSA,SHA256withRSA,未知(hash:0x4,签名:0x2),SHA256withECDSA,SHA224withRSA ,未知(哈希:0x3,签名:0x2),SHA224withECDSA,SHA1withRSA,SHA1withDSA,SHA1withECDSA 证书颁发机构:

CN = Symantec Public Class 3,O = Symantec Corporation,C = US

CN = Symantec 3类管理,OU = Symantec Trusted Network,O = Symantec,C = US

[读取] MD5和SHA1哈希:len = 302

  1. 如果您可以看到上面带有“ CN”的证书请求,则表明您在cacert密钥库中缺少这些证书。

解决方案:添加缺少的证书(在我们的示例中,两个证书为CN = Symantec Public Class 3和CN = Symantec Class 3 Manage)。

我们必须了解SSL协议在服务器和客户端之间的调用,请查看以下链接以获取服务器和客户端如何通信的更多信息。

https://docs.oracle.com/javase/6/docs/technotes/guides/security/jsse/JSSERefGuide.html#InstallProbs

如果有人遇到问题,我将提供youtube视频演示。

我希望此解决方案可以帮助某人。

谢谢。