【Kafka】手把手SASL,SSL教学

这篇具有很好参考价值的文章主要介绍了【Kafka】手把手SASL,SSL教学。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Kafka配置SASL

1.确定使用的SASL协议

Kafka支持以下SASL机制:GSSAPI 、PLAIN、 SCRAM-SHA-256、 SCRAM-SHA-512、 OAUTHBEARER。

本指南主要以SCRAM机制配置为主。

2.准备用户凭证

当使用SCRAM机制时,Kafka使用Zookeeper存储用户加密后的凭证,所以需要先使用Kafka提供的脚本进行用户的创建。

比如创建用户名为kafkaAdmin,密码为admin用户的操作命令如下:

> bin/Kafka-configs.sh --zookeeper localhost:2182 --alter --add-config 'SCRAM-SHA-256=[password=admin],SCRAM-SHA-512=[password=admin]' --entity-type users --entity-name KafkaAdmin

3.设置JAAS安全验证文件

Kafka使用Java的JAAS机制进行安全验证文件的加载,首先创建文件命名为broker_jaas.config,内容如下:

KafkaServer {
	org.apache.kafka.common.security.scram.ScramLoginModule required 
	username="KafkaAdmin" 
	password="admin";
};

然后编辑/bin/kafka-server-start.sh文件,使用Java的-Djava.security.auth.login.config参数指定JAAS文件位置。

[kafka@CTSP1 bin]$ cat kafka-server-start.sh 
#!/bin/bash
export JMX_PORT=9876
export KAFKA_JMX_OPTS="-Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.authenticate=false  -Dcom.sun.management.jmxremote.ssl=false -Djava.rmi.server.hostname=10.10.92.17"

#指定JAAS文件
export KAFKA_OPTS="-Djava.security.auth.login.config=/home/kafka/config/broker_jaas.config"
if [ $# -lt 1 ];
then
	echo "USAGE: $0 [-daemon] server.properties [--override property=value]*"
	exit 1
fi
base_dir=$(dirname $0)


if [ "x$KAFKA_LOG4J_OPTS" = "x" ]; then
    export KAFKA_LOG4J_OPTS="-Dlog4j.configuration=file:$base_dir/../config/log4j.properties"
fi

if [ "x$KAFKA_HEAP_OPTS" = "x" ]; then
    export KAFKA_HEAP_OPTS="-Xmx1G -Xms1G "
fi

EXTRA_ARGS=${EXTRA_ARGS-'-name kafkaServer -loggc'}

COMMAND=$1
case $COMMAND in
  -daemon)
    EXTRA_ARGS="-daemon "$EXTRA_ARGS
    shift
    ;;
  *)
    ;;
esac

exec $base_dir/kafka-run-class.sh $EXTRA_ARGS kafka.Kafka "$@"

4.配置server.properties文件

修改/config/server.properties文件,启用安全认证协议。修改项如下:

#指定客户端连接使用的协议以及地址,端口
listeners=SASL_PLAINTEXT://127.0.0.1:9092

#指定服务器之间使用的安全连接协议,可选的协议有PLAINTEXT, SSL, SASL_PLAINTEXT, SASL_SSL。
security.inter.broker.protocol=SASL_PLAINTEXT

#指定启用的SASL认证机制,可选项有PLAIN,GSSAPI,SCRAM。
sasl.enabled.mechanisms=SCRAM-SHA-256

#指定集群内部的认证机制
sasl.mechanism.inter.broker.protocol=SCRAM-SHA-256

5.配置Kafka客户端

客户端可以通过指定JAAS文件的方式使用或者在客户端创建的Producer或者Consumer的属性中添加对应的键值对使用。

配置客户端JAAS格式文件如下:

security.protocol=SASL_PLAINTEXT
sasl.mechanism=SCRAM-SHA-256
sasl.jaas.config=org.apache.kafka.common.security.scram.ScramLoginModule required username="kafkaAdmin" password="admin";

在bin目录中的脚本文件,可以通过–command-config参数指定JAAS文件,或者是生产者脚本的–producer.config或者消费者脚本的–consumer.config参数指定JAAS文件进行验证。

Kafka配置SSL

1.为每个Broker生成 SSL 密钥和证书

为集群的每一个broker生成对应节点的密钥对,执行命令后会要求设置密码,这个密码需要记下来已备后面使用。

以下命令为生成一个10年的有效期的密钥对,密码为123456 :

keytool -keystore server.keystore.jks -alias localhost -validity 3650 -genkey -keyalg RSA -storetype pkcs12

注意点:Kafka默认启用了SSL的主机名验证功能,可以设置配置文件参数ssl.endpoint.identification.algorithm为空方便测试。启用验证的时候,制作密钥对需要添加SAN信息,握手过程中会对当前连接的域名和地址进行校验,如果不是预期的域名和IP则握手失败。

keytool -keystore server.keystore.jks -alias localhost -validity 3650 -genkey -keyalg RSA -storetype pkcs12 -ext SAN=DNS:{填写域名},IP:{填写ip地址}

2.生成CA证书

CA证书用于给不同的通信端提供权威授权的认证,当某个节点接收到SSL请求时,先验证是否证书是否为CA签名,如果CA签名则信任该请求。一般公司内部,可以设置一台机器作为CA认证服务中心。

由于OpenSSL的bug,x509 模块不会将请求的扩展字段从 CSR 复制到最终证书中。所以制作ca需要依靠指定config的方式。

ca.cnf文件内容如下:

HOME            = .
RANDFILE        = $ENV::HOME/.rnd

####################################################################
[ ca ]
default_ca    = CA_default      # The default ca section

[ CA_default ]

base_dir      = .
certificate   = $base_dir/ca-cert   # The CA certifcate
private_key   = $base_dir/cakey.pem    # The CA private key
new_certs_dir = $base_dir              # Location for new certs after signing
database      = $base_dir/index.txt    # Database index file
serial        = $base_dir/serial.txt   # The current serial number

default_days     = 1000         # How long to certify for
default_crl_days = 30           # How long before next CRL
default_md       = sha256       # Use public key default MD
preserve         = no           # Keep passed DN ordering

x509_extensions = ca_extensions # The extensions to add to the cert

email_in_dn     = no            # Don't concat the email in the DN
copy_extensions = copy          # Required to copy SANs from CSR to cert

####################################################################
[ req ]
default_bits       = 4096
default_keyfile    = cakey.pem
distinguished_name = ca_distinguished_name
x509_extensions    = ca_extensions
string_mask        = utf8only

####################################################################
[ ca_distinguished_name ]
countryName         = Country Name (2 letter code)
countryName_default = DE

stateOrProvinceName         = State or Province Name (full name)
stateOrProvinceName_default = Test Province

localityName                = Locality Name (eg, city)
localityName_default        = Test Town

organizationName            = Organization Name (eg, company)
organizationName_default    = Test Company

organizationalUnitName         = Organizational Unit (eg, division)
organizationalUnitName_default = Test Unit

commonName         = Common Name (e.g. server FQDN or YOUR name)
commonName_default = Test Name

emailAddress         = Email Address
emailAddress_default = test@test.com

####################################################################
[ ca_extensions ]

subjectKeyIdentifier   = hash
authorityKeyIdentifier = keyid:always, issuer
basicConstraints       = critical, CA:true
keyUsage               = keyCertSign, cRLSign

####################################################################
[ signing_policy ]
countryName            = optional
stateOrProvinceName    = optional
localityName           = optional
organizationName       = optional
organizationalUnitName = optional
commonName             = supplied
emailAddress           = optional

####################################################################
[ signing_req ]
subjectKeyIdentifier   = hash
authorityKeyIdentifier = keyid,issuer
basicConstraints       = CA:FALSE
keyUsage               = digitalSignature, keyEncipherment

然后创建数据库和序列号文件,这些文件将用于跟踪使用该 CA 签署的证书。这两个文件都是简单的文本文件,与您的 CA 密钥位于同一目录中。

echo 01 > serial.txt
touch index.txt
#需要主机认证的时候
openssl req -x509 -config ca.cnf -newkey rsa:4096 -sha256 -nodes -out ca-cert -outform PEM
#不需要主机认证
openssl req -new -x509 -keyout ca-key -out ca-cert -days 3650

3.创建信任库

将生成的CA添加到服务端和客户端的信任库,以便服务端和客户端可以信任这个CA:

keytool -keystore server.truststore.jks -alias CARoot -import -file ca-cert
keytool -keystore client.truststore.jks -alias CARoot -import -file ca-cert

4.签名证书

用步骤2生成的CA签名步骤1生成的证书。首先需要导出请求文件。

keytool -keystore server.keystore.jks -alias localhost -certreq -file cert-file

cert-file: 服务器的未签名证书

然后用CA进行签名认证。

#不需要主机认证的时候
openssl x509 -req -CA ca-cert -CAkey ca-key -in cert-file -out cert-signed -days 3650 -CAcreateserial -passin pass:123456
#需要主机验证的时候
openssl ca -config ca.cnf -policy signing_policy -extensions signing_req -out cert-signed -infiles cert-file

最后,你需要导入CA的证书和已签名的证书到密钥仓库:

keytool -keystore server.keystore.jks -alias CARoot -import -file ca-cert
keytool -keystore server.keystore.jks -alias localhost -import -file cert-signed

备注:如果服务端对客户端的连接有认证需求,可以使用相同的步骤生成客户端的keystore文件,然后使用CA证书进行认证。

5.服务端配置

如果需要启用SSL,生成对应的证书文件后,server.properties如下配置:

#如果broker之间不需要启用SSL,则同时需要配置SSL和PLAINTEXT
listeners=PLAINTEXT://host.name:port,SSL://host.name:port

#如果broker之间也使用SSL,则需要设置
#security.inter.broker.protocol=SSL
#listeners=SSL://host.name:port

ssl.keystore.location=/var/private/ssl/server.keystore.jks
ssl.keystore.password=123456
ssl.key.password=123456
ssl.truststore.location=/var/private/ssl/server.truststore.jks
ssl.truststore.password=123456
#关闭主机名验证时设置以下参数
ssl.endpoint.identification.algorithm=

6.客户端配置文件

但从 Kafka 2.0.0 开始,默认为客户端连接以及代理间连接启用服务器主机名验证,可以通过设置ssl.endpoint.identification.algorithm为空字符串来关闭主机名验证。文章来源地址https://www.toymoban.com/news/detail-797768.html

security.protocol=SSL
ssl.truststore.location=/var/private/ssl/client.truststore.jks
ssl.truststore.password=123456
#关闭主机名验证时设置以下参数
ssl.endpoint.identification.algorithm=

7.测试方法

kafka-console-producer.sh --bootstrap-server localhost:9095 --topic test --producer.config client-ssl.properties
kafka-console-consumer.sh --bootstrap-server localhost:9095 --topic test --consumer.config client-ssl.properties

到了这里,关于【Kafka】手把手SASL,SSL教学的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【手把手教你搭建MQTT服务器 + 域名备案 + 申请与部署SSL证书】

    购买云服务器 可以按照自己情况买,新用户有优惠的,然后有些平台完成学生认证也是有优惠的 本人选购的是轻量应用服务器2核2G4M的,装的Ubuntu 20.04LTS,Linux系统 重置终端密码,配置防火墙,开启SSH远程登录 腾讯云默认用户名为Ubuntu,首次购买后需要重置密码才可通过用

    2024年01月17日
    浏览(63)
  • [Kafka集群] 配置支持Brokers内部SSL认证\外部客户端支持SASL_SSL认证并集成spring-cloud-starter-bus-kafka

    目录 Kafka 集群配置 准备 配置流程 Jaas(Java Authentication and Authorization Service )文件 zookeeper 配置文件 SSL自签名 启动zookeeper集群 启动kafka集群  spring-cloud-starter-bus-kafka 集成 下载统一版本Kafka服务包至三台不同的服务器上 文章使用版本为  kafka_2.13-3.5.0.tgz 下载地址 jdk版本 为 Ado

    2024年02月04日
    浏览(55)
  • 手把手教你 在linux上安装kafka

    目录 1. 准备服务器 2. 选一台服务器配置kafka安装包 2.1 下载安装包 2.2 解压安装包 2.3 修改配置文件 3. 分发安装包到其他机器 4. 修改每台机器的broker.id 5. 配置环境变量 6. 启停kafka服务 6.1 启动kafak服务 6.2 停止kafka服务                  1.买几台云服务器 或者 自

    2023年04月19日
    浏览(68)
  • 上手第一关,手把手教你安装kafka与可视化工具kafka-eagle

    终于又开新专栏啦(其实是填坑),相信很多同学对kafka都有一定的了解了,我们以前在RabbitMQ的选型中,也提到过两者的对比,那么今天我们就正式开始Kafka的学习吧,老规矩,先来一篇手把手安装教程,因为后续主要是用于自身学习,所以还是以windows的安装为例 📕作者简

    2024年02月08日
    浏览(43)
  • 【Docker】手把手教你使用Docker搭建kafka【详细教程】

    目录 前提条件 1.安装Zookeeper 1.1运行ZooKeeper容器 2.运行Kafka容器 2.1启动Kafka容器 3.验证 3.1进入Kafka容器 3.2查看容器状态 3.3查看容器日志 3.4重新启动容器 3.5创建测试主题 1. 安装Docker: 确保你已经在你的Windows机器上安装了Docker。你可以从Docker官方网站下载并安装Docker Desktop。

    2024年02月04日
    浏览(63)
  • 手把手教学RRT*(RRTSTAR)三维算法MATLAB仿真(代码可直接运行,视频手把手教学)

            在我以前的作品里有关于RRT算法的视频和代码,今天主要讲解一下RRT*算法的原理。RRT*算法主要是在RRT算法的基础上加上了重写父节点和随机重连的两个步骤。具体的实现方式我想以视频的方式向大家讲解,个人感觉讲解的十分详细。视频连接在这里,希望大家看

    2024年04月17日
    浏览(50)
  • tps5430手把手教学

    TPS5430手把手教学 目录 一、buck电路原理 二、tps5430芯片介绍 1.1芯片引脚图 1.2芯片引脚说明 三、tps5430参考电路讲解以及PCB布局 1.正压降压(15V转12V) 1.1原理图 1.2器件选择 1.3PCB布局 2.正压降负压 2.1原理图 2.2PCB布局 2.3注意事项 BUCK电路原理: BUCK电路,又称降压式变换电路,

    2023年04月20日
    浏览(56)
  • ChatGPT推广指南,手把手教学

    网站登录流程我就不给大家赘述了,直接进入主题,全程干货仔细看 1.个人中心。点击右上角——“头像”——点击“个人中心” 2.推广链接。点击左侧菜单栏——“推广链接”,三条默认推广链接就是您的推广链接,将您的专属推广链接分享给需要的人即可。 3.好友列表。

    2023年04月12日
    浏览(40)
  • Git入门指南(手把手教学)

    Git是一种分布式版本控制系统,它是由Linus Torvalds为了管理Linux内核开发而开发的。与中心化的版本控制系统(如SVN)不同,Git是一种分布式系统,它将代码库(repository)复制到多个开发者的本地计算机上,每个开发者都有自己的代码库,可以在本地提交代码、管理分支、合

    2023年04月14日
    浏览(52)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包