温馨提示×

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.mechanismssasl.mechanism.inter.broker.protocol 同时声明;Broker 间通信协议要与监听器匹配。
    • 云上环境:部分托管 Kafka 需下载平台提供的 truststore/keystore 或开启 SASL_SSL,并按控制台指引配置接入点与证书。

0