在 Ubuntu 上部署 Kafka 时,“加密”通常涉及 三个层面:
下面以 最常见、生产推荐的方式:SSL + SASL_SSL 为例说明。
sudo apt update
sudo apt install -y openjdk-11-jdk
假设 Kafka 目录为:
/opt/kafka
cd /opt/kafka
mkdir certs && cd certs
keytool -keystore kafka.server.keystore.jks \
-alias kafka-server \
-validity 365 \
-genkey -keyalg RSA
填写信息时注意:
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
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
编辑:
/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
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
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
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 机制不一致如果你愿意,我可以:
你现在是 单节点还是集群?