在 Ignite 中启动瘦客户端时握手标头检查失败

问题描述 投票:0回答:1

我尝试按照Ignite 文档中所述打开 TLS 模式来启动 Ignite。这是有效的,但是当我尝试连接瘦客户端时,服务器报告以下错误:

握手标头检查失败:493

我创建了一个 rootCA .pfx 文件,用作服务器的 SslContextFactory 中的 KeyStore。服务器启动正常并根据文档记录预期消息:

安全状态[身份验证=关闭,tls/ssl=打开]

当我使用 SSL 设置启动瘦客户端时,就会出现问题。我从 rootCA 为客户端创建了一个 pfx 文件,该文件用作服务器的 KeyStore。我在客户端的 SslStreamFactory 中指定客户端 pfx 文件的路径和密码。当客户端调用 Ignition.StartClient() 时,它立即报告以下错误:

从传输流接收到意外的 EOF 或 0 字节

同时Server日志报这个错误:

本机错误:java.io.IOException:握手标头检查失败:493 在 org.apache.ignite.internal.processors.odbc.ClientMessage.readFrom(ClientMessage.java:186) 在 org.apache.ignite.internal.processors.odbc.ClientListenerNioMessageParser.decode(ClientListenerNioMessageParser.java:66) 在 org.apache.ignite.internal.util.nio.GridNioCodecFilter.onMessageReceived(GridNioCodecFilter.java:113) 在org.apache.ignite.internal.util.nio.GridNioFilterAdapter.proceedMessageReceived(GridNioFilterAdapter.java:109) 在 org.apache.ignite.internal.util.nio.GridNioServer$HeadFilter.onMessageReceived(GridNioServer.java:3753) 在org.apache.ignite.internal.util.nio.GridNioFilterChain.onMessageReceived(GridNioFilterChain.java:175) 在 org.apache.ignite.internal.util.nio.GridNioServer$DirectNioClientWorker.processRead(GridNioServer.java:1379) 在 org.apache.ignite.internal.util.nio.GridNioServer$AbstractNioClientWorker.processSelectedKeysOptimized(GridNioServer.java:2527) 在 org.apache.ignite.internal.util.nio.GridNioServer$AbstractNioClientWorker.bodyInternal(GridNioServer.java:2282) 在 org.apache.ignite.internal.util.nio.GridNioServer$AbstractNioClientWorker.body(GridNioServer.java:1911) 在 org.apache.ignite.internal.util.worker.GridWorker.run(GridWorker.java:125) 在 java.base/java.lang.Thread.run(来源未知)

造成这些错误的原因是什么?当我从客户端配置中删除 SslStreamFactory 时,它可以正常连接。

我能够从客户端获取完整的堆栈跟踪,并发现它在 SslStream.AuthenticateAsClient() 代码中失败:

在 System.Net.Security.SslStream.d__1761.MoveNext() 在 System.Threading.Tasks.ValueTask1.get_Result() 在 System.Runtime.CompilerServices.ConfiguredValueTaskAwaitable1.ConfiguredValueTaskAwaiter.GetResult() 在 System.Net.Security.SslStream.d__1751.MoveNext() 在 System.Net.Security.SslStream.d__172.MoveNext() 在 System.Net.Security.SslStream.AuthenticateAsClient(SslClientAuthenticationOptions sslClientAuthenticationOptions) 在System.Net.Security.SslStream.AuthenticateAsClient(字符串targetHost,X509CertificateCollection clientCertificates,SslProtocols启用SslProtocols,布尔checkCertificateReplication) 在 Apache.Ignite.Core.Client.SslStreamFactory.Create(流流,字符串 targetHost) 在 Apache.Ignite.Core.Impl.Client.ClientSocket.GetSocketStream(套接字套接字,IgniteClientConfiguration cfg,字符串主机) 在 Apache.Ignite.Core.Impl.Client.ClientSocket..ctor(IgniteClientConfiguration clientConfiguration、EndPoint endPoint、字符串主机、Nullable1 版本、Action1 topVerCallback、Marshaller marshaller) 在 Apache.Ignite.Core.Impl.Client.ClientFailoverSocket.Connect(SocketEndpoint 端点) 在 Apache.Ignite.Core.Impl.Client.ClientFailoverSocket.GetNextSocket() 在 Apache.Ignite.Core.Impl.Client.ClientFailoverSocket..ctor(IgniteClientConfiguration 配置、Marshaller marsh、TransactionsClient 事务) 在 Apache.Ignite.Core.Impl.Client.IgniteClient..ctor(IgniteClientConfiguration clientConfiguration) 在 Apache.Ignite.Core.Ignition.StartClient(IgniteClientConfiguration clientConfiguration)

ignite
1个回答
0
投票

您已为节点间通信启用 SSL/TLS,但未为瘦客户端连接器启用。

请遵循同一文档页面上的适用于瘦客户端和 JDBC/ODBC 的 SSL/TLS 部分。

© www.soinside.com 2019 - 2024. All rights reserved.