当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发生的错误而不是所有十六进制/证书数据的机制。
答案 0 :(得分:2)
不幸的是,这是不可能的。它与Tomcat无关。 记录SSL不是应用程序中标准日志记录的一部分。 您可以尝试使用以下选项减少输出:
-Djava.net.debug=handshake
其他一些人:
请参阅docs。
如果您真的需要这个并且性能对您的应用程序至关重要,您可以使用SSLSocket / ASM /等检查Btrace(在您可以阅读的有关握手过程的文档中)并检查里面握手的状态。但在这种情况下,你不会有调试信息 - 只有真/假。
另请参阅Tomcat docs所有可用设置。在那里你可以读到有JSSEImplementation类,它在Tomcat中使用。它是JSSE的包装。
答案 1 :(得分:1)
我有多次相同的问题,并且按照以下方式进行破解。我在intelliJ中设置了项目。
***证书申请 证书类型: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
解决方案:添加缺少的证书(在我们的示例中,两个证书为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视频演示。
我希望此解决方案可以帮助某人。
谢谢。