gpt4 book ai didi

Java 1.8.0_271 不符合 TLS RFC : during handshake, 服务器在没有 close_notify 或警报的情况下关闭 TCP 连接

转载 作者:行者123 更新时间:2023-12-04 08:27:56 25 4
gpt4 key购买 nike

我们曾经在旧 Java 版本 (1.8.0_51) 上使用 Weblogic 12c 服务器。升级到 1.8.0_271 后,我们遇到了一个间歇性问题:在正常工作几分钟后,传入 Weblogic 的 TLS 握手失败。
观察到的行为如下:

Client --[TCP SYN]--> Weblogic
Weblogic --[TCP SYN, ACK]--> Client
Client --[TCP ACK]--> Weblogic
Client --[Client Hello]--> Weblogic
Weblogic --[TCP FIN, ACK]--> Client
握手是使用 TLS 1.3 进行的。
这似乎很不寻常。我通读了 RFC 8446(传输层安全性 (TLS) 协议(protocol)版本 1.3),但我无法找到服务器关闭 TCP 连接而不先发送警报或 close_notify 的任何原因。我什至会说,根据我的理解,JVM 行为是不合规的:
   Each party MUST send a "close_notify" alert before closing its write
side of the connection, unless it has already sent some error alert.
回到 Java 1.8.0_51 正在解决这个问题。
我们在 Linux 和 Solaris 服务器上都有这个问题,我们在远程和本地进行测试时看到这个问题(在服务器的 CLI 上,使用 openssl s_client)。因此,防火墙、WAF、IPS 或其他任何东西都不会导致此问题。

最佳答案

作为一种解决方法,您可以尝试禁用 TLSv1.3在您的 Java 1.8.0_271 上版本。
即使有更一致的方法可以做到这一点,为了快速测试它,你可以定义它动态 ;将这句话直接放在你的代码中,在连接相关方法之前:

java.lang.System.setProperty("jdk.tls.client.protocols", "TLSv1,TLSv1.1,TLSv1.2");
另一种选择是定义它 静态 .例如,从终端启动它时:
$ java -Djdk.tls.client.protocols="TLSv1,TLSv1.1,TLSv1.2" YourJavaProgram
这将禁用列表中未包含的任何协议(protocol),因此没有 TLSV1.3将永远被您的客户接受;服务器现在将要求其列表中的下一个协议(protocol),默认为 TLSv1.2 .这已在您身边正确启用,并且似乎在您的环境中没有问题。
我没记错, 1.8.0_271更改了有关 TLS3 的一些规范,例如允许的最大证书数量等。核心问题可能与此规范有关。这种解决方法与其说是一种解决方案,不如说是一种临时修复,但仍然希望它以某种方式有所帮助。

关于Java 1.8.0_271 不符合 TLS RFC : during handshake, 服务器在没有 close_notify 或警报的情况下关闭 TCP 连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65175256/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com