0


kafka SSL配置随笔

常用命令

sh /data/ddos/kafka/bin/kafka-server-start.sh /data/ddos/kafka/config/server.properties

jps -l

First-Fail

配置ssl证书脚本参考,脚本:ca.sh、官方文档

安装步骤:深入理解Kafka:核心设计与实践原理 (朱忠华) (Z-Library).pdf

JAAS

Kafka入门与实践%202017%20(牟大恩):Kafka 安全机制

收发消息测试

是的,Kafka可以在单机模式下运行以进行消息的发送和接收。虽然Kafka设计用于构建分布式、高吞吐量、高可用性的消息系统,但它同样可以在单节点上运行,这对于开发、测试或小规模生产环境来说非常有用。

要在单机模式下运行Kafka,您需要按照以下简化的步骤操作:

  1. 下载并解压 Kafka:首先,您需要从 Apache Kafka的官方网站 下载 Kafka 并解压。
  2. 启动 ZooKeeper 实例:Kafka 使用 ZooKeeper 来管理集群状态和元数据。在单机模式下,您可以使用 Kafka 自带的 ZooKeeper。运行以下命令启动 ZooKeeper:bin/zookeeper-server-start.sh config/zookeeper.properties
  3. 启动 Kafka 服务器:接下来,启动 Kafka 服务器:bin/kafka-server-start.sh config/server.properties
  4. 创建一个主题:为了发送和接收消息,您需要创建至少一个主题。使用以下命令创建一个名为 test​​ 的主题:bin/kafka-topics.sh --create --partitions 1 --replication-factor 1 --topic test --bootstrap-server localhost:9092
  5. 发送消息:使用 Kafka 生产者工具发送消息到您刚创建的主题:bin/kafka-console-producer.sh --topic test --bootstrap-server localhost:9092
  6. 接收消息:使用 Kafka 消费者工具接收消息:bin/kafka-console-consumer.sh --topic test --from-beginning --bootstrap-server localhost:9092

通过以上步骤,即使是在单机模式下,您也可以实现 Kafka 的消息发送和接收功能。这种模式适合进行开发和测试。

server.properties问题

循环:握手失败

[2024-03-14 15:37:12,897] ERROR [Controller id=8, targetBrokerId=8] Connection to node 8 (zabbix/192.168.19.54:9092) failed authentication due to: SSL handshake failed (org.apache.kafka.clients.NetworkClient)

原因:集群环境的client证书存储库需要载入所有节点的客户端证书

解决方案:服务端证书逐个节点生成,客户端证书需要不断合并。

🥳参考:Kafka并不难学

wiki概述

使用 SSL 协议进行加密和身份验证

Kafka默认禁止SSL 协议作为认证机制,可以手动开启。
安装和配置 SSL 协议的步骤较多,大致步骤如下:
(1)给每台代理节点创建一个临时密钥库;
(2)创建私有证书 CA;
(3)给证书进行签名,其内容包含导出证书和签名、导入 CA 和证书到密钥库;
(4)配置服务端和客户端。 详细实现流程如图所示

SSL基础入门

名次解释

PKI:Public Key Infrastructure 公共密钥加密体系
签证机构:CA(Certificate Authority)
注册机构:RA
证书吊销列表:CRL
证书存取库: X.509:定义了证书的结构以及认证协议标准

  • 版本号 序列号 签名 算法 颁发者 有效期限 主体名称

证书类型:

  • 证书授权机构的证书
  • 服务器证书
  • 用户证书

获取证书两种方法:

  1. 自签名的证书: 自已签发自己的公钥
  2. 使用证书授权机构:
  • 生成证书请求(csr)
  • 将证书请求csr发送给CA
  • CA签名颁发证书

HTTPS 协议

就是“HTTP 协议”和“SSL/TLS 协议”的组合。

HTTP over SSL 或 HTTP over TLS ,对http协议的文本数据进行加密处理后,成为二进制形式传输

  1. 客户端发起HTTPS请求用户在浏览器里输入一个https网址,然后连接到服务器的443端口
  2. 服务端的配置采用HTTPS协议的服务器必须要有一套数字证书,可以自己制作,也可以向组织申请。区别就是自 己颁发的证书需要客户端验证通过,才可以继续访问,而使用受信任的公司申请的证书则不会弹出 提示页面。这套证书其实就是一对公钥和私钥
  3. 传送服务器的证书给客户端证书里其实就是公钥,并且还包含了很多信息,如证书的颁发机构,过期时间等等
  4. 客户端解析验证服务器证书这部分工作是由客户端的TLS来完成的,首先会验证公钥是否有效,比如:颁发机构,过期时间等 等,如果发现异常,则会弹出一个警告框,提示证书存在问题。如果证书没有问题,那么就生成一 个随机值。然后用证书中公钥对该随机值进行非对称加密
    1. 客户端将加密信息传送服务器这部分传送的是用证书加密后的随机值,目的就是让服务端得到这个随机值,以后客户端和服务端 的通信就可以通过这个随机值来进行加密解密了
    1. 服务端解密信息服务端将客户端发送过来的加密信息用服务器私钥解密后,得到了客户端传过来的随机值
    1. 服务器加密信息并发送信息服务器将数据利用随机值进行对称加密,再发送给客户端
    1. 客户端接收并解密信息客户端用之前生成的随机值解密服务段传过来的数据,于是获取了解密后的内容

mg方案

生产证书脚本

#!/bin/bash
#
#********************************************************************
#Author:        wangxiaochun
#QQ:             29308620
#Date:             2020-02-29
#FileName:        test.sh
#URL:             http://www.magedu.com
#Description:        The test script
#Copyright (C):     2020 All rights reserved
#********************************************************************

#证书存放目录
DIR=/data/ddos/kafka/ca

#每个证书信息
declare -A CERT_INFO
CERT_INFO=([subject0]="/O=heaven/CN=ca.god.com" \
           [keyfile0]="cakey.pem" \
           [crtfile0]="cacert.pem" \
           [key0]=2048 \
           [expire0]=3650 \
           [serial0]=0    \
           [subject1]="/C=CN/ST=hubei/L=wuhan/O=Central.Hospital/CN=master.liwenliang.org" \
           [keyfile1]="master.key" \
           [crtfile1]="master.crt" \
           [key1]=2048 \
           [expire1]=365
           [serial1]=1 \
           [csrfile1]="master.csr" \
           [subject2]="/C=CN/ST=hubei/L=wuhan/O=Central.Hospital/CN=slave.liwenliang.org" \
           [keyfile2]="slave.key" \
           [crtfile2]="slave.crt" \
           [key2]=2048 \
           [expire2]=365 \
           [serial2]=2 \
           [csrfile2]="slave.csr"   )

COLOR="echo -e \\E[1;32m"
END="\\E[0m"

#证书编号最大值
N=`echo ${!CERT_INFO[*]} |grep -o subject|wc -l`

cd $DIR 

for((i=0;i<N;i++));do
    if [ $i -eq 0 ] ;then
        openssl req  -x509 -newkey rsa:${CERT_INFO[key${i}]} -subj ${CERT_INFO[subject${i}]} \
            -set_serial ${CERT_INFO[serial${i}]} -keyout ${CERT_INFO[keyfile${i}]} -nodes \
        -days ${CERT_INFO[expire${i}]}  -out ${CERT_INFO[crtfile${i}]} &>/dev/null
    
    else 
        openssl req -newkey rsa:${CERT_INFO[key${i}]} -nodes -subj ${CERT_INFO[subject${i}]} \
            -keyout ${CERT_INFO[keyfile${i}]}   -out ${CERT_INFO[csrfile${i}]} &>/dev/null

        openssl x509 -req -in ${CERT_INFO[csrfile${i}]}  -CA ${CERT_INFO[crtfile0]} \
        -CAkey ${CERT_INFO[keyfile0]}  -set_serial ${CERT_INFO[serial${i}]}  \
        -days ${CERT_INFO[expire${i}]} -out ${CERT_INFO[crtfile${i}]} &>/dev/null
    fi
    $COLOR"**************************************生成证书信息**************************************"$END
    openssl x509 -in ${CERT_INFO[crtfile${i}]} -noout -subject -dates -serial
    echo 
done
chmod 600 *.key
echo  "证书生成完成"
$COLOR"**************************************生成证书文件如下**************************************"$END
echo "证书存放目录: "$DIR
echo "证书文件列表: "`ls $DIR`

使用上述脚本生成证书之后,为了完成Kafka集群的SSL配置,还需要执行一些关键步骤。以下是配置Kafka集群以使用SSL加密通信所需的主要步骤概览:

1. 准备Keystore和Truststore

  • Keystore:包含服务器的私钥和公钥(证书)。对于Kafka而言,每个broker都需要有其自己的keystore。
  • Truststore:包含信任的证书列表。对于Kafka而言,broker和客户端需要有truststore来验证连接另一端的身份。

2. 配置Kafka Broker

  • 编辑server.properties​​文件:对于每个Kafka broker,你需要配置其server.properties​​文件以启用SSL并指定keystore和truststore的位置和密码。例如:listeners=SSL://your.broker.hostname:9093security.inter.broker.protocol=SSLssl.keystore.location=/path/to/kafka.server.keystore.jksssl.keystore.password=yourkeystorepasswordssl.key.password=yourkeypasswordssl.truststore.location=/path/to/kafka.server.truststore.jksssl.truststore.password=yourtruststorepassword
  • 重启Kafka服务:更改配置文件后,需要重启Kafka服务以使更改生效。

3. 配置Kafka客户端

  • 客户端配置:确保Kafka客户端(生产者和消费者)也配置了SSL。客户端需要指定truststore的路径和密码以验证服务器证书,如果需要双向认证,则还需要指定keystore的路径和密码。配置可能包括:ssl.truststore.location=/path/to/kafka.client.truststore.jksssl.truststore.password=yourtruststorepassword# 如果需要客户端认证ssl.keystore.location=/path/to/kafka.client.keystore.jksssl.keystore.password=yourkeystorepasswordssl.key.password=yourkeypassword
  • 应用程序代码:在你的Kafka生产者和消费者的应用程序代码中,确保使用了上述SSL配置。

4. 配置主题和ACL(可选)

  • 如果你的Kafka集群使用了主题和访问控制列表(ACL)进行权限管理,你可能还需要配置这些来适应SSL认证。

5. 测试

  • 验证配置:启动Kafka集群后,使用Kafka的命令行工具(如kafka-console-producer​​和kafka-console-consumer​​)来测试SSL连接。确保测试包括所有生产者和消费者的连接,以验证SSL配置正确且有效。

6. 监控和日志

  • 监控:密切监控Kafka集群和客户端的日志,特别是在初次配置SSL时,以确保没有安全或连接问题。
  • 日志:确保日志记录配置得当,以便在遇到问题时能够进行调试。

通过遵循这些步骤,在确保安全性的同时,您可以成功地在Kafka集群中实现SSL加密通信。需要注意的是,SSL/TLS配置可能会因具体环境而异,例如使用的Kafka版本、JVM版本和操作系统等,因此在实际操作中可能需要进行一些调整。

标签: kafka ssl 分布式

本文转载自: https://blog.csdn.net/qq_41574772/article/details/136751460
版权归原作者 qq_41574772 所有, 如有侵权,请联系我们删除。

“kafka SSL配置随笔”的评论:

还没有评论