0

Kafka SSL 对等体未经过身份验证,客户端连接代理 SASL 端口时返回 ANONYMOUS错误,它允许在 PLAINTEXT 或 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

zookeeper.properties

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";
};

启动 Zookeeper 为

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

启动kafka为

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 握手成功完成 peerHost '127.0.0.1' peerPort 63848 peerPrincipal '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] DEBUG 在身份验证期间将 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)108] DEBUG 在身份验证期间将 SASL 服务器状态设置为 HANDSHAKE_REQUEST (org.apache.kafka.common.security.authenticator.SaslServerAuthenticator) [2019-10-14 15:39:42,108] DEBUG 在身份验证期间将 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)108] DEBUG 在身份验证期间将 SASL 服务器状态设置为 HANDSHAKE_REQUEST (org.apache.kafka.common.security.authenticator.SaslServerAuthenticator) [2019-10-14 15:39:42,108] DEBUG 在身份验证期间将 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)108] INFO [SocketServer brokerId=0] 使用 127.0.0.1/127.0.0.1 身份验证失败(SASL 握手期间出现 METADATA 类型的意外 Kafka 请求。)(org.apache.kafka.common.network.Selector)108] INFO [SocketServer brokerId=0] 使用 127.0.0.1/127.0.0.1 身份验证失败(SASL 握手期间出现 METADATA 类型的意外 Kafka 请求。)(org.apache.kafka.common.network.Selector)

4

1 回答 1

1

我有同样的问题。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

好像在 Zookeeper 根路径中创建凭据时,Kafka 无法找到它们进行验证。

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

于 2019-10-16T13:55:04.947 回答