下面以 Debian + Kafka(以官方二进制包为例) 来说明 如何使用 SSL/TLS 加密 Kafka 通信。内容涵盖:
kafka_2.13-3.6.0 为例)Kafka 官方推荐使用 Java keystore(JKS)。
keytool -genkey \
-alias kafka-server \
-keyalg RSA \
-keysize 2048 \
-validity 365 \
-keystore kafka.server.keystore.jks \
-storepass changeit \
-keypass changeit \
-dname "CN=kafka.example.com,OU=IT,O=Example,L=City,S=State,C=CN"
CN最好和客户端连接的主机名一致(或配置ssl.endpoint.identification.algorithm=关闭校验)
keytool -export \
-alias kafka-server \
-file kafka.server.cert \
-keystore kafka.server.keystore.jks \
-storepass changeit
keytool -import \
-alias kafka-server \
-file kafka.server.cert \
-keystore kafka.client.truststore.jks \
-storepass changeit \
-noprompt
将以下文件放到安全目录(如 /opt/kafka/ssl/):
kafka.server.keystore.jkskafka.client.truststore.jksserver.properties# 监听 SSL
listeners=SSL://:9093
advertised.listeners=SSL://kafka.example.com:9093
# SSL 配置
ssl.keystore.location=/opt/kafka/ssl/kafka.server.keystore.jks
ssl.keystore.password=changeit
ssl.key.password=changeit
ssl.truststore.location=/opt/kafka/ssl/kafka.client.truststore.jks
ssl.truststore.password=changeit
# 是否验证客户端(单向SSL可不验证)
ssl.client.auth=none
# 协议
ssl.enabled.protocols=TLSv1.2
ssl.protocol=TLSv1.2
可选:同时使用 PLAINTEXT + SSL
listeners=PLAINTEXT://:9092,SSL://:9093
/opt/kafka/bin/kafka-server-start.sh \
/opt/kafka/config/server.properties
将 kafka.client.truststore.jks 拷贝到客户端机器。
client-ssl.propertiesbootstrap.servers=kafka.example.com:9093
security.protocol=SSL
ssl.truststore.location=/path/to/kafka.client.truststore.jks
ssl.truststore.password=changeit
ssl.enabled.protocols=TLSv1.2
bin/kafka-console-producer.sh \
--broker-list kafka.example.com:9093 \
--topic test \
--producer.config client-ssl.properties
bin/kafka-console-consumer.sh \
--bootstrap-server kafka.example.com:9093 \
--topic test \
--from-beginning \
--consumer.config client-ssl.properties
ssl.client.auth=required
ssl.keystore.location=/path/to/client.keystore.jks
ssl.keystore.password=changeit
ssl.key.password=changeit
java.security.cert.CertificateException: No subject alternative names matching
解决:
ssl.endpoint.identification.algorithm=
ufw allow 9093/tcp
✅ Kafka SSL 核心步骤:
server.properties 配置 SSL如果你需要 Kafka + SASL_SSL 或 Docker / systemd 部署,我也可以继续补充。