kafka学习笔记4-TLS加密 —— 筑梦之路

1. 准备证书文件

bash 复制代码
mkdir /opt/kafka/pki

cd !$

# 生成CA证书
openssl req -x509 -nodes -days 3650 -newkey rsa:4096 -keyout ca.key -out ca.crt -subj "/CN=Kafka-CA"

# 生成私钥
openssl genrsa -out kafka.key 4096

# 生成证书签名请求 (CSR)
openssl req -new -key kafka.key -out kafka.csr -subj "/CN=kafka-cluster"

# 创建包含所有节点的SAN 配置文件
cat > san.cnf << EOF
[ req ]
distinguished_name = req_distinguished_name
req_extensions = req_ext
prompt = no

[ req_distinguished_name ]
CN = kafka-cluster

[ req_ext ]
keyUsage = critical, digitalSignature, keyEncipherment
extendedKeyUsage = serverAuth, clientAuth
subjectAltName = @alt_names

[ alt_names ]
# 节点主机名与ip
DNS.1 = kafka-1
DNS.2 = kafka-2
DNS.3 = kafka-3
IP.1 = 192.168.100.131
IP.2 = 192.168.100.132
IP.3 = 192.168.100.133
EOF

# 签署证书
openssl x509 -req -in kafka.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out kafka.crt \
-days 3650 -extfile san.cnf -extensions req_ext

# 检查验证证书
openssl x509 -in kafka.crt -text -noout | grep -A 1 "Subject Alternative Name"

ls -l

total 28
-rw-r--r-- 1 root root 1805 Jan 15 15:54 ca.crt
-rw------- 1 root root 3272 Jan 15 15:54 ca.key
-rw-r--r-- 1 root root   41 Jan 15 15:54 ca.srl
-rw-r--r-- 1 root root 1777 Jan 15 15:54 kafka.crt
-rw-r--r-- 1 root root 1590 Jan 15 15:49 kafka.csr
-rw------- 1 root root 3247 Jan 15 15:49 kafka.key
-rw-r--r-- 1 root root  259 Jan 15 15:51 san.cnf

2. 创建 Keystore

bash 复制代码
# 将证书和私钥转换为PKCS12文件

openssl pkcs12 -export -in kafka.crt -inkey kafka.key -out kafka.p12 -name kafka-cert -CAfile ca.crt -caname root -passout pass:123.com

# 使用 keytool 将 kafka.p12 文件导入到 Keystore

keytool -importkeystore \
  -deststorepass 123.com \
  -destkeypass 123.com\
  -destkeystore kafka.keystore.jks \
  -srckeystore kafka.p12 \
  -srcstoretype PKCS12 \
  -srcstorepass 123.com \
  -alias kafka-cert

3. 创建 Truststore

bash 复制代码
# 使用keytool创建Truststore并导入CA证书

keytool -import \
  -file ca.crt \
  -keystore kafka.truststore.jks \
  -storepass 123.com \
  -alias root

4. 分发文件

将kafka.truststore.jks 和kafka.keystore.jks 文件分发到其他 kafka 节点

bash 复制代码
scp kafka.truststore.jks 192.168.100.132:/opt/kafka/pki/

scp kafka.keystore.jks  192.168.100.132:/opt/kafka/pki/

scp kafka.truststore.jks 192.168.100.133:/opt/kafka/pki/

scp kafka.keystore.jks  192.168.100.133:/opt/kafka/pki/

5. Kafka服务端配置 TLS

bash 复制代码
# 在Kafka KRaft模式下的server.properties文件中,添加以下配置

vim /opt/kafka/config/kraft/server.properties

# 修改SSL配置
listeners=SSL://:9092,CONTROLLER://:9093
inter.broker.listener.name=SSL
advertised.listeners=SSL://192.168.100.131:9092,CONTROLLER://192.168.100.131:9093

# 新增Keystore配置
ssl.keystore.location=/opt/kafka/pki/kafka.keystore.jks
ssl.keystore.password=123.com
ssl.key.password=123.com
# 新增Truststore配置
ssl.truststore.location=/opt/kafka/pki/kafka.truststore.jks
ssl.truststore.password=123.com
# 客户端连接时启用ssl
ssl.client.auth=required

# 重启
systemctl restart kafka

6. 客户端配置 TLS

bash 复制代码
# 创建客户端配置文件,指定证书信息admin.properties文件内容如下

cat > /opt/kafka/config/admin.properties << EOF
security.protocol=SSL
ssl.keystore.location=/opt/kafka/pki/kafka.keystore.jks
ssl.keystore.password=123.com
ssl.truststore.location=/opt/kafka/pki/kafka.truststore.jks
ssl.truststore.password=123.com
ssl.endpoint.identification.algorithm=
ssl.key.password=123.com
EOF

# 连接测试

## 查看节点信息

bin/kafka-broker-api-versions.sh --bootstrap-server 192.168.100.131:9092 --command-config /opt/kafka/config/admin.properties 

## 查看topic信息

bin/kafka-topics.sh --describe --bootstrap-server 192.168.100.131:9092 --command-config /opt/kafka/config/admin.properties

# 生产者生产消息

bin/kafka-console-producer.sh --bootstrap-server 192.168.100.131:9092 --topic test --producer.config /opt/kafka/config/admin.properties
>hello boy

# 消费者消费消息

bin/kafka-console-consumer.sh --bootstrap-server 192.168.10.31:9092 --topic test --from-beginning --consumer.config /opt/kafka/config/admin.properties

hello boy

7. kafka-ui 配置 TLS

bash 复制代码
# 修改kafka-ui配置文件

cat > config.yml << EOF
kafka:
  clusters:
    -
      name: kafka-cluster
      bootstrapServers: 192.168.100.131:9092,192.168.100.132:9092,192.168.100.133:9092
      metrics:
        port: 9997
        type: JMX
      properties:
        security:
          protocol: SSL
        ssl:
          keystore:
            location: /opt/kafka/pki/kafka.keystore.jks
            password: 123.com
        ssl_endpoint_identification_algorithm: ''
      ssl:
        truststorelocation: /opt/kafka/pki/kafka.truststore.jks
        truststorepassword: 123.com
EOF

# 重启

systemctl restart kafka-ui
相关推荐
STLearner12 分钟前
WSDM 2026 | 时间序列(Time Series)论文总结【预测,表示学习,因果】
大数据·论文阅读·人工智能·深度学习·学习·机器学习·数据挖掘
redaijufeng21 分钟前
网络爬虫学习:应用selenium获取Edge浏览器版本号,自动下载对应版本msedgedriver,确保Edge浏览器顺利打开。
爬虫·学习·selenium
九成宫30 分钟前
IT项目管理期末复习——Chapter 10 项目沟通管理
笔记·项目管理·软件工程
腾科IT教育32 分钟前
零基础快速上岸HCIP,高效学习思路分享
学习·华为认证·hcip·hcip考试·hcip认证
234710212733 分钟前
4.14 学习笔记
笔记·python·学习
醇氧35 分钟前
【学习】软件过程模型全解析:从瀑布到敏捷的演进之路
学习·log4j
邪修king1 小时前
UE5 零基础入门第三弹: 碰撞与触发交互,解锁场景机关与蓝图封装(高娱乐性学习)
学习·ue5·交互
sonnet-10292 小时前
函数式接口和方法引用
java·开发语言·笔记
skylijf2 小时前
2026 高项第 6 章 预测考点 + 练习题(共 12 题,做完稳拿分)
笔记·程序人生·其他·职场和发展·软件工程·团队开发·产品经理
今天你TLE了吗2 小时前
LLM到Agent&RAG——AI概念概述 第二章:提示词
人工智能·笔记·后端·学习