Kafka 多协议配置分步指南

阶段 1:仅启用 PLAINTEXT(基础配置)​

https://www.cnblogs.com/jiaxzeng/p/15980245.html

​阶段 2:添加 SSL 协议

生成 SSL 证书

  1. ca证书
# 1. 生成 CA 私钥和自签名证书
openssl req -new -x509 -nodes \
  -keyout ca.key -out ca.crt \
  -days 3650 -subj "/C=CN/ST=GuangDong/L=GuangZhou/CN=Kafka Root CA"

# 2. 将 CA 证书导入 PKCS#12 格式的 truststore(客户端和服务器共用)
keytool -keystore kafka.server.truststore.p12 -storetype PKCS12 \
  -alias CARoot -import -file ca.crt \
  -storepass truststore_password -noprompt 

# 清理临时文件
rm -f ca.srl
  1. 服务证书
# 1. 生成服务器 PKCS#12 格式的 keystore(包含私钥和未签名证书)
keytool -keystore kafka.server.keystore.p12 -storetype PKCS12 \
  -alias localhost -validity 3650 \
  -genkey -keyalg RSA -keysize 2048 \
  -storepass keystore_password \
  -dname "C=CN/ST=GuangDong/L=GuangZhou/CN=kafka-server"

# 2. 生成证书签名请求 (CSR)
keytool -keystore kafka.server.keystore.p12 -storetype PKCS12 \
  -alias localhost -certreq -file server.csr \
  -storepass keystore_password

# 3. 使用 CA 签名服务器证书(添加 SAN 扩展)
openssl x509 -req -CA ca.crt -CAkey ca.key \
  -in server.csr -out server-signed.crt \
  -days 3650 -CAcreateserial \
  -extfile <(printf "subjectAltName=IP:172.139.20.17,IP:172.139.20.81,IP:172.139.20.177") # 所有kafka地址

# 4. 将 CA 证书和签名后的证书导入服务器 keystore
keytool -keystore kafka.server.keystore.p12 -storetype PKCS12 \
  -alias CARoot -import -file ca.crt \
  -storepass keystore_password -noprompt

keytool -keystore kafka.server.keystore.p12 -storetype PKCS12 \
  -alias localhost -import -file server-signed.crt \
  -storepass keystore_password -noprompt

# 5. 验证服务证书是否有SAN扩展
$ keytool -list -v -keystore kafka.server.keystore.p12 -alias localhost -storepass keystore_password | grep -A4 SubjectAlternativeName

# 清理临时文件
rm -f server.csr

更新 Kafka 配置 (server.properties)

listeners=PLAINTEXT://:9092,SSL://:9093
advertised.listeners=PLAINTEXT://172.139.20.17:9092,SSL://172.139.20.17:9093


# SSL 配置
ssl.keystore.location=/app/kafka/pki/kafka.server.keystore.p12
ssl.keystore.password=keystore_password
ssl.keystore.type=PKCS12
ssl.truststore.location=/app/kafka/pki/kafka.server.truststore.p12
ssl.truststore.password=truststore_password
ssl.truststore.type=PKCS12
ssl.client.auth=none

验证 SSL

  1. 客户端配置 (ssl-client.properties)
security.protocol=SSL
ssl.truststore.location=/app/kafka/pki/kafka.server.truststore.p12
ssl.truststore.password=truststore_password
ssl.truststore.type=PKCS12
  1. 消费消息(SSL)
bin/kafka-console-consumer.sh --bootstrap-server 172.139.20.17:9093 --topic test   --consumer.config ~/ssl-client.properties  --from-beginning

确保test主题有消息,才能输出消息。

阶段 3:添加 SASL_PLAINTEXT(SCRAM 认证)​

创建 SCRAM 用户

bin/kafka-configs.sh --bootstrap-server localhost:9092 --alter   --add-config 'SCRAM-SHA-512=[password=admin-password]'   --entity-type users --entity-name admin

更新 Kafka 配置 (server.properties)

listeners=PLAINTEXT://:9092,SSL://:9093,SASL_PLAINTEXT://:9094
advertised.listeners=PLAINTEXT://172.139.20.17:9092,SSL://172.139.20.17:9093,SASL_PLAINTEXT://172.139.20.17:9094

# SASL 配置
sasl.enabled.mechanisms=SCRAM-SHA-512

配置 JAAS 文件 (kafka_server_jaas.conf)

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

启动 Kafka(kafka-server-start.sh)​

# kafka-server-start.sh脚本开头添加
export KAFKA_OPTS="-Djava.security.auth.login.config=/app/kafka/config/kafka_server_jaas.conf"

验证 SASL_PLAINTEXT

  1. 客户端配置 (sasl-plain-client.properties )
security.protocol=SASL_PLAINTEXT
sasl.mechanism=SCRAM-SHA-512
sasl.jaas.config=org.apache.kafka.common.security.scram.ScramLoginModule required username="admin" password="admin-password";
  1. 消费消息(SSL)
bin/kafka-console-consumer.sh --bootstrap-server 172.139.20.17:9094 --topic test   --consumer.config ~/sasl-plain-client.properties  --from-beginning

阶段 4:添加 SASL_SSL(SSL + SCRAM)​

更新 Kafka 配置 (server.properties)

listeners=PLAINTEXT://:9092,SSL://:9093,SASL_PLAINTEXT://:9094,SASL_SSL://:9095
advertised.listeners=PLAINTEXT://172.139.20.17:9092,SSL://172.139.20.17:9093,SASL_PLAINTEXT://172.139.20.17:9094,SASL_SSL://172.139.20.17:9095

验证 SASL_SSL

  1. 客户端配置 (sasl-ssl-client.properties )
security.protocol=SASL_SSL
sasl.mechanism=SCRAM-SHA-512
sasl.jaas.config=org.apache.kafka.common.security.scram.ScramLoginModule required username="admin" password="admin-password";
ssl.truststore.location=/app/kafka/pki/kafka.server.truststore.p12
ssl.truststore.password=truststore_password
  1. 消费消息(SSL)
bin/kafka-console-consumer.sh --bootstrap-server 172.139.20.17:9095 --topic test   --consumer.config ~/sasl-ssl-client.properties  --from-beginning

保持 kafka/bin 命令使用 PLAINTEXT

所有 kafka-topics.sh、kafka-configs.sh 等工具默认使用 PLAINTEXT 端口 9092

$ bin/kafka-topics.sh --bootstrap-server localhost:9092 --list

$ bin/kafka-configs.sh --bootstrap-server localhost:9092 --describe --entity-type users

$ bin/kafka-consumer-groups.sh --bootstrap-server localhost:9092 --all-groups --list
posted @   jiaxzeng  阅读(5)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」
· Manus的开源复刻OpenManus初探
· 写一个简单的SQL生成工具
点击右上角即可分享
微信分享提示