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 版本有什么关系?
一些更新:
- 我正在使用 ActiveMQ Docker image
进行测试
- 将密钥存储类型从本机 JKS 更改为 PKCS #12 没有任何区别
- 在服务器端使用 Java
1.8_271
的行为相同,但显示不同的错误消息:
java.net.SocketException: Connection or outbound has closed
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)。
我是 运行 具有 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 版本有什么关系?
一些更新:
- 我正在使用 ActiveMQ Docker image 进行测试
- 将密钥存储类型从本机 JKS 更改为 PKCS #12 没有任何区别
- 在服务器端使用 Java
1.8_271
的行为相同,但显示不同的错误消息:java.net.SocketException: Connection or outbound has closed
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)。