目录

Kafka配置SSL认证

使用kafka自带的消费者生产者测试一下


我是一只小小小小鸟~嗷!嗷!


Kafka配置SSL认证

准备工作:生成SSL相关证书

注:详见。

注:其实对于本节内容来说,有SSL的服务端证书就够了。

第一步:修改kafka安装目录下config目录下的server.properties文件

############################# Server Basics #############################
# SSL认证配置
# 如果配置了SSL认证,那么原来的port和advertised.listeners可以注释掉了
listeners=SSL://kafka-single:9095
advertised.listeners=SSL://kafka-single:9095
ssl.keystore.location=/usr/ca/server/server.keystore.jks
ssl.keystore.password=ds1994
ssl.key.password=ds1994
ssl.truststore.location=/usr/ca/trust/server.truststore.jks
ssl.truststore.password=ds1994
ssl.client.auth=required
ssl.enabled.protocols=TLSv1.2,TLSv1.1,TLSv1
ssl.keystore.type=JKS 
ssl.truststore.type=JKS 
# kafka2.0.x开始,将ssl.endpoint.identification.algorithm设置为了HTTPS,即:需要验证主机名
# 如果不需要验证主机名,那么可以这么设置 ssl.endpoint.identification.algorithm=即可
ssl.endpoint.identification.algorithm=HTTPS
# 设置内部访问也用SSL,默认值为security.inter.broker.protocol=PLAINTEXT
security.inter.broker.protocol=SSL
broker.id=0
############################# Socket Server Settings #############################
num.network.threads=3
num.io.threads=8
socket.send.buffer.bytes=102400
socket.receive.buffer.bytes=102400
socket.request.max.bytes=104857600
############################# Log Basics #############################
log.dirs=/usr/data/kafka
num.partitions=1
num.recovery.threads.per.data.dir=1
############################# Internal Topic Settings  #############################
offsets.topic.replication.factor=1
transaction.state.log.replication.factor=1
transaction.state.log.min.isr=1
############################# Log Retention Policy #############################
log.retention.hours=168
log.segment.bytes=1073741824
log.retention.check.interval.ms=300000
############################# Zookeeper #############################
zookeeper.connect=localhost:2181
zookeeper.connection.timeout.ms=6000
############################# Group Coordinator Settings #############################
group.initial.rebalance.delay.ms=0

注:SSL配置最好写在配置文件的最上面,否者可能导致Kafka配置SSL失败。

注:如果设置的内部broker的通讯协议PLAINTEXT,那么监听PLAINTEXT的时候就需要作相应的配置
       listeners=PLAINTEXT://host.name:port,SSL://host.name:port。

第二步(可选):如果配置SSL之前,存在Kafka数据,那么建议重新换一个位置来
                        存放数据;如果确保之前的数据已经没什么用了,也可以直接删除
                        之前的数据

注:之所以是这个文件夹,是因为是我们在安装kafka的时候指定的数据目录,可
        详见。

第三步:重启kafka

# 后台启动zookeeper
/var/local/kafka/bin/zookeeper-server-start.sh /var/local/kafka/config/zookeeper.properties > /usr/data/zookeeper.log 2>&1 &
# 前台启动kafak
/var/local/kafka/bin/kafka-server-start.sh /var/local/kafka/config/server.properties

注:启动kafka时最好使用进程独占一个shell的方式前台启动,这样能非常直观的查看启动kafka是否成功。

第四步:使用Linux自带的openssl测试一下,验证我们配置的ssl有效

openssl s_client -debug -connect kafka-single:9095 -tls1

注:kafka-single为/etc/hosts文件中配置的host名。

弹出以下内容,说明成功了:

kafka 配置sasl身份认证 kafka开启认证_Kafka配置SSL认证

                          ……

kafka 配置sasl身份认证 kafka开启认证_Kafka配置SSL认证_02

                          ……

kafka 配置sasl身份认证 kafka开启认证_Kafka配置SSL认证_03

到此为止,就说明初步成功了!


使用kafka自带的消费者生产者测试一下

准备工作:先创建一个主题

# 创建主题
/var/local/kafka/bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 1 --topic topicOne
# 查看所有主题
/var/local/kafka/bin/kafka-topics.sh --list --zookeeper localhost:2181

执行效果如图:

kafka 配置sasl身份认证 kafka开启认证_kafka 配置sasl身份认证_04

消费者:

  • 首先创建一个SSL下的消费者配置文件c.properties,编辑其内容为:
security.protocol=SSL
group.id=test-group
ssl.truststore.location=/usr/ca/trust/server.truststore.jks
ssl.truststore.password=ds1994
ssl.keystore.password=ds1994
ssl.keystore.location=/usr/ca/server/server.keystore.jks
  • 启动消费者:
/var/local/kafka/bin/kafka-console-consumer.sh --bootstrap-server kafka-single:9095 --topic topicOne --from-beginning --consumer.config /var/local/kafka/config/c.properties

生产者:

首先创建一个SSL下的消费者配置文件p.properties,编辑其内容为:

bootstrap.servers=kafka-single:9095
security.protocol=SSL
ssl.truststore.location=/usr/ca/trust/server.truststore.jks
ssl.truststore.password=ds1994   
ssl.keystore.password=ds1994
ssl.keystore.location=/usr/ca/server/server.keystore.jks

启动生产者:

/var/local/kafka/bin/kafka-console-producer.sh --broker-list kafka-single:9095 --topic topicOne --producer.config /var/local/kafka/config/p.properties

结果观察:

在生产者里面发送消息:

kafka 配置sasl身份认证 kafka开启认证_Kafka的SSL认证配置_05

在消费者里面消费到了消息:

kafka 配置sasl身份认证 kafka开启认证_Kafka_06

由此可见完全成功了!

 

笔者JustryDeng