带有 SASL-SCRAM - SSL 对等体的 Kafka2.2.0 未经过身份验证,而是返回 ANONYMOUS



Kafka SSL对等体未经过身份验证,当客户端连接代理 SASL 端口时返回 ANONYMOUS 而不是错误,它允许在明文或 SSL 端口上进行连接。

我在启用了 SSL 的 Windows 系统中有 kafka 2.2.0,其中 kafka 代理明文在 9092 上运行,SSL 在 9093 上运行。最重要的是,使用 SCRAM 机制配置了 SASL,侦听器端口为9094,在以 kafka-console-producer 身份运行生产者时,最终出现问题摘要中提到的错误.bat --broker-list localhost:9094 --topic xxx

以下是 SASL 配置,未提供其他配置,如基本配置和 SSL

动物园管理员属性

authProvider.1=org.apache.zookeeper.server.auth.SASLAuthenticationProvider
requireClientAuthScheme=sasl
jaasLoginRenew=3600000

服务器属性

listeners=PLAINTEXT://0.0.0.0:9092,SSL://0.0.0.0:9093,SASL_SSL://0.0.0.0:9094
advertised.listeners=PLAINTEXT://localhost:9092,SSL://localhost:9093,SASL_SSL://localhost:9094
sasl.enabled.mechanisms=SCRAM-SHA-256
sasl.mechanism.inter.broker.protocol=SCRAM-SHA-256

zookeeper_server_jaas.conf

Server {
org.apache.kafka.common.security.scram.ScramLoginModule required
username="admin"
password="admin-pwd"
user_admin="admin-pwd"
user_other1="other1-pwd"
user_other2="other2-pwd";
};

生产者属性

security.protocol=SSL

kafka_server_jaas.conf

KafkaServer {
org.apache.kafka.common.security.scram.ScramLoginModule required
username="admin"
password="admin-pwd";
};
Client {
org.apache.kafka.common.security.plain.PlainLoginModule required
username="admin"
password="admin-pwd";
};

kafka_client_jaas.conf

KafkaClient {
org.apache.kafka.common.security.scram.ScramLoginModule required
username="admin"
password="admin-pwd";
};

启动动物园管理员

SET ZOO_LOG_DIR=C:/Work/kafka_2.11-2.2.0-for-ssl/zookeeper-data
SET KAFKA_HOME=C:/Work/kafka_2.11-2.2.0-for-ssl
set KAFKA_OPTS=-Djava.security.auth.login.config=%KAFKA_HOME%/config/zookeeper_server_jaas.conf
zookeeper-server-start.bat %KAFKA_HOME%/config/zookeeper.properties

启动卡夫卡为

set KAFKA_HOME=C:/Work/kafka_2.11-2.2.0-for-ssl
set KAFKA_OPTS=-Djava.security.auth.login.config=%KAFKA_HOME%/config/kafka_server_jaas.conf
kafka-server-start.bat %KAFKA_HOME%/config/server.properties

启动生产者身份

SET KAFKA_HOME=C:/Work/kafka_2.11-2.2.0-for-ssl
set KAFKA_OPTS=-Djava.security.auth.login.config=%KAFKA_HOME%/config/kafka_client_jaas.conf
kafka-console-producer.bat --broker-list localhost:9094 --topic xxx

仅当我使用代理端口作为 9092 时,生产者才有效。我是否错过了什么并最终导致配置错误。任何输入?

更新:

这是连接生产者/消费者时出现的错误

[2019-10-14 15:39:42,108] 调试 [SslTransportLayer channelId=127.0.0.1:9094-127.0.0.1:63848-0 key=sun.nio.ch.SelectionKeyImpl@222a223c] SSL 对等体未经过身份验证,而是返回 ANONYMOUS (org.apache.kafka.common.network.SslTransportLayer( [2019-10-14 15:39:42,108]调试 [SslTransportLayer channelId=127.0.0.1:9094-127.0.0.1:63848-0 key=sun.nio.ch.SelectionKeyImpl@222a223c] SSL 握手成功完成,对等主机"127.0.0.1" 对等端口 63848 对等主体 'User:ANONYMOUS' cipherSuite 'TLS_DHE_DSS_WITH_AES_256_CBC_SHA256' (org.apache.kafka.common.network.SslTransportLayer( [2019-10-14 15:39:42,108]DEBUG 在身份验证期间将 SASL 服务器状态设置为HANDSHAKE_OR_VERSIONS_REQUEST (org.apache.kafka.common.security.authenticator.SaslServerAuthenticator( [2019-10-14 15:39:42,108]DEBUG 处理 Kafka 请求在身份验证期间API_VERSIONS (org.apache.kafka.common.security.authenticator.SaslServerAuthenticator( [2019-10-14 15:39:42,108]DEBUG 在身份验证期间将 SASL 服务器状态设置为HANDSHAKE_REQUEST (org.apache.kafka.common.security.authenticator.SaslServerAuthenticator( [2019-10-14 15:39:42,108]调试 在身份验证期间将 SASL 服务器状态设置为 FAILED (org.apache.kafka.common.security.authenticator.SaslServerAuthenticator( [2019-10-14 15:39:42,108]INFO [SocketServer brokerId=0] 使用 127.0.0.1/127.0.0.1 的身份验证失败(SASL 握手期间出现 METADATA 类型的意外 Kafka 请求。(org.apache.kafka.common.network.Selector(

我遇到了同样的问题。使用 SASL SCRAM 进行身份验证在 2.2.x 和 2.3.x Kafka 版本上不起作用。在 2.1 上还可以。

最后,我在创建主体时通过提供 zookeeper chroot 路径 (/kafkaTest( 解决了这个问题:

./kafka-configs --zookeeper zookeeper-01:2181/kafkaTest --alter --add-config 'SCRAM-SHA-256=[password=admin-secret],SCRAM-SHA-512=[password=admin-secret]' --entity-type users --entity-name admin

似乎在动物园管理员根路径中创建凭据时,Kafka 找不到它们进行验证。

我希望它也能解决您的问题!

相关内容

最新更新