12

我目前正在将一些服务器软件从 Java 8 迁移到 Java 11。除了当我的服务器在 Java 11(并且只有 11)上运行时拒绝 TLS 连接这一事实之外,一切正常。即,在 Java 10 之前(包括 Java 10)上运行时一切正常。一旦我切换到 Java 11(当然,两者之间绝对没有代码更改),我就会收到 TLS 解密错误。当我禁用 SSL/TLS 或使用 IE/Edge 连接到我的服务器(通过 TLS)时,我的应用程序可以正常工作。使用 Chrome 70 或 Firefox 62 时,我分别得到ERR_SSL_PROTOCOL_ERRORSEC_ERROR_BAD_SIGNATURE

我尝试使用 WireShark 进行分析(请参阅我的转储)。我的结论是 Java 11 和 Chrome/Firefox 协商了一个错误的密码套件 (rsa_pss_rsae_sha256),它在某种程度上不适用于 Java 11。Java 8 和 IE/Edge 似乎协商了一个不同的密码套件 (rsa_pkcs1_sha256),它有效。

有人知道如何解决这个问题或至少暂时解决这个问题(当然,除了禁用 SSL/TLS 或使用 IE/Edge)?提前致谢。

4

1 回答 1

2

这很可能是与 TLS 1.3 中的新 PSS 算法的兼容性失败。您可以在此处阅读有关引入 PSS 背后原因的很好的解释。

在修复之前,您可以通过编辑lib/security/java.securityTLSv1.3 并将其添加到jdk.tls.disabledAlgorithms属性来阻止您的服务器协商 TLS 1.3。

于 2018-10-19T10:15:37.103 回答