下面以 Ubuntu + Kafka(以官方 Apache Kafka 为例) 说明如何开启 SSL(TLS),包含服务端配置和客户端配置,以及常见坑点。
/opt/kafkakafka.example.comkeytool -genkey -alias kafka-server \
-keyalg RSA -keysize 2048 \
-validity 365 \
-keystore kafka.server.keystore.jks \
-storepass changeit \
-keypass changeit \
-dname "CN=kafka.example.com"
⚠️ CN 必须和客户端连接的主机名一致(否则 SSL 握手失败)
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
sudo mkdir -p /opt/kafka/ssl
sudo cp kafka.server.keystore.jks /opt/kafka/ssl/
sudo cp kafka.client.truststore.jks /opt/kafka/ssl/
sudo chown -R kafka:kafka /opt/kafka/ssl
编辑:
/opt/kafka/config/server.properties
listeners=SSL://:9093
advertised.listeners=SSL://kafka.example.com:9093
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.enabled.protocols=TLSv1.2
ssl.endpoint.identification.algorithm=HTTPS
✅ ssl.endpoint.identification.algorithm=HTTPS
可防止 hostname 校验被绕过(推荐)
sudo systemctl restart kafka
# 或
/opt/kafka/bin/kafka-server-stop.sh
/opt/kafka/bin/kafka-server-start.sh -daemon /opt/kafka/config/server.properties
查看日志:
tail -f /opt/kafka/logs/server.log
/opt/kafka/bin/kafka-console-producer.sh \
--bootstrap-server kafka.example.com:9093 \
--topic test \
--producer.config client-ssl.properties
client-ssl.properties:
security.protocol=SSL
ssl.truststore.location=/opt/kafka/ssl/kafka.client.truststore.jks
ssl.truststore.password=changeit
/opt/kafka/bin/kafka-console-consumer.sh \
--bootstrap-server kafka.example.com:9093 \
--topic test --from-beginning \
--consumer.config client-ssl.properties
advertised.listenersssl.endpoint.identification.algorithm=
(不推荐,仅调试用)
如果你需要 Kafka + SSL + SASL/SCRAM 或 Docker / Kraft 模式 配置,我可以继续补充。