我目前正在将某些服务器软件从Java 8迁移到Java11。一切正常,除了当我的服务器在Java 11(仅11)上运行时,拒绝TLS连接的事实。也就是说,当在Java 10或更高版本上运行时,一切正常。一旦切换到Java 11(当然,它们之间绝对没有代码更改),我就会收到TLS解密错误。否则,当我禁用SSL / TLS或使用IE / Edge(通过TLS)连接到服务器时,我的应用程序可以正常工作。使用Chrome 70或Firefox 62时,我分别得到ERR_SSL_PROTOCOL_ERROR
或SEC_ERROR_BAD_SIGNATURE
。
我试图使用WireShark对此进行分析(请参阅我的dump)。我的结论是Java 11和Chrome / Firefox协商了一个错误的密码套件(rsa_pss_rsae_sha256),该密码套件在某种程度上不适用于Java11。Java8和IE / Edge似乎协商了一个不同的密码套件(rsa_pkcs1_sha256),该密码套件有效。 / p>
有人知道如何解决此问题或至少暂时解决此问题(当然,除了禁用SSL / TLS或使用IE / Edge之外)?预先感谢。
答案 0 :(得分:2)
这很可能是与TLS 1.3中新PSS算法的兼容性失败。对于引入PSS here的背后原因,您可以阅读很好的解释。
在修正此问题之前,您可以通过编辑lib/security/java.security
并将TLSv1.3添加到jdk.tls.disabledAlgorithms
属性来阻止服务器协商TLS 1.3。