Java 1.8.0_271-b09 客户端的 ActiveMQ SSLException

ActiveMQ SSLException with Java 1.8.0_271-b09 client

我是 运行 具有 SSL 授权(通过信任库)的 ActiveMQ 服务器。

客户端是用 Spring Boot 和 Camel 编写的。每个客户端都有它自己的证书。

客户端的Java版本更新到1.8_271版本时,SSL连接突然失败。这可以在 ActiveMQ 日志中找到:

javax.net.ssl.SSLException: Received fatal alert: unexpected_message

降级到1.8.0_261后一切恢复正常。

这里真的很奇怪:我的 ActiveMQ 信任库当前包含 232 个证书。当我删除其中 2 个(无论哪个)时,与 1.8_271 客户端的连接再次工作。

这对我来说真的没有任何意义。服务器信任库中的项目数量与客户端的 Java 版本有什么关系?

一些更新:

来自the release notes

Improve Certificate Chain Handling
A new system property, jdk.tls.maxHandshakeMessageSize, has been added to set the maximum allowed size for the handshake message in TLS/DTLS handshaking. The default value of the system property is 32768 (32 kilobytes).

如果您的服务器请求客户端身份验证,1.3 以下的 JSSE(编辑)会发送一条 CertificateRequest 消息,指定从您的信任库中的证书派生的可接受的 CA 名称,因此您的信任库中的证书数量会影响此消息的大小,并且可能使其超过限制,在这种情况下,客户会拒绝它(尽管我不确定我是否喜欢在这种情况下使用 unexpected_message)。