在 Debian 上“给 Kafka 加密”通常指 传输加密(TLS/SSL) 和 可选的身份认证(SASL+SSL)。下面按最常见、生产可用的方式一步步说明(以 Debian 11/12 + Kafka 3.x 为例)。
sudo apt update
sudo apt install -y openjdk-17-jdk
下载并解压 Kafka(示例):
wget https://downloads.apache.org/kafka/3.7.0/kafka_2.13-3.7.0.tgz
tar -xzf kafka_2.13-3.7.0.tgz
cd kafka_2.13-3.7.0
keytool -genkey -keystore kafka.server.keystore.jks \
-validity 365 -storepass changeme -keypass changeme \
-dname "CN=kafka.example.com" -alias kafka-server \
-keyalg RSA
CN 最好写 Kafka 的主机名或域名
keytool -export -keystore kafka.server.keystore.jks \
-alias kafka-server -file kafka.server.cert \
-storepass changeme
keytool -import -file kafka.server.cert \
-keystore kafka.server.truststore.jks \
-alias kafka-server -storepass changeme -noprompt
编辑 config/server.properties:
# 监听 SSL
listeners=SSL://:9093
advertised.listeners=SSL://kafka.example.com:9093
# SSL 配置
ssl.keystore.location=/path/to/kafka.server.keystore.jks
ssl.keystore.password=changeme
ssl.key.password=changeme
ssl.truststore.location=/path/to/kafka.server.truststore.jks
ssl.truststore.password=changeme
ssl.client.auth=none
ssl.enabled.protocols=TLSv1.2,TLSv1.3
启动 Kafka:
bin/kafka-server-start.sh config/server.properties
把 kafka.server.truststore.jks 拷贝到客户端机器。
security.protocol=SSL
ssl.truststore.location=/path/to/kafka.server.truststore.jks
ssl.truststore.password=changeme
示例消费:
bin/kafka-console-consumer.sh \
--bootstrap-server kafka.example.com:9093 \
--topic test \
--consumer.config client-ssl.properties
如果你还要账号密码 + 加密:
listeners=SASL_SSL://:9093
security.inter.broker.protocol=SASL_SSL
sasl.enabled.mechanisms=PLAIN
sasl.mechanism.inter.broker.protocol=PLAIN
ssl.keystore.location=...
ssl.truststore.location=...
JAAS 文件示例:
KafkaServer {
org.apache.kafka.common.security.plain.PlainLoginModule required
username="admin"
password="admin-secret"
user_admin="admin-secret";
};
openssl s_client -connect kafka.example.com:9093
能看到 TLS 握手信息即成功。
✅ 使用 CA 签发证书(不要用自签)
✅ 启用 TLS 1.2+
✅ broker 之间也走 SSL
✅ 证书定期轮换
✅ 防火墙只开放 9093
如果你愿意,我可以:
你现在是 单机测试 还是 集群生产环境?