我正在尝试使用SSLStream连接到Kafka。
我正在尝试的C#代码是:
using (var client = tcpClientBuilder.CreateTcpClient())
{
if(!client.Connected)
client.Connect("xx.x.xxx.xx", 9093);
using (var stream = client.GetStream())
{
using (var ssl = new SslStream(stream, false, ValidateCertificate))
{
ssl.AuthenticateAsClient("xx.x.xxx.xx", _certificateCollection,
SslProtocols.Tls, false);
}
我使用的证书文件是PEM文件,而我正在使用的C#库是https://github.com/Jroland/kafka-net
我在validateCrtificate回调中返回的异常是:
无法从传输连接中读取数据:连接尝试失败,因为一段时间后被连接方未正确响应,或者建立连接失败,因为连接的主机未响应。
kafka服务器运行正常,并且能够使用Java连接到它。我在日志文件(附加)中找不到任何错误。 ValidateCertificate的代码为:
private bool ValidateCertificate(object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors sslPolicyErrors)
{
if (sslPolicyErrors.ToString() != "None")
{
return true;
}
return false;
}
在将任何消息发送到kafka之前,我还调用了SSLSream握手方法。执行过程没有任何错误。
private void HandShake(X509Certificate2Collection certificateCollection, IPHostEntry entry, SslStream sslStream)
{
try
{
sslStream.AuthenticateAsClient(entry.HostName, certificateCollection, SslProtocols.Default, false);
sslStream.Write(Encoding.ASCII.GetBytes(handshake), 0, Encoding.ASCII.GetBytes("handshake").Length);
sslStream.Flush();
}
catch (AuthenticationException ae)
{
throw;
}
}
如果任何人都可以对此发表任何看法,那将非常有帮助。 我使用的证书文件是PEM文件,而我正在使用的C#库是https://github.com/Jroland/kafka-net。证书文件已正确导出到Kafka。
我得到的错误是
”无法从传输连接读取数据:一个连接 尝试失败,因为关联方未正确响应 一段时间后,或建立的连接失败,原因是 连接的主机无法响应。”
kafka服务器正在运行,我在日志文件中找不到任何错误。
注意:我能够使用JRoland SDK([https://github.com/Jroland/kafka-net][1])
连接到Kafka。Kafka版本:Kafka_2.11-0.10.0.0 如果有人可以对此提供任何启示,那将非常有帮助。
谢谢