温馨提示×

debian kafka如何用ssl加密

小樊
50
2026-09-03 19:21:18
栏目: 云计算

下面以 Debian + Kafka(以官方二进制包为例) 来说明 如何使用 SSL/TLS 加密 Kafka 通信。内容涵盖:

  • 生成证书
  • 服务端 SSL 配置
  • 客户端 SSL 配置
  • 验证是否生效

一、环境说明

  • OS:Debian 11 / 12
  • Kafka:2.x / 3.x(示例以 kafka_2.13-3.6.0 为例)
  • Java:OpenJDK 11+

二、生成 SSL 证书(使用 keytool)

Kafka 官方推荐使用 Java keystore(JKS)

1. 生成 Kafka 服务端密钥库

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= 关闭校验)


2. 导出证书

keytool -export \
  -alias kafka-server \
  -file kafka.server.cert \
  -keystore kafka.server.keystore.jks \
  -storepass changeit

3. 生成信任库(客户端用)

keytool -import \
  -alias kafka-server \
  -file kafka.server.cert \
  -keystore kafka.client.truststore.jks \
  -storepass changeit \
  -noprompt

三、Kafka 服务端 SSL 配置

将以下文件放到安全目录(如 /opt/kafka/ssl/):

  • kafka.server.keystore.jks
  • kafka.client.truststore.jks

修改 server.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

四、启动 Kafka

/opt/kafka/bin/kafka-server-start.sh \
  /opt/kafka/config/server.properties

五、客户端 SSL 配置(生产者 / 消费者)

1. 客户端信任库

kafka.client.truststore.jks 拷贝到客户端机器。

2. 创建 client-ssl.properties

bootstrap.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

3. 测试生产 / 消费

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(可选,客户端也要证书)

服务端

ssl.client.auth=required

客户端

ssl.keystore.location=/path/to/client.keystore.jks
ssl.keystore.password=changeit
ssl.key.password=changeit

七、常见问题

1. hostname 校验失败

java.security.cert.CertificateException: No subject alternative names matching

解决:

  • CN 与连接地址一致
  • 或关闭校验(不推荐生产):
ssl.endpoint.identification.algorithm=

2. Debian 防火墙

ufw allow 9093/tcp

八、总结

✅ Kafka SSL 核心步骤:

  1. 用 keytool 生成 keystore / truststore
  2. 服务端 server.properties 配置 SSL
  3. 客户端使用 truststore 连接
  4. 验证 TLS 是否生效

如果你需要 Kafka + SASL_SSLDocker / systemd 部署,我也可以继续补充。

0