kafka集群 配置SSL

之前根据[https://www.cnblogs.com/huxi2b/p/7427815.html]这篇文章来操作的,但是在我的环境下 第一步就出错了。 并且原文只介绍了一个kafka节点的情况,没有针对一个集群。 这里做了下修改,写了篇文章。

注:我的环境ip是172.17.0.x 需要改成你自己的ip

1.在某一台kafka节点的机器上 运行脚本(脚本文件在最后) 生成证书 会要求输入很多信息
密码定为kafkasslpwd 写在脚本文件里面的

2.关闭集群里的所有zookeeper kafka

3.把/usr/local/kafkaSSLfiles/certificates下 kafka.keystore 和 kafka.truststore拷贝到所有机器的相同目录

4.在每台机器上 修改kafka配置 增加一个9093端口 所有需要SSL协议的数据 都链接9093端口

    把listeners=PLAINTEXT://172.17.0.14:9092那行变为
listeners=PLAINTEXT://172.17.0.14:9092,SSL://172.17.0.14:9093

    在每台机器上,修改kafka配置  加上keystore  truststore 证书的地址,和密码  第一步的脚本里面生成的:

    ```
ssl.keystore.location=/usr/local/kafkaSSLfiles/certificates/kafka.keystore
ssl.keystore.password=kafkasslpwd
ssl.key.password=kafkasslpwd
ssl.truststore.location=/usr/local/kafkaSSLfiles/certificates/kafka.truststore
ssl.truststore.password=kafkasslpwd
ssl.client.auth=required
    ```

5.在每台机器上 使用openssl 测试kafkade监听端口是否配置好ssl

    openssl s_client -debug -connect 172.17.0.14:9093 -tls1

6.启动所有机器的kafka和zookeeper

7.客户端发消息需要创建 producer.config文件 里面指定了密码 和证书
需要把kafka.truststore kafka.keystore都拷到测试的机器上去。

bootstrap.servers=172.17.0.14:9093
security.protocol=SSL
ssl.truststore.location=/usr/local/kafkaSSLfiles/certificates/kafka.truststore
ssl.truststore.password=kafkasslpwd   
ssl.keystore.password=kafkasslpwd
ssl.keystore.location=/usr/local/kafkaSSLfiles/certificates/kafka.keystore

9.任意一台机器上创建测试话题
./kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 2 --partitions 2 --topic ssltest

10.使用kafka bin下自带的脚本 测试生产消息 指定producer.config参数
./kafka-console-producer.sh --broker-list 172.17.0.14:9093 --topic ssltest --producer.config producer.config

11.测试接收消息(某些参数 可能根据版本 有些不一样)
./kafka-console-consumer.sh --zookeeper 127.0.0.1:2181 --topic ssltest --from-beginning

附:脚本文件


#!/bin/bash
################################## 设置环境变量 ##############################
BASE_DIR=/usr/local/kafkaSSLfiles # SSL各种生成文件的基础路径
CERT_OUTPUT_PATH="$BASE_DIR/certificates" # 证书文件生成路径
PASSWORD=kafkasslpwd # 密码
KEY_STORE="$CERT_OUTPUT_PATH/kafka.keystore"   # Kafka keystore文件路径
TRUST_STORE="$CERT_OUTPUT_PATH/kafka.truststore" # Kafka truststore文件路径
KEY_PASSWORD=$PASSWORD # keystore的key密码
STORE_PASSWORD=$PASSWORD # keystore的store密码
TRUST_KEY_PASSWORD=$PASSWORD  # truststore的key密码
TRUST_STORE_PASSWORD=$PASSWORD # truststore的store密码
CLUSTER_NAME=test-cluster   # 指定别名
CERT_AUTH_FILE="$CERT_OUTPUT_PATH/ca-cert" # CA证书文件路径
CLUSTER_CERT_FILE="$CERT_OUTPUT_PATH/${CLUSTER_NAME}-cert" # 集群证书文件路径
DAYS_VALID=365 # key有效期
##############################################################################


keytool -keystore $KEY_STORE -alias $CLUSTER_NAME -validity $DAYS_VALID -genkey -keyalg RSA -storepass $STORE_PASSWORD -keypass $KEY_PASSWORD


echo "2. 创建CA......"
openssl req -new -x509 -keyout $CERT_OUTPUT_PATH/ca-key -out "$CERT_AUTH_FILE" -days "$DAYS_VALID" \
-passin pass:"$PASSWORD" -passout pass:"$PASSWORD" \
-subj "/C=CN/ST=yourcity/L=yourprovince/O=yourcompany/CN=yourdept"

echo "3. 导入CA文件到truststore......"
keytool -keystore "$TRUST_STORE" -alias CARoot \
-import -file "$CERT_AUTH_FILE" -storepass "$TRUST_STORE_PASSWORD" -keypass "$TRUST_KEY_PASS" -noprompt

echo "4. 从key store中导出集群证书......"
keytool -keystore "$KEY_STORE" -alias "$CLUSTER_NAME" -certreq -file "$CLUSTER_CERT_FILE" -storepass "$STORE_PASSWORD" -keypass "$KEY_PASSWORD" -noprompt


echo "5. 签发证书......"
openssl x509 -req -CA "$CERT_AUTH_FILE" -CAkey $CERT_OUTPUT_PATH/ca-key -in "$CLUSTER_CERT_FILE" \
-out "${CLUSTER_CERT_FILE}-signed" \
-days "$DAYS_VALID" -CAcreateserial -passin pass:"$PASSWORD"

echo "6. 导入CA文件到keystore......"
keytool -keystore "$KEY_STORE" -alias CARoot -import -file "$CERT_AUTH_FILE" -storepass "$STORE_PASSWORD" \
 -keypass "$KEY_PASSWORD" -noprompt
 
echo "7. 导入已签发证书到keystore......"
keytool -keystore "$KEY_STORE" -alias "${CLUSTER_NAME}" -import -file "${CLUSTER_CERT_FILE}-signed" \
-storepass "$STORE_PASSWORD" -keypass "$KEY_PASSWORD" -noprompt

你可能感兴趣的:(kafka集群 配置SSL)