首页 > 解决方案 > 架构注册表安全配置

问题描述

尝试使用 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 一起使用?

标签: apache-kafkaconfluent-schema-registryapache-kafka-security

解决方案


您的证书中似乎缺少主题备用名称 (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):

  1. 通用名称 (CN)
  2. 主题备用名称 (SAN)

这两个字段都有效,但是RFC-2818建议使用 SAN。SAN 也更加灵活,允许声明多个 DNS 条目。另一个优点是可以将 CN 设置为更有意义的值以用于授权目的。


或者,您可以选择禁用服务器主机验证

ssl.endpoint.identification.algorithm通过设置为空字符串来禁用服务器主机名验证 。

因此,您只需要在 server.properties 中设置以下配置,最后重新启动您的 Kafka 集群

ssl.endpoint.identification.algorithm=

推荐阅读