kafka python producer-SSL连接失败-仅限Trustore

kafka python producer-SSL连接失败-仅限Trustore,python,ssl,apache-kafka,kafka-python,apache-kafka-security,Python,Ssl,Apache Kafka,Kafka Python,Apache Kafka Security,我试图通过python将消息发布到卡夫卡主题,但收到一个错误。我可以通过CLI进行连接和发布。希望得到一些指导。我在谷歌上搜索并阅读了文件。谢谢 成功的CLI命令: kafka-console-producer --broker-list 123.45.67.891:1234,123.45.67.892:1234,123.45.67.893:1234 -- producer.config C:\Users\fake_user\Kafka\client-ssl.properties --

我试图通过python将消息发布到卡夫卡主题,但收到一个错误。我可以通过CLI进行连接和发布。希望得到一些指导。我在谷歌上搜索并阅读了文件。谢谢

成功的CLI命令:

 kafka-console-producer --broker-list 
 123.45.67.891:1234,123.45.67.892:1234,123.45.67.893:1234 -- 
 producer.config C:\Users\fake_user\Kafka\client-ssl.properties --topic FakeTopic

 Contents of client-ssl.properties:
   security.protocol = SSL
   ssl.truststore.location = C:/Users/fake_user/Kafka/kafka-truststore
   ssl.truststore.password = fakepass
代码:

从卡夫卡导入卡夫卡制作人
producer=KafkaProducer(引导服务器=['123.45.67.891:1234','123.45.67.892:1234','123.45.67.893:1234'],
安全协议='SSL',
ssl\u certfile=r'C:\Users\fake\u user\Kafka\Kafka信任库',
ssl_password='fakepass')
send('FakeTopic',value='python\u test',key='test')
结果错误:

Traceback (most recent call last):
  File "kafka_post_test.py", line 6, in <module>
    ssl_password='fakepass')
  File "C:\Users\fake_user\AppData\Local\Programs\Python\Python37-32\lib\site-packages\kafka\producer\kafka.py", line 381, in __init__
    **self.config)
  File "C:\Users\fake_user\AppData\Local\Programs\Python\Python37-32\lib\site-packages\kafka\client_async.py", line 239, in __init__
    self.config['api_version'] = self.check_version(timeout=check_timeout)
  File "C:\Users\fake_user\AppData\Local\Programs\Python\Python37-32\lib\site-packages\kafka\client_async.py", line 874, in check_version
    version = conn.check_version(timeout=remaining, strict=strict, topics=list(self.config['bootstrap_topics_filter']))
  File "C:\Users\fake_user\AppData\Local\Programs\Python\Python37-32\lib\site-packages\kafka\conn.py", line 1078, in check_version
    if not self.connect_blocking(timeout_at - time.time()):
  File "C:\Users\fake_user\AppData\Local\Programs\Python\Python37-32\lib\site-packages\kafka\conn.py", line 331, in connect_blocking
    self.connect()
  File "C:\Users\fake_user\AppData\Local\Programs\Python\Python37-32\lib\site-packages\kafka\conn.py", line 420, in connect
    if self._try_handshake():
  File "C:\Users\fake_user\AppData\Local\Programs\Python\Python37-32\lib\site-packages\kafka\conn.py", line 496, in _try_handshake
    self._sock.do_handshake()
  File "C:\Users\fake_user\AppData\Local\Programs\Python\Python37-32\lib\ssl.py", line 1117, in do_handshake
    self._sslobj.do_handshake()
ssl.SSLCertVerificationError: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: self signed certificate in certificate chain (_ssl.c:1051)
回溯(最近一次呼叫最后一次):
文件“kafka_post_test.py”,第6行,在
ssl_password='fakepass')
文件“C:\Users\fake\u user\AppData\Local\Programs\Python\Python37-32\lib\site packages\kafka\producer\kafka.py”,第381行,在u init中__
**self.config)
文件“C:\Users\fake\u user\AppData\Local\Programs\Python\Python37-32\lib\site packages\kafka\client\u async.py”,第239行,在u init中__
self.config['api\u version']=self.check\u version(超时=检查超时)
文件“C:\Users\fake\u user\AppData\Local\Programs\Python37-32\lib\site packages\kafka\client\u async.py”,第874行,检查版本
version=conn.check\u version(超时=剩余,严格=严格,主题=列表(self.config['bootstrap\u topics\u filter']))
文件“C:\Users\fake\u user\AppData\Local\Programs\Python\Python37-32\lib\site packages\kafka\conn.py”,第1078行,检查版本
如果不是self.connect\u阻塞(timeout\u at-time.time()):
文件“C:\Users\fake\u user\AppData\Local\Programs\Python\Python37-32\lib\site packages\kafka\conn.py”,第331行,在connect\u块中
self.connect()
文件“C:\Users\fake\u user\AppData\Local\Programs\Python37-32\lib\site packages\kafka\conn.py”,第420行,在connect中
如果是self.\u尝试握手():
文件“C:\Users\fake\u user\AppData\Local\Programs\Python\Python37-32\lib\site packages\kafka\conn.py”,第496行,在“尝试握手”中
self.\u sock.do\u握手()
文件“C:\Users\fake\u user\AppData\Local\Programs\Python\Python37-32\lib\ssl.py”,第1117行,在do\u握手中
赛尔夫:握手
ssl.SSLCertVerificationError:[ssl:证书\u验证\u失败]证书验证失败:证书链中的自签名证书(\u ssl.c:1051)
看看这个


对于几乎所有由Java运行的程序,都必须将SSL证书添加到JVM密钥库中。

我发现,默认情况下,python kafka库将SSL_cafile属性设置为None。将其设置为默认操作系统(/etc/pki/tls/cert.pem,linux上)允许我连接到kafka代理


您是否能够使用console producer生成消息?是的,我可以。也可以通过卡夫卡托尔。谢谢你的链接。我把它挖了进去。请知道,使用相同的文档,我只能通过kafka发行版提供的控制台生产者连接truststore文件。这些服务器不需要客户端认证,因此不需要包含密钥库。我一直在尝试复制与python库的唯一连接。感谢您对我们社区的贡献!请专注于问题并改进你的答案。您可以添加更多格式和详细信息,这有助于解决问题。