Java 1.8.0_271-b09客户端的ActiveMQ SSLException

问题描述

我正在通过SSL授权(通过信任存储)运行ActiveMQ服务器。

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

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

javax.net.ssl.SSLException:收到致命警报:意外消息

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

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

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

一些更新:

  • 我正在与ActiveMQ Docker image
  • 进行测试
  • 将密钥存储类型从本机JKS更改为PKCS#12没什么作用
  • 在服务器端使用Java 1.8_271的行为相同,但显示不同的错误消息:

    java.net.socketException:连接或出站已关闭

解决方法

来自the release notes

改进证书链处理
已添加新的系统属性jdk.tls.maxHandshakeMessageSize,以设置TLS / DTLS握手中握手消息的最大允许大小。系统属性的默认值为32768(32 KB)。

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