Linux Kafka配置怎样实现数据加密
小樊
41
2025-12-13 03:48:32
Linux Kafka数据加密配置指南
一 加密方式与适用场景
- SSL/TLS(链路加密):加密客户端与 Broker、以及 Broker 之间的网络通信,防止窃听与篡改。常见监听器为 SSL://。适合所有公网/内网传输场景。
- SASL(身份认证):提供用户名/口令或令牌等身份校验,常见机制有 PLAIN、SCRAM-SHA-256/512、GSSAPI(Kerberos)、OAUTHBEARER。SASL 只做认证,不加密,通常与 SSL/TLS 组合使用(即 SASL_SSL)。
- SSL 双向认证(mTLS):在 SSL 基础上同时校验客户端证书,满足更高安全要求,常用于对外暴露接口或严格合规场景。
二 方案一 SSL TLS 加密配置步骤
- 1 生成密钥与证书
- 生成 Broker 密钥库(JKS/PKCS12):
keytool -keystore server.keystore.jks -alias localhost -validity 3650 -genkey -keyalg RSA -storetype pkcs12
- 生成自签 CA 或使用企业 CA:
openssl req -new -x509 -keyout ca-key -out ca-cert -days 3650
- 从密钥库导出 CSR 并用 CA 签名,将 CA 证书与签名证书导入密钥库;为客户端创建信任库并导入 CA 证书。
- 2 配置 server.properties(示例)
listeners=SSL://:9093
advertised.listeners=SSL://your.host:9093
security.inter.broker.protocol=SSL
ssl.keystore.location=/path/server.keystore.jks
ssl.keystore.password=****
ssl.key.password=****
ssl.truststore.location=/path/server.truststore.jks
ssl.truststore.password=****
如暂不便配置主机名校验,可关闭(测试环境)
ssl.endpoint.identification.algorithm=
- 3 客户端连接配置(ssl.properties)
security.protocol=SSL
ssl.truststore.location=/path/client.truststore.jks
ssl.truststore.password=****
双向认证时增加:
ssl.keystore.location=/path/client.keystore.jks
ssl.keystore.password=****
- 4 重启 Broker 并验证
使用脚本测试:
kafka-console-producer.sh --bootstrap-server your.host:9093 --topic test --producer.config ssl.properties
kafka-console-consumer.sh --bootstrap-server your.host:9093 --topic test --from-beginning --consumer.config ssl.properties
三 方案二 SASL 身份认证配置步骤
- 1 选择机制并准备 JAAS
- 示例(SCRAM-SHA-256):创建 kafka_server_jaas.conf
KafkaServer {
org.apache.kafka.common.security.scram.ScramLoginModule required
username=“admin” password=“admin-secret”
user_admin=“admin-secret”
user_producer=“producer-secret”
user_consumer=“consumer-secret”;
};
- 2 配置 server.properties
listeners=SASL_PLAINTEXT://:9092
security.inter.broker.protocol=SASL_PLAINTEXT
sasl.enabled.mechanisms=SCRAM-SHA-256
sasl.mechanism.inter.broker.protocol=SCRAM-SHA-256
方式A:全局 JAAS
export KAFKA_OPTS=“-Djava.security.auth.login.config=/path/kafka_server_jaas.conf”
方式B:按监听器配置(推荐)
listener.name.sasl_plaintext.scram-sha-256.sasl.jaas.config=file:/path/kafka_server_jaas.conf
- 3 创建 SCRAM 用户(ZooKeeper 模式)
bin/kafka-configs.sh --zookeeper localhost:2181 --alter --add-config \
‘SCRAM-SHA-256=[password=producer-secret]’ --entity-type users --entity-name producer
bin/kafka-configs.sh --zookeeper localhost:2181 --alter --add-config \
‘SCRAM-SHA-256=[password=consumer-secret]’ --entity-type users --entity-name consumer
- 4 客户端示例(命令行)
kafka-console-producer.sh --bootstrap-server localhost:9092 --topic test \
–producer-property security.protocol=SASL_PLAINTEXT \
–producer-property sasl.mechanism=SCRAM-SHA-256 \
–producer-property sasl.jaas.config=‘org.apache.kafka.common.security.scram.ScramLoginModule required username=“producer” password=“producer-secret”;’
- 5 说明
- SASL/PLAIN 配置更简但口令以明文传输(仅配 SASL 不加密),生产应与 SSL/TLS 组合为 SASL_SSL。
- 如需 Kerberos,选择 GSSAPI 并完成 KDC/主体/keytab 配置。
四 方案三 SSL 双向认证 mTLS 配置要点
- 1 证书准备
- 为每个 Broker 生成密钥库(含 SAN:DNS/IP),用企业 CA 签名;为客户端生成密钥库并由同一 CA 签名。
- 2 服务端配置
listeners=SSL://:9093
security.inter.broker.protocol=SSL
ssl.keystore.location=/path/server.keystore.jks
ssl.keystore.password=****
ssl.key.password=****
ssl.truststore.location=/path/server.truststore.jks
ssl.truststore.password=****
建议开启主机名校验
ssl.endpoint.identification.algorithm=HTTPS
- 3 客户端配置
security.protocol=SSL
ssl.truststore.location=/path/client.truststore.jks
ssl.truststore.password=****
ssl.keystore.location=/path/client.keystore.jks
ssl.keystore.password=****
- 4 重要提示
- 开启/关闭 双向认证 通常需要重启实例;证书需包含正确的 SAN 以通过主机名校验。
五 验证与常见问题
- 验证步骤
- 使用脚本指定配置文件连接(–command-config 或 --producer/consumer.config),能正常 list/create topic、生产/消费 即表示加密与认证生效。
- 常见问题与要点
- 主机名验证:Kafka 默认启用 ssl.endpoint.identification.algorithm=HTTPS,自签或测试环境可临时设为空;上线应配置证书 SAN 并开启校验。
- 监听器与接入点:确保 listeners/advertised.listeners 与客户端使用的协议、端口一致(如 SSL:// 或 SASL_SSL://)。
- 机制与端口:SASL 机制需在 sasl.enabled.mechanisms 与 sasl.mechanism.inter.broker.protocol 同时声明;Broker 间通信协议要与监听器匹配。
- 云上环境:部分托管 Kafka 需下载平台提供的 truststore/keystore 或开启 SASL_SSL,并按控制台指引配置接入点与证书。