我目前正在将一些服务器软件从 Java 8 迁移到 Java 11。除了当我的服务器在 Java 11(且仅 11)上运行时 TLS 连接被拒绝这一事实之外,一切工作正常。也就是说,在 Java 10 及以上版本上运行时一切正常。一旦我切换到 Java 11(当然,中间绝对没有代码更改),我就会收到 TLS 解密错误。当我禁用 SSL/TLS 或使用 IE/Edge 连接到我的服务器(通过 TLS)时,我的应用程序工作正常。当使用 Chrome 70 或 Firefox 62 时,我得到ERR_SSL_PROTOCOL_ERROR
or SEC_ERROR_BAD_SIGNATURE
, 分别。
我尝试使用 WireShark 来分析这一点(请参阅我的dump https://nofile.io/f/dTZzcTfAzsT)。我的结论是,Java 11 和 Chrome/Firefox 协商了一个错误的密码套件 (rsa_pss_rsae_sha256),该套件在某种程度上不适用于 Java 11。Java 8 和 IE/Edge 似乎协商了一个不同的密码套件 (rsa_pkcs1_sha256),但该套件有效。
有人知道如何解决这个问题或至少暂时解决它(当然,除了禁用 SSL/TLS 或使用 IE/Edge)?提前致谢。
这可能是 TLS 1.3 中新 PSS 算法的兼容性故障。您可以阅读关于引入 PSS 背后推理的很好的解释here https://crypto.stackexchange.com/a/58708.
在修复之前,您可以通过编辑来阻止服务器协商 TLS 1.3lib/security/java.security
并将 TLSv1.3 添加到jdk.tls.disabledAlgorithms
财产。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)