当前位置: 首页 > 知识库问答 >
问题:

在SSL模式下使用apache kafka

东门秦迟
2023-03-14

我正在尝试在SSL[1-way]模式下设置kafka。我已经通过了官方留档并成功生成了证书。我会记下2种不同情况下的行为。这个设置只有一个经纪人和一个动物园管理员。

我的server.properties文件中的相关条目如下:

listeners=PLAINTEXT://localhost:9092, SSL://localhost:9093
ssl.keystore.location=/Users/xyz/home/ssl/server.keystore.jks
ssl.keystore.password=****
ssl.key.password=****

我在kafka配置目录中添加了一个< code > client-SSL . properties ,包含以下条目:

security.protocol=SSL
ssl.truststore.location=/Users/xyz/home/ssl/client.truststore.jks
ssl.truststore.password=****

如果我将bootstrap.servers=localhost:9093bootstrap.servers=localhost:9092放在我的config/producer.properties文件中,我的控制台生产者/消费者工作正常。这是预期的行为吗?如果是,那是为什么?因为我特别尝试以SSL模式从生产者/消费者连接到localhost:9093。

我的server.properties文件中的相关条目如下:

security.inter.broker.protocol=SSL
listeners=SSL://localhost:9093
ssl.keystore.location=/Users/xyz/home/ssl/server.keystore.jks
ssl.keystore.password=****
ssl.key.password=****

我的client-ssl.properties文件保持不变。我将bootstrap.servers=localhost:9093放在producer.properties文件中。现在,我的生产者/消费者都无法连接到kafka。我收到以下消息

WARN Error while fetching metadata with correlation id 0 : {test=LEADER_NOT_AVAILABLE} (org.apache.kafka.clients.NetworkClient)

我做错了什么?

在所有这些情况下,我都使用以下命令启动生产者/消费者:

./kafka-console-producer.sh --broker-list localhost:9093 --topic test --producer.config ../config/client-ssl.properties
./kafka-console-consumer.sh --bootstrap-server localhost:9093 --topic test --consumer.config ../config/client-ssl.properties

共有3个答案

易扬
2023-03-14

两个答案都指出了正确的方向,但是需要增加更多的细节来结束这种混乱。

我使用这个bash脚本从confluent生成证书,当我查看文件内部时,它是有意义的。我将在此处粘贴相关部分:

echo "     NOTE: currently in Kafka, the Common Name (CN) does not need to be the FQDN of"
echo "     this host. However, at some point, this may change. As such, make the CN"
echo "     the FQDN. Some operating systems call the CN prompt 'first / last name'"

给你。生成证书时,请确保在请求名字/姓氏时输入localhost(或FQDN)。请记住,您需要使用相同的endpoint来公开代理。

祁渊
2023-03-14

有关此情况的一个重要信息:可以通过向 server.properties 添加以下行来停用 CN 必须与主机名相等的行为:

    ssl.endpoint.identification.algorithm=

此设置的默认值设置为https,这最终会激活主机进行CN验证。这是自Kafka 2.0以来的默认值。

我已经成功测试了具有以下属性的SSL设置(虽然只是在代理端):

    ############################ SSL Config #################################
    ssl.truststore.location=/path/to/kafka.truststore.jks
    ssl.truststore.password=TrustStorePassword
    ssl.keystore.location=/path/to/kafka.server.keystore.jks
    ssl.keystore.password=KeyStorePassword
    ssl.key.password=PrivateKeyPassword
    security.inter.broker.protocol=SSL
    listeners=SSL://localhost:9093
    advertised.listeners=SSL://127.0.0.1:9093
    ssl.client.auth=required
    ssl.endpoint.identification.algorithm=

您还可以在这个github项目中找到生成SSL证书(带有密钥库和信任库)的Shell脚本以及一些文档:https://github.com/confluentinc/confluent-platform-security-tools

夏振国
2023-03-14

确保证书中的通用名称(CN)与您的主机名匹配。SSL协议根据主机名验证CN。我想你应该有CN=localhost。我有一个类似的问题,这就是我如何修复的。

 类似资料:
  • 问题 如何在调试模式下使用session? 解法 使用web.py自带的webserver提供web服务时,web.py就运行在调试模式下。当然最简单的办法就是禁用调试,只要令web.config.debug = False即可。 import web web.config.debug = False # rest of your code 如果非要用调试模式下使用session,可以用非主流

  • 问题内容: 我知道它已经被讨论过很多次了,大多数文章都引用了以下代码:AngularJS中带有自定义URL的模态窗口 但是我就是不明白。我根本看不出来。我还发现这个jsfiddle实际上很棒,非常有帮助,除了它不添加url并允许我使用后退按钮关闭模式。 编辑:这是我需要帮助。 因此,让我尝试解释我要实现的目标。 我有一个添加新项目的表格,并且有一个“添加新项目”链接。我想当我单击“添加新项目”时,

  • 问题内容: 我正在尝试使用selenium-webdriver登录facebook.com。 它给出了错误: (/home/shubham/Music/amazon_login/test_22_4_16/sel_login.js:1:79) at Module._compile (module.js:456:26) at Object.Module._extensions..js (module.

  • 我试图创建一个客户端应用程序使用谷歌Web工具包。我已经下载了最新的工具,并尝试使用Eclipse作为我的开发环境。 选择“Run as”(右键单击项目)时可用的命令包括“GWT编译器”和“GWT开发模式”以及其他一些与Jetty相关的模式。我选择“GWT开发模式”并得到一个包含以下文本的页面: 我将bookmarklets放入书签栏,然后单击TestClient的链接。我得到一个包含以下内容的页

  • 我正在尝试使用itext7。pdfhtml将html字符串转换为C#格式的pdf文档。Net项目。当我运行此代码时: 我得到以下异常:iText。许可证。许可证密钥异常:未加载产品的许可证文件。 我不想加载试用许可证或商业许可证。我想在AGPL模式下运行itext7。我该怎么做? 我用的是: itext7 v7.0.3 itext7.licensekeyv2.0.4 itext7.pdfhtmlv

  • 在前面的章节中,你交互式地使用mysql输入查询并且查看结果。你也可以以批模式运行mysql。为了做到这些,把你想要运行的命令放在一个文件中,然后告诉mysql从文件读取它的输入: shell> mysql < batch-file 如果在Windows下运行mysql,并且文件中有一些可以造成问题的特殊字符,可以这样操作: C:\> mysql -e "source batch-file" 如果