使用SSLStream连接到Kafka

时间:2019-04-08 04:54:36

标签: c# ssl apache-kafka

我正在尝试使用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 如果有人可以对此提供任何启示,那将非常有帮助。

谢谢

0 个答案:

没有答案