apache-kafka - 架构注册表安全配置
问题描述
尝试使用 SSL 配置架构注册表。尝试将 HTTPS 模式注册表与 AVRO Producer 一起使用时,失败并出现错误
No SAN Name found
我已配置为忽略主机名检查。但仍然没有工作。类似的配置已经在 KAFKA REST、CONNECT 和 KSQL 上起作用。
还尝试从使用模式注册表的 KSQL 运行查询。失败并出现与未找到 SAN 名称相同的错误。
以下是 HTTPS 架构注册表的配置;
listeners=https://0.0.0.0:8081
ssl.keystore.location=/confluent-5.5.0/cert/kafka.server.keystore.jks
ssl.keystore.password=password
ssl.key.password=password
在 avro producer 和 KSQL 上,我配置了 truststore 并指定
ssl.endpoint.identification.algorithm=
您能否帮助使用 HTTPS 配置 Schema 注册表并使其与 avro producer 和 KSQL 一起使用?
解决方案
您的证书中似乎缺少主题备用名称 (SAN)。
为此,请将参数附加-ext SAN=DNS:{FQDN}
到 keytool 命令:
keytool \
-keystore kafka.server.keystore.jks \
-alias localhost \
-validity {validity} \
-genkey \
-keyalg RSA \
-ext SAN=DNS:{FQDN}
确保在创建服务器的密钥库时包括 SAN。Confluent 的安全教程中也提到了这一点:
如果启用主机名验证,客户端将根据以下两个字段之一验证服务器的完全限定域名 (FQDN):
- 通用名称 (CN)
- 主题备用名称 (SAN)
这两个字段都有效,但是RFC-2818建议使用 SAN。SAN 也更加灵活,允许声明多个 DNS 条目。另一个优点是可以将 CN 设置为更有意义的值以用于授权目的。
或者,您可以选择禁用服务器主机验证:
ssl.endpoint.identification.algorithm
通过设置为空字符串来禁用服务器主机名验证 。
因此,您只需要在 server.properties 中设置以下配置,最后重新启动您的 Kafka 集群:
ssl.endpoint.identification.algorithm=
推荐阅读
- java - 如何在 java 网络中使用 ObjectInbputStreem 修复 java EOFException
- ios - 在 Mac Catalyst App 中将键盘操作连接到 UIButton 操作
- java - 两个数的 Java Gui 和
- ansible - 仅当服务存在时,我如何采取行动?
- ansible - Ansible,计算字符串中单词的出现次数
- sql - 在 sql 中使用 convert() 时 XML 输入字符串被截断
- windows - 在 PowerApps 中如何配置表单中子网格组件的内联查找
- r - 为什么基本的 R `print()` 函数需要一个 tibble?
- python - 如何在for循环中为二维数组赋值
- github - 如何在 Github 操作中检查头分支是否与分支拉取请求中的特定模式匹配