Kafka配置SASL_SSL认证传输加密
Kafka配置SASL_SSL认证传输加密在大数据与消息队列领域Apache Kafka 凭借其高吞吐、低延迟、高可扩展性等特性成为实时数据流处理的核心组件。然而随着数据安全与合规性要求日益严格Kafka 需要同时满足传输加密SSL/TLS与身份认证SASL的需求。本文将循序渐进地讲解如何在 Kafka 中配置 SASL_SSL确保客户端与 Broker 之间的通信既加密又经过认证。## 一、基础概念### 1.1 为什么需要 SASL_SSL默认情况下Kafka 使用明文传输这意味着- 任何能监听网络的人都可以看到消息内容。- 任何人都可以冒充合法客户端连接 Broker。SASL_SSL 结合了两层安全-SSL/TLS为数据传输提供加密防止窃听与篡改。-SASLSimple Authentication and Security Layer提供身份认证机制如 PLAIN、SCRAM、GSSAPI 等。因此启用 SASL_SSL 后Kafka 集群变为“加密信道 认证入口”只有持有合法证书和凭证的客户端才能通信。### 1.2 核心组件-证书由 CA 签发用于 SSL 握手验证双方身份。-密钥库Keystore存储 Broker 或客户端的私钥与证书。-信任库Truststore存储受信任的 CA 证书。-JAAS 配置文件定义 SASL 认证的具体实现如用户名密码。## 二、环境准备### 2.1 准备证书我们使用 Java 自带的keytool生成自签名证书生产环境应使用 CA 签发。bash# 生成 Broker 的密钥库包含私钥与自签名证书keytool -genkey -alias kafka-broker -keyalg RSA -keystore broker.keystore.jks -dname CNlocalhost, OUdev, Oexample, LBeijing, SBeijing, CCN -storepass changeme -keypass changeme# 导出证书keytool -export -alias kafka-broker -keystore broker.keystore.jks -file broker.cer -storepass changeme# 创建客户端的信任库信任 Broker 的证书keytool -import -alias kafka-broker -keystore client.truststore.jks -file broker.cer -storepass changeme -noprompt这里我们只创建了 Broker 的证书客户端信任它。如果需要双向认证mTLS还需为客户生成证书但 SASL_SSL 通常只要求 SSL 单向认证认证由 SASL 层完成。### 2.2 配置 JAAS 文件SASL 使用 PLAIN 机制明文密码生产环境建议使用 SCRAM。创建kafka_server_jaas.confplaintextKafkaServer { org.apache.kafka.common.security.plain.PlainLoginModule required usernameadmin passwordadmin-secret user_adminadmin-secret user_alicealice-secret;};-username/passwordBroker 间通信的凭证。-user_xxx定义客户端用户的密码。## 三、Kafka Broker 配置编辑server.properties加入以下配置properties# 开启 SSLlistenersSASL_SSL://localhost:9093advertised.listenersSASL_SSL://localhost:9093# SSL 配置ssl.keystore.location/path/to/broker.keystore.jksssl.keystore.passwordchangemessl.key.passwordchangemessl.truststore.location/path/to/client.truststore.jksssl.truststore.passwordchangeme# SASL 配置sasl.enabled.mechanismsPLAINsasl.mechanism.inter.broker.protocolPLAINsecurity.inter.broker.protocolSASL_SSL# JAAS 文件listener.name.sasl_ssl.plain.sasl.jaas.configorg.apache.kafka.common.security.plain.PlainLoginModule required \ usernameadmin \ passwordadmin-secret \ user_adminadmin-secret \ user_alicealice-secret;注意listener.name.sasl_ssl.plain.sasl.jaas.config的格式与 JAAS 文件相同但直接写在配置中更方便。启动 Kafka Broker 时需指定 JAAS 文件如果使用文件方式bashexport KAFKA_OPTS-Djava.security.auth.login.config/path/to/kafka_server_jaas.confbin/kafka-server-start.sh config/server.properties## 四、Java 客户端代码示例### 4.1 生产者示例javaimport org.apache.kafka.clients.producer.*;import java.util.Properties;public class SecureProducer { public static void main(String[] args) { Properties props new Properties(); // 1. 必须指向 SASL_SSL 端口 props.put(bootstrap.servers, localhost:9093); // 2. SSL 配置信任 Broker 证书 props.put(ssl.truststore.location, /path/to/client.truststore.jks); props.put(ssl.truststore.password, changeme); // 3. SASL 配置 props.put(sasl.mechanism, PLAIN); props.put(security.protocol, SASL_SSL); // 4. JAAS 配置客户端凭证 props.put(sasl.jaas.config, org.apache.kafka.common.security.plain.PlainLoginModule required username\alice\ password\alice-secret\;); // 5. 序列化与主题 props.put(key.serializer, org.apache.kafka.common.serialization.StringSerializer); props.put(value.serializer, org.apache.kafka.common.serialization.StringSerializer); KafkaProducerString, String producer new KafkaProducer(props); // 发送消息 ProducerRecordString, String record new ProducerRecord(secure-topic, Hello SASL_SSL!); producer.send(record, (metadata, exception) - { if (exception null) { System.out.println(消息发送成功分区 metadata.partition() 偏移量 metadata.offset()); } else { exception.printStackTrace(); } }); producer.close(); }}### 4.2 消费者示例javaimport org.apache.kafka.clients.consumer.*;import java.time.Duration;import java.util.Collections;import java.util.Properties;public class SecureConsumer { public static void main(String[] args) { Properties props new Properties(); // 1. 连接 SASL_SSL Broker props.put(bootstrap.servers, localhost:9093); // 2. SSL 信任库 props.put(ssl.truststore.location, /path/to/client.truststore.jks); props.put(ssl.truststore.password, changeme); // 3. SASL 认证 props.put(sasl.mechanism, PLAIN); props.put(security.protocol, SASL_SSL); props.put(sasl.jaas.config, org.apache.kafka.common.security.plain.PlainLoginModule required username\alice\ password\alice-secret\;); // 4. 反序列化与消费者组 props.put(key.deserializer, org.apache.kafka.common.serialization.StringDeserializer); props.put(value.deserializer, org.apache.kafka.common.serialization.StringDeserializer); props.put(group.id, secure-group); props.put(auto.offset.reset, earliest); KafkaConsumerString, String consumer new KafkaConsumer(props); consumer.subscribe(Collections.singletonList(secure-topic)); try { while (true) { ConsumerRecordsString, String records consumer.poll(Duration.ofMillis(1000)); for (ConsumerRecordString, String record : records) { System.out.printf(收到消息key%s, value%s, 分区%d, 偏移量%d%n, record.key(), record.value(), record.partition(), record.offset()); } } } finally { consumer.close(); } }}## 五、高级用法SCRAM 认证PLAIN 机制将密码以明文传输不安全。建议使用SCRAMSalted Challenge Response Authentication Mechanism它通过哈希与盐值保护密码。### 5.1 配置 SCRAM首先在 Kafka 中创建 SCRAM 用户bashbin/kafka-configs.sh --zookeeper localhost:2181 \ --alter --add-config SCRAM-SHA-256[iterations8192,passwordalice-secret] \ --entity-type users --entity-name aliceBroker 配置改为propertiessasl.enabled.mechanismsSCRAM-SHA-256sasl.mechanism.inter.broker.protocolSCRAM-SHA-256listener.name.sasl_ssl.scram-sha-256.sasl.jaas.configorg.apache.kafka.common.security.scram.ScramLoginModule required;客户端 JAAS 对应改为javaprops.put(sasl.mechanism, SCRAM-SHA-256);props.put(sasl.jaas.config, org.apache.kafka.common.security.scram.ScramLoginModule required username\alice\ password\alice-secret\;);## 六、总结本文从基础概念出发逐步讲解了 Kafka SASL_SSL 配置的核心步骤1.生成证书为 Broker 创建密钥库将证书导入客户端信任库。2.配置 Broker修改server.properties同时启用 SSL 与 SASL。3.编写客户端Java 生产者、消费者需指定 SSL 信任库与 SASL 凭证。4.安全增强推荐使用 SCRAM 替代 PLAIN 机制防止密码泄露。SASL_SSL 是保护 Kafka 生产环境的基石它确保了数据在传输过程中的机密性、完整性并提供了强身份认证。在生产部署中还应当注意- 使用正式 CA 签发证书而非自签名。- 定期轮换证书与密码。- 结合网络隔离如防火墙规则形成纵深防御。通过本文的指导你应该能够自主搭建一个安全的 Kafka 集群并编写对应的加密认证客户端。

相关新闻

上下文压缩 — 设计规范

上下文压缩 — 设计规范

上下文压缩 — 设计规范 概述 为 opencode-goal 插件增加自动和手动的对话压缩功能。 压缩通过 opencode 服务端对对话历史进行摘要实现,在降低 Token 用量的同时保留关键上下文(目标状态、进度)。 已有的 compact_after_tokens 选项将被激活…

2026/7/28 0:29:53 阅读更多 →
使用Unidbg Debugger逆向分析魔改哈希算法:动态调试实战指南

使用Unidbg Debugger逆向分析魔改哈希算法:动态调试实战指南

1. 逆向分析中的“找不同”:为什么Unidbg Debugger是定位魔改哈希算法的利器逆向分析,尤其是针对移动端应用的加密算法分析,很多时候就像一场高难度的“找不同”游戏。你手头可能有一份标准的算法实现,比如SHA-256、MD5&#xff0…

2026/7/28 0:28:53 阅读更多 →
不用花冤枉钱!非会员下载百度网盘大文件的正确打开方式

不用花冤枉钱!非会员下载百度网盘大文件的正确打开方式

网络数据传输看似是一条平稳流动的河流,但在实际使用过程中,许多人都会遇到下载进度条波动不平、传输速率忽高忽低的情况。这种现象背后其实涵盖了从硬件设施、网络路由到服务器调度等多维度的技术细节。 https://www.pandown.orghttps://www.pandown.o…

2026/7/28 0:28:53 阅读更多 →

最新新闻

c++14 新增内容

c++14 新增内容

目录 一&#xff0c;二进制字面量 二&#xff0c;数字分隔符 三&#xff0c;放宽 constexpr 四&#xff0c;泛型 lambda 五&#xff0c;变量模板 一&#xff0c;二进制字面量 #include <iostream> int main() {int num 0b10101010;int result num & 0b000011…

2026/7/28 0:38:55 阅读更多 →
2026年上海NCM锂电池回收品牌大评测:哪家靠谱?

2026年上海NCM锂电池回收品牌大评测:哪家靠谱?

于新能源浪潮正席卷全球的今朝当下, 锂电池身为电动汽车以及储能设备的核心部件, 其回收利用方面的问题越发受到重视留意。特别是NCM&#xff08;镍钴锰酸锂&#xff09;锂电池, 因具备高能量密度以及长寿命故而广泛应用于各类高端产品之内。然而, 怎样去有效回收这些电池, 不但…

2026/7/28 0:38:55 阅读更多 →
江苏省民营科技企业申报流程是什么

江苏省民营科技企业申报流程是什么

一、核心资格自检&#xff08;申报前必读&#xff09;在进入系统前&#xff0c;请确认企业是否满足以下硬性指标&#xff08;以上一年度数据为准&#xff09;&#xff1a;1.成立年限&#xff1a;注册成立一年以上。2.科技人员&#xff1a;科技人员占职工总数10%以上。3.研发投入…

2026/7/28 0:37:55 阅读更多 →
北京新技术新产品认定条件及申报时间安排

北京新技术新产品认定条件及申报时间安排

北京市新技术新产品新服务&#xff08;简称“三新”&#xff09;认定&#xff0c;通常每年仅开放一次集中申报窗口。根据往年安排及最新政策动态&#xff0c;2026年度&#xff08;总第二十一批&#xff09;的申报工作已于年初结束。当前时间为2026年7月&#xff0c;您已错过本年…

2026/7/28 0:37:55 阅读更多 →
江苏省民营科技企业申报需要满足哪些条件

江苏省民营科技企业申报需要满足哪些条件

一、核心资格自检&#xff08;必须全部满足&#xff09;1.注册与年限在江苏省省内依法登记注册&#xff0c;具有独立法人资格。注册成立一年以上&#xff08;即申请备案时&#xff0c;成立时间需满1年&#xff09;。2.经营性质由公民、法人或其他组织自筹资金、自主经营、自负盈…

2026/7/28 0:37:55 阅读更多 →
【风电功率预测】【多变量输入单步预测】基于TCN-GRU-Attention的风电功率预测研究

【风电功率预测】【多变量输入单步预测】基于TCN-GRU-Attention的风电功率预测研究

✅作者简介&#xff1a;热爱科研的Matlab仿真开发者&#xff0c;擅长数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。 &#x1f34e; 往期回顾关注个人主页&#xff1a;Matlab科研工作室 &#x1f34a;个人信条&#xff1a;格物致知,完整Matlab代码及仿真咨…

2026/7/28 0:36:55 阅读更多 →

日新闻

告别臃肿!3步让你的暗影精灵笔记本重获新生

告别臃肿!3步让你的暗影精灵笔记本重获新生

告别臃肿&#xff01;3步让你的暗影精灵笔记本重获新生 【免费下载链接】OmenSuperHub Control Omen laptop performance, fan speeds, and keyboard lighting, and unlock power limits. 项目地址: https://gitcode.com/gh_mirrors/om/OmenSuperHub 你是否也曾为官方Om…

2026/7/28 0:00:43 阅读更多 →
RAG必踩坑!财报法规检索不准?这款开源工具让答案浮出水面,准确率飙升98.7%!

RAG必踩坑!财报法规检索不准?这款开源工具让答案浮出水面,准确率飙升98.7%!

做 RAG 的人应该都踩过这个致命的坑&#xff1a;把几百页的财报、法规、技术手册扔给向量库&#xff0c;问一个具体问题&#xff0c;搜出来的全是沾边但没用的内容 —— 关键信息要么被硬切块拆碎了&#xff0c;要么藏在几十条结果的最下面。语义相似≠真正相关&#xff0c;这个…

2026/7/28 0:00:43 阅读更多 →
抖音视频文案提取工具全指南:免费2026版、手机App、在线工具一网打尽

抖音视频文案提取工具全指南:免费2026版、手机App、在线工具一网打尽

2026年做短视频运营&#xff0c;从抖音上扒文案早就不是偷偷抄笔记的事了。我刚开始做内容的时候&#xff0c;每天刷半小时抖音&#xff0c;手动把爆款视频的口播敲进备忘录&#xff0c;一条2分钟的视频得花十来分钟&#xff0c;碰到语速快的还要反复回听。后来试了一圈工具&am…

2026/7/28 0:00:43 阅读更多 →

周新闻

深度学习道路桥梁裂缝检测系统 道路桥梁裂缝检测数据集 道路桥梁病害识别检测数据集

深度学习道路桥梁裂缝检测系统 道路桥梁裂缝检测数据集 道路桥梁病害识别检测数据集

深度学习道路桥梁裂缝检测系统 数据集6000张 完整源码已标注数据集训练好的模型环境配置教程程序运行说明文档&#xff0c;可以直接使用&#xff01;系统支持图片、视频、摄像头等多种方式检测裂缝&#xff0c;功能强大实用。 1数据集6000张 8各类别

2026/7/27 4:33:59 阅读更多 →
深度学习YOLO模型如何训练 PUBG 绝地求生目标检测数据集

深度学习YOLO模型如何训练 PUBG 绝地求生目标检测数据集

pubg数据集 精选原图1.42万数据 1.49万标签 无任何重复、算法增强或冗余图像&#xff01; pubg绝地求生目标检测数据集 1分类&#xff1a;e_body&#xff0c;14905个标签&#xff0c;txt格式 共计14244张图&#xff0c;99%为640*640尺寸图像 适合yolo目标检测、AI训练关键词&am…

2026/7/27 6:31:56 阅读更多 →
Apex英雄目标检测数据集 深度学习框架YOLO如何训练APEX数据集

Apex英雄目标检测数据集 深度学习框架YOLO如何训练APEX数据集

Apex检测数据集数据集详情检测类别&#xff1a; allies enemy tag图片总量&#xff1a;7247张训练集&#xff1a;5139张验证集&#xff1a;1425张测试集&#xff1a;683张标注状态&#xff1a;全部已标注&#xff0c;即拿即用数据格式&#xff1a;支持YOLO格式及其他格式&#…

2026/7/27 4:01:12 阅读更多 →

月新闻