2016-02-29 42 views
2

Kafka允许客户端通过SSL进行连接。默认情况下,SSL被禁用,但我通过引用下面的链接来启用。 http://docs.confluent.io/2.0.0/kafka/ssl.html为Kafka客户端启用SSL

完成所有配置后,生产者/消费者无法生成/消费该消息。 [2016-02-29 09:20:49,189] ERROR向密钥主题ssltopic发送消息时出错:null,值:2个字节,错误:无法在60000 ms后更新元数据。 (org.apache.kafka.clients.producer.internals.ErrorLoggingCallback) sas [2016-02-29 09:21:16,031] WARN无法发送SSL关闭消息(org.apache.kafka.common.network.SslTransportLayer) java.io.IOException:连接重置由对方

回答

3

以下是一些验证步骤。由于错误日志不详细,您可以尝试下面的步骤来验证设置是否良好。

  1. 要验证服务器的密钥库和信任是正确设置你可以运行下面的命令: 的OpenSSL的s_client.First -debug -connect本地主机:9093 -tls1注:使用TLSv1应在ssl.enabled.protocols上市。

在此命令的输出,你应该看到服务器的证书:

-----BEGIN CERTIFICATE----- 
{variable sized random bytes} 
-----END CERTIFICATE----- 
subject=/C=US/ST=CA/L=Santa Clara/O=org/OU=org/CN=Joe Smith issuer=/C=US/ST=CA/L=Santa Clara/O=org/OU=org/CN=kafka/[email protected] 

如果证书没有显示出来,或者如果有任何其他错误消息那么你的密钥库设置不正确。

  • 检查server.properties

    回声“######################### ####安全性#############################“”server.properties echo“listeners = SSL://: 9093“>> server.properties echo”security.inter.broker.protocol = SSL“>> server.properties echo”ssl.client.auth = required“>> server.properties echo”ssl.keystore.location = /home/vagrant/securityDemo/kafka.server.keystore.jks“>> server.properties echo”ssl.keystore.password = test1234“>> server.properties echo”ssl.key.password = test1234“>> ser ver.properties echo“ssl.truststore.location =/home/vagrant/securityDemo/kafka.server.truststore.jks”>> server.properties echo“ssl.truststore.password = test1234”>> server.properties echo “ssl.enabled.protocols = TLSv1.2,TLSv1.1,TLSv1”>> server.properties echo“authorizer.class.name = kafka.security.auth.SimpleAclAuthorizer”>>,if acl enabled ** server.properties

  • 确保您只有一个CA根目录。

  • 参考:1. http://docs.confluent.io/2.0.0/kafka/ssl.html 2. https://github.com/Symantec/kafka-security-0.9

    4

    通过supermonk以上回答澄清大部分的地方进行检查。我面临与OP类似的问题,并且错误不在代理配置中,而是在客户端配置中。
    在官方documentation中,虽然他们隐式提到要创建client.keystore作为步骤1,但我错过了使用CA为server.keystore进行的证书签名。这导致卡夫卡经纪人拒绝与客户(生产者/消费者)的联系。

    执行这两个步骤已经消除了我的情况下的问题。

    keytool -keystore kafka.client.keystore.jks -alias localhost -certreq -file cert-file 
    openssl x509 -req -CA ca-cert -CAkey ca-key -in cert-file -out cert-signed -days $VALIDITY -CAcreateserial -passin pass:$PASSWORD 
    
    keytool -keystore kafka.client.keystore.jks -alias CARoot -import -file ca-cert 
    keytool -keystore kafka.client.keystore.jks -alias localhost -import -file cert-signed 
    

    这将使用CA-cert签署证书,并将CARoot以及签名证书添加到client.keystore。

    参考:Confluent blog on securing Apache Kafka

    +0

    似乎KAFA问题。 https://issues.apache.org/jira/browse/KAFKA-5401 – Joey