下面以 Debian + Kafka(以官方二进制包为例) 说明如何开启 TLS(SSL),步骤偏向实战,适用于 Kafka 2.x / 3.x。
Kafka 的 TLS 主要涉及 3 个部分:
listeners=SSL://...sudo mkdir -p /opt/kafka/ssl
cd /opt/kafka/ssl
openssl req -new -x509 -keyout ca-key -out ca-cert -days 3650 \
-subj "/CN=KafkaCA"
keytool -genkey -alias kafka -keyalg RSA \
-keystore kafka.server.keystore.jks \
-validity 3650 \
-dname "CN=kafka.example.com"
⚠️
CN最好和 broker 的 hostname / DNS 一致
keytool -certreq -alias kafka \
-keystore kafka.server.keystore.jks \
-file kafka.csr
openssl x509 -req -CA ca-cert -CAkey ca-key \
-in kafka.csr -out kafka.cert -days 3650 \
-CAcreateserial
keytool -import -alias ca -keystore kafka.server.keystore.jks -file ca-cert
keytool -import -alias kafka -keystore kafka.server.keystore.jks -file kafka.cert
keytool -import -alias ca -keystore kafka.client.truststore.jks -file ca-cert
编辑:
/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.client.auth=none
# none | requested | required
required= 双向 TLS(mTLS)
sudo systemctl restart kafka
# 或
/opt/kafka/bin/kafka-server-stop.sh
/opt/kafka/bin/kafka-server-start.sh -daemon /opt/kafka/config/server.properties
bootstrap.servers=kafka.example.com:9093
security.protocol=SSL
ssl.truststore.location=/opt/kafka/ssl/kafka.client.truststore.jks
ssl.truststore.password=changeit
kafka-console-producer.sh \
--bootstrap-server kafka.example.com:9093 \
--topic test \
--producer.config producer.properties
kafka-console-consumer.sh \
--bootstrap-server kafka.example.com:9093 \
--topic test \
--from-beginning \
--consumer.config consumer.properties
类似 broker 流程,用 CA 签名
ssl.client.auth=required
ssl.keystore.location=/path/client.keystore.jks
ssl.keystore.password=changeit
ssl.key.password=changeit
ssl.endpoint.identification.algorithm=
(关闭校验,仅测试用)
sudo ufw allow 9093/tcp
确保 Java 8+
java -version
如果你愿意,我可以:
直接说你用的是 Kafka 版本 + 是否 mTLS 即可。