温馨提示×

ubuntu kafka配置如何加密

小樊
46
2026-09-08 14:18:36
栏目: 网络安全

在 Ubuntu 上部署 Kafka 时,“加密”通常涉及 三个层面:

  1. 传输加密(TLS/SSL) —— 防止数据被窃听
  2. 认证加密(SASL + SSL) —— 客户端身份校验
  3. 数据加密(应用层 / 磁盘加密) —— 消息内容或磁盘保护

下面以 最常见、生产推荐的方式:SSL + SASL_SSL 为例说明。


一、环境准备(Ubuntu)

sudo apt update
sudo apt install -y openjdk-11-jdk

假设 Kafka 目录为:

/opt/kafka

二、生成 SSL 证书(自签或 CA)

1️⃣ 生成 Kafka 服务端密钥库

cd /opt/kafka
mkdir certs && cd certs

keytool -keystore kafka.server.keystore.jks \
  -alias kafka-server \
  -validity 365 \
  -genkey -keyalg RSA

填写信息时注意:

  • Common Name (CN) 建议填 Kafka 主机名或 IP

2️⃣ 生成 CA(可选但推荐)

openssl req -new -x509 -keyout ca-key -out ca-cert -days 365

将 CA 导入信任库:

keytool -keystore kafka.server.truststore.jks \
  -alias CARoot \
  -import -file ca-cert

3️⃣ 签发服务端证书(CA 模式)

keytool -keystore kafka.server.keystore.jks \
  -alias kafka-server \
  -certreq -file cert-file

openssl x509 -req -CA ca-cert -CAkey ca-key \
  -in cert-file -out cert-signed -days 365

keytool -keystore kafka.server.keystore.jks \
  -alias CARoot -import -file ca-cert

keytool -keystore kafka.server.keystore.jks \
  -alias kafka-server -import -file cert-signed

三、配置 Kafka 服务端(SSL)

编辑:

/opt/kafka/config/server.properties
listeners=SSL://:9093
advertised.listeners=SSL://kafka-host:9093

ssl.keystore.location=/opt/kafka/certs/kafka.server.keystore.jks
ssl.keystore.password=keystore密码
ssl.key.password=key密码
ssl.truststore.location=/opt/kafka/certs/kafka.server.truststore.jks
ssl.truststore.password=truststore密码

ssl.client.auth=required
ssl.enabled.protocols=TLSv1.2
ssl.endpoint.identification.algorithm=HTTPS

四、启用 SASL + SSL(身份认证)

1️⃣ 服务端配置

listeners=SASL_SSL://:9093
security.inter.broker.protocol=SASL_SSL
sasl.enabled.mechanisms=SCRAM-SHA-256
sasl.mechanism.inter.broker.protocol=SCRAM-SHA-256

创建 JAAS 文件:

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

启动 Kafka:

export KAFKA_OPTS="-Djava.security.auth.login.config=/opt/kafka/config/kafka_server_jaas.conf"
bin/kafka-server-start.sh config/server.properties

2️⃣ 创建用户

bin/kafka-configs.sh \
  --bootstrap-server kafka-host:9093 \
  --command-config client-ssl.properties \
  --alter --add-config 'SCRAM-SHA-256=[iterations=8192,password=client-secret]' \
  --entity-type users --entity-name client1

五、客户端配置(Producer / Consumer)

client-ssl.properties

security.protocol=SASL_SSL
sasl.mechanism=SCRAM-SHA-256

ssl.truststore.location=/path/client.truststore.jks
ssl.truststore.password=truststore密码

sasl.jaas.config=org.apache.kafka.common.security.scram.ScramLoginModule required \
  username="client1" password="client-secret";

测试:

bin/kafka-console-producer.sh \
  --bootstrap-server kafka-host:9093 \
  --topic test --producer.config client-ssl.properties

六、其他加密方式(简要)

方式 说明
PLAINTEXT 不加密(不建议)
SSL 仅加密传输
SASL_PLAINTEXT 有认证无加密
SASL_SSL ✅ 推荐
磁盘加密 LUKS / dm-crypt
应用层加密 消息体 AES

七、常见问题

  • ❌ SSL handshake failed → CN 不匹配或 truststore 错误
  • ❌ No worthy mech → SASL 机制不一致
  • ✅ 生产环境务必使用 CA 签发证书

如果你愿意,我可以:

  • ✅ 给你 docker-compose Kafka TLS 示例
  • ✅ 帮你写 systemd 启动脚本
  • ✅ 配置 Kafka + KRaft 模式加密

你现在是 单节点还是集群?

0 踩