本文结合一个具体的实例给出如何在公有云环境上配置Kafka broker与client之间的SSL设置。

测试环境

  • 阿里云机一台(Server端):主机名是kafka1,负责运行单节点的Kafka集群。本文选择0.11.0.0版本
  • Mac笔记本一台(Client端):通过公网连接阿里云机器上的Kafka服务,给Kafka集群发送消息以及消费消息

前期准备

  • 在kafka1上,配置kafka1与内网IP的映射关系(修改/etc/hosts),即ping kafka1返回内网IP地址
  • 在Mac笔记本上,配置kafka1指向阿里云机器的外网IP
  • 分别下载Kafka 0.11.0.0二进制包到kafka1和笔记本上

创建配置脚本

配置SSL的步骤有很多,大致流程如下:

本例会创建一个方便的SHELL脚本,自动地执行前7步的工作。这样用户实际上只需要做3件事即可:

  1. 运行setup_ssl_for_servers.sh脚本(本例使用这个名字)
  2. 配置broker的server.properties
  3. 配置clients的特定属性

下面我们来看下setup_ssl_for_servers.sh脚本的实际内容,首先来看第一部分:

0. 设置环境变量

#!/bin/bash
################################## 设置环境变量 ##############################
BASE_DIR=/mnt/disk/huxitest # SSL各种生成文件的基础路径
CERT_OUTPUT_PATH="$BASE_DIR/certificates" # 证书文件生成路径
PASSWORD=kafka1234567 # 密码
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有效期
D_NAME="CN=Xi Hu, OU=YourDept, O=YourCompany, L=Beijing, ST=Beijing, C=CN" # distinguished name
##############################################################################
mkdir -p $CERT_OUTPUT_PATH

1. 创建keystore

echo "1. 创建集群证书到keystore......"
keytool -keystore $KEY_STORE -alias $CLUSTER_NAME -validity $DAYS_VALID -genkey -keyalg RSA \
-storepass $STORE_PASSWORD -keypass $KEY_PASSWORD -dname "$DNAME"

2. 创建CA

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=Beijing/L=Beijing/O=YourCompany/CN=Xi Hu"

3. 导入CA到truststore

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

4. 从keystore中导出证书

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

5. 签发证书

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"

6. 导入CA到keystore

echo "6. 导入CA文件到keystore......"
keytool -keystore "$KEY_STORE" -alias CARoot -import -file "$CERT_AUTH_FILE" -storepass "$STORE_PASSWORD" \
-keypass "$KEY_PASSWORD" -noprompt

7. 导入证书到keystore

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

完整脚本如下:setup_ssl_for_servers.sh

下面,我们在Kafka broker机器上运行setup_ssl_for_servers.sh脚本,结果输出如下:

如上图可见,setup_ssl_for_servers.sh脚本执行成功了,现在去到对应的目录下去检查生成的文件列表:

  • ca-cert:CA文件,不要把该文件拷贝到别的broker机器上!
  • test-cluster-cert-signed:CA已签发的Kafka证书文件,不要把该文件拷贝到别的broker机器上!
  • test-cluster-cert:Kafka认证文件(包含公钥和私钥),不要把该文件拷贝到别的broker机器上!
  • kafka.keystore:Kafka的keystore文件,所有clients端和broker机器上都需要!
  • kafka.truststore:Kafka的truststore文件,所有clients端和broker机器上都需要

配置Broker端参数

由于本例中client只有一个,即Mac笔记本,故我们需要把kafka.keystore和kafka.truststore拷贝到Mac笔记本上的某个位置,假设是/Users/huxi/Downloads/下。那么现在我们就可以开始配置broker端的server.properties文件了,与SSL相关的部分如下:

  • listeners=PLAINTEXT://:9092,SSL://:9093   # 这里为Kafka broker配置了两个listeners,一个是明文传输;另一个使用SSL加密进行数据传输
  • advertised.listeners=PLAINTEXT://公网IP:9092,SSL://公网IP:9093  # 因为是云上环境,如果clients通过公网(或外网)去连接broker,那么advertiesd.listeners就必须配置成所在机器的公网IP
  • ssl.keystore.location=/mnt/disk/huxitest/certificates/kafka.keystore # 提供SSL keystore的文件
  • ssl.keystore.password=kafka1234567 # 提供keystore密码
  • ssl.truststore.location=/mnt/disk/huxitest/certificates/kafka.truststore # 提供SSL truststore的文件
  • ssl.truststore.password=kafka1234567 # 提供truststore密码
  • ssl.key.password=kafka1234567 # keystore中的私钥密码
  • ssl.client.auth=required # 设置clients也要开启认证

配置好这些参数之后启动Kafka broker:

然后创建测试topic,如下所示:

$ bin/kafka-topics.sh --zookeeper localhost: --create --topic test --partitions  --replication-factor
Created topic "test".

配置clients端参数

本例中我们使用console-producer和console-consumer脚本来从Mac笔记本上给位于阿里云机器上的broker收发消息 ,下面首先演示如何配置producer。首先,我们创建一个producer.config文件,里面的内容如下:

bootstrap.servers=kafka1:9093   # 指定9093端口,即使用SSL监听器端口
security.protocol=SSL
ssl.truststore.location=/Users/huxi/Downloads/kafka.truststore # 指定truststore文件
ssl.truststore.password=kafka1234567   
ssl.keystore.password=kafka1234567
ssl.keystore.location=/Users/huxi/Downloads/kafka.keystore # 指定keystore文件

保存之后,我们运行console-producer来生产消息:

$ bin/kafka-console-producer.sh --broker-list kafka1: --topic test --producer.config producer.config
>hello, world
>hello, Kafka
>a test message
......

同样地,我们创建一个consumer.config文件,内容如下:

security.protocol=SSL
group.id=test-group
ssl.truststore.location=/Users/huxi/Downloads/kafka.truststore # 指定truststore文件
ssl.truststore.password=kafka1234567
ssl.keystore.password=kafka1234567
ssl.keystore.location=/Users/huxi/Downloads/kafka.keystore # 指定keystore文件

保存之后,我们运行console-consumer来消费消息:

$ bin/kafka-console-consumer.sh --bootstrap-server kafka1: --topic test --from-beginning --consumer.config consumer.config
hello, world
hello, Kafka
a test message

可见,Mac笔记本上的clients都可以正常工作了。

Kafka配置SSL(云环境)的更多相关文章

  1. 阿里云centos7.4下tomcat8.5配置ssl证书

    环境 阿里云centos7.4 域名也是阿里申请的 jdk1.8 tomcat8.5 1.申请证书 登录到阿里云的域名管理,可以看到已经申请过得域名,我这里第一个已经配置了ssl,第二个未配置,点击更 ...

  2. phpstudy配置SSL证书的步骤(Apache环境)以及一些注意事项

    准备工具(我自己的): 腾讯云的域名和云主机,还有SSL证书,以及phpstudy 首先要下载自己的SSL证书,会得到一个压缩包,解压以后会得到四个文件夹和一个csr文件, Apache文件夹内三个文 ...

  3. nginx下如何配置 ssl证书?腾讯云ssl证书为例!

    nginx下如何配置 ssl证书?腾讯云ssl证书为例! 目前为止,https已经成为一种趋势,想要开启https就需要ssl证书. 首先,为域名注册ssl证书. 腾讯云注册地址:https://cl ...

  4. 腾讯云环境配置之PHP5.6.3 + redis扩展 稳定版

    腾讯云环境配置之PHP5.6.3 + redis扩展 稳定版 时间:2015-01-18 01:41来源:linux.it.net.cn 作者:IT   #由于上文装过yum groupinstall ...

  5. Linux下Nginx配置阿里云 SSL证书实现HTTPS访问

    这篇文章主要介绍了nginx配置ssl证书实现https访问的示例 1.服务器系统:Centos 2. 阿里云申请SSL证书 选择“免费版DV SSL”,点击立即购买: 下载证书 列表中找到已签发的证 ...

  6. 【配置阿里云 I】申请配置阿里云服务器,并部署IIS和开发环境,项目上线经验

    https://blog.csdn.net/vapaad1/article/details/78769520 最近一年在实验室做web后端开发,涉及到一些和服务器搭建及部署上线项目的相关经验,写个帖子 ...

  7. 华为云服务器为Tomcat配置SSL

    近期由于开发小程序需要在云服务器上配置https访问协议,也遇到了一点小问题,把配置过程记录一下:SSL 证书申请下来之后会有 .jks .crt .pfx .pem为后缀的文件(如何申请SSL证书这 ...

  8. 【史上最全】申请配置阿里云服务器,并部署IIS和开发环境,项目上线经验

    最近一年在实验室做web后端开发,涉及到一些和服务器搭建及部署上线项目的相关经验,写个帖子和小伙伴们分享,一同进步! 首先谈一下,为什么越来越多中小型公司/实验室,部署项目的趋势都是在云服务器而不是普 ...

  9. 阿里云配置ssl证书

    一.申请证书和下载证书(阿里云申请) 二.在nginx服务器上配置ssl证书 1.检查服务器是否安装openssl 2.在nginx conf 文件夹创建 cret 文件,放置证书 [root@web ...

随机推荐

  1. GRAPH ATTENTION NETWORKS

    基本就是第一层concatenate,第二层不concatenate. 相关论文: Semi-Supervised Classification with Graph Convolutional Ne ...

  2. Kali配置网卡静态信息

    临时配置ip ifconfig eth0 up //端口启用 ifconfig eth0 down //端口关闭 ifconfig eth0 192.168.1.10 //只修改ip地址 ifconf ...

  3. Prolog学习:基本概念

    上一篇对Prolog有了一个感性的认识,今天介绍下Prolog中一些基本概念,想要用Prolog解决一些实际问题之前必须要先了解它们.这些概念在<七周七语言>这本书中都有介绍,我简单提炼汇 ...

  4. Zookeeper系统设计的优点

    转自:Zookeeper系统设计的优点.http://webcache.googleusercontent.com/search?q=cache:s6fr40t_5ncJ:www.chaozh.com ...

  5. ubuntu 14.04安装 DevStack的脚本配置文件——localrc

    本文ubuntu 14.04安装 DevStack的脚本配置文件——localrc,本文件名已经逐渐被取代,但是出于后向兼容性,使用该文件仍然可以为stack.sh安装脚本指定安装DevStack时的 ...

  6. Xianfeng轻量级Java中间件平台:用户管理

    用户管理:简单地说,就是管理系统用户的账号信息.在典型的业务系统中,用户管理往往不包含用户隶属组织机构相关属性(比如部门.岗位等)的维护,而是由组织机构管理专门去维护.因此在用户管理的功能中,主要就维 ...

  7. C# 窗口自适应窗口宽度和高度

    其实winform并不适合做自适应这玩意的,虽然,能做是能做, 就像菜刀一样能切水果,但是,不是那么合适,毕竟有水果刀 wpf做自适应拉伸窗体,会更好一些. 代码: #region 自适应 priva ...

  8. 混合线路接入时,360、QQ管家等测速显示电信IP或任意线路的IP

    最近很多人QQ上问我,我有电信.联通接入,用户测速的时候有的时候显示联通的IP,可是我想让他显示为电信的IP,怎么办? 3年前开始使用联通的线路时,就这样设置了,有些人还拿这个设置当宝贝了???? 其 ...

  9. Windows7双系统卸载Ubuntu

    正确的删除ubuntu方法如下: 第1步,修复MBR 1.进入win7,下载个软件MbrFix.exe,放在C:\windows\system32文件夹中 2.点击开始>所有程序>附件&g ...

  10. phd文献阅读日志-博一上学期

    为了记住并提醒自己阅读文献,进行了记录(这些论文都是我看过理解的),论文一直在更新中. 博一上学期: 1.week 6,2017.10.16 2014-Automatic Semantic Model ...