蓝牙耳机连接背后的HCI协议:一次完整交互数据包拆解
2026/3/29 22:42:27
Kafka 的认证机制主要围绕客户端与 broker、broker 与 broker、broker 与 Controller、工具类(如 kafka-console-producer)与 broker之间的身份验证展开,官方及社区主流支持的认证方式可分为六大类,涵盖从简单的用户名密码到强安全的证书认证,以下是详细说明:
Kafka 认证的核心是基于SASL(Simple Authentication and Security Layer)框架(主流)和少量非 SASL 方式(如 SSL 证书认证),不同认证方式适配不同的安全等级、部署复杂度和场景需求:
| 认证方式 | 安全等级 | 部署复杂度 | 核心适用场景 |
|---|---|---|---|
| SASL/PLAIN | 低 | 极低 | 测试 / 内网环境、简单身份校验 |
| SASL/SCRAM | 中 | 低 | 生产环境、需密码加密存储 |
| SASL/GSSAPI (Kerberos) | 高 | 高 | 企业级统一认证、Kerberos 生态集成 |
| SASL/OAUTHBEARER | 高 | 中 | 云原生 / 微服务、OAuth2.0 生态 |
| SSL/TLS 证书认证 | 高 | 中 | 强身份校验、双向证书验证 |
| Delegation Tokens | 高 | 中 | 临时权限、跨服务无密钥访问 |
基于 SASL 框架的最简单认证方式,客户端直接将明文用户名 + 密码(传输时可通过 SSL 加密通道)发送给 broker,broker 校验是否匹配配置的用户列表(或外部存储)。
properties
# 启用SASL_PLAINTEXT协议(或SASL_SSL,结合SSL加密传输) listeners=SASL_PLAINTEXT://:9092 sasl.enabled.mechanisms=PLAIN sasl.mechanism.inter.broker.protocol=PLAIN # 配置用户密码(明文,生产不推荐) sasl.jaas.config=org.apache.kafka.common.security.plain.PlainLoginModule required \ username="admin" \ password="admin123" \ user_admin="admin123" \ user_producer="producer123";SCRAM(Salted Challenge Response Authentication Mechanism)是 PLAIN 的安全升级版:
properties
sasl.enabled.mechanisms=SCRAM-SHA-256 sasl.mechanism.inter.broker.protocol=SCRAM-SHA-256 sasl.jaas.config=org.apache.kafka.common.security.scram.ScramLoginModule required \ username="admin" \ password="admin123";bash
运行
# 创建SCRAM用户 kafka-configs.sh --bootstrap-server localhost:9092 --alter --add-config 'SCRAM-SHA-256=[password=admin123]' --entity-type users --entity-name admin基于 Kerberos 协议的企业级认证,核心是票据(Ticket)认证而非密码:
properties
sasl.enabled.mechanisms=GSSAPI sasl.mechanism.inter.broker.protocol=GSSAPI sasl.jaas.config=com.sun.security.auth.module.Krb5LoginModule required \ useKeyTab=true \ keyTab="/etc/kafka/kafka.keytab" \ principal="kafka/broker.example.com@EXAMPLE.COM"; # Kerberos配置文件路径 java.security.krb5.conf=/etc/krb5.conf基于 OAuth2.0 框架的令牌认证,适用于云原生、微服务场景:
properties
sasl.mechanism=OAUTHBEARER sasl.jaas.config=org.apache.kafka.common.security.oauthbearer.OAuthBearerLoginModule required \ oauth.token.endpoint.url="https://auth.example.com/token" \ oauth.client.id="kafka-client" \ oauth.client.secret="client-secret";基于 X.509 证书的身份验证,分为单向认证(broker 验证客户端)和双向认证(客户端也验证 broker):
properties
# 启用SSL协议 listeners=SSL://:9093 # 服务端证书/密钥 ssl.keystore.location=/etc/kafka/server.keystore.jks ssl.keystore.password=keystore123 ssl.key.password=key123 # 信任CA证书(验证客户端证书) ssl.truststore.location=/etc/kafka/server.truststore.jks ssl.truststore.password=truststore123 # 启用双向认证 ssl.client.auth=required一种临时的、无密钥的认证方式,适用于跨服务访问(如 Flink 消费 Kafka):
bash
运行
kafka-delegation-tokens.sh --bootstrap-server localhost:9092 --create --max-life-time 86400000 --renewal-time 3600000 --owner principal:user1