目录
为zookeeper配置TLS/SSL安全认证,以便增加安全机制。以下以kafka集成版zookeeper举例。
创建ssl证书
创建密钥库存储目录
mkdir /apps/kafka_3.4.1/config/certs
![]()
创建KeyStore密钥库
- Keytool是一个Java数据证书的管理工具,Keytool将密钥(key)和证书(certificates)存在一个称为keystore的文件中,Keystore可以简单理解为一个存放应用签名的文件。我们可以称它为密钥库。在keystore里,包括两种数据:
- 密钥实体(Key entity)——密钥(secret key)又或者是私钥和配对公钥(采用非对称加密)
- 可信任的证书实体(trusted certificate entries)——只包含公钥
- Keytool工具参数详细
| 参数 | 详解 |
| -genkey | 在用户主目录中创建一个默认文件”.keystore”,还会产生一个mykey的别名,mykey中包含用户的公钥、私钥和证书(在没有指定生成位置的情况下,keystore会存在用户系统默认目录) |
| -alias | 产生别名 每个keystore都关联这一个独一无二的alias,这个alias通常不区分大小写 |
| -keystore | 指定密钥库的名称(产生的各类信息将不在.keystore文件中) |
| -keyalg | 指定密钥的算法 (如 RSA DSA,默认值为:DSA) |
| -validity | 指定创建的证书有效期多少天(默认 90) |
| -keysize | 指定密钥长度 (默认 1024) |
| -storepass | 指定密钥库的密码(获取keystore信息所需的密码) |
| -keypass | 指定别名条目的密码(私钥的密码) |
| -dname | 指定证书发行者信息 其中: “CN=名字与姓氏,OU=组织单位名称,O=组织名称,L=城市或区域名 称,ST=州或省份名称,C=单位的两字母国家代码” |
| -list | 显示密钥库中的证书信息 keytool -list -v -keystore 指定keystore -storepass 密码 |
| -v | 显示密钥库中的证书详细信息 |
| -export | 将别名指定的证书导出到文件 keytool -export -alias 需要导出的别名 -keystore 指定keystore -file 指定导出的证书位置及证书名称 -storepass 密码 |
| -file | 参数指定导出到文件的文件名 |
| -delete | 删除密钥库中某条目 keytool -delete -alias 指定需删除的别 -keystore 指定keystore – storepass 密码 |
| -printcert | 查看导出的证书信息 keytool -printcert -file g:ssomichael.crt |
| -keypasswd | 修改密钥库中指定条目口令 keytool -keypasswd -alias 需修改的别名-keypass 旧密码 -new 新密码 -storepass keystore密码 -keystore sage |
| -storepasswd | 修改keystore口令 keytool -storepasswd -keystore g:ssomichael.keystore(需修改口令的keystore) -storepass pwdold(原始密码) -new pwdnew(新密码) |
| -import | 将已签名数字证书导入密钥库 keytool -import -alias 指定导入条目的别名 -keystore 指定keystore -file 需导入的证书 |
- dname选项详解
| 信息 | 详解 |
| [CN] | 这里输入域名 如 www.ssltest.com 或 子域名 mail.ssltest.com 或通配符域名 *.ssltest.com。实际环境可使用主机host名称,如host仿制域名;或常用的node1、node2命名,其通配域名可配置为node*。 |
| OU] | 购买或管理证书的部门,可以直接回车跳过或输入NA,即空。或输入公司简称等 |
| O] | 输入公司名称,如果没有公司名称,可输入NA |
| L] | 输入所在的城市 |
| ST] | 输入所在的省市,或自治区 |
| C] | 输入国家代码,中国填写CN |
- 开始创建
keytool -keystore /apps/kafka_3.4.1/config/certs/keystore.jks -alias zoo -validity 3650 -genkey -keyalg RSA -storepass rbt@123456 -keypass rbt@123456 -dname "CN=doris*,OU=rbt,O=rbt,L=beijing,ST=beijing,C=CN"

- 注:keystore的后缀名必须为.jks,不然客户端将无法识别文件类型。
- 复制警告内容,进行格式转换(输入上一步中-storepass参数中配置的密码)
keytool -importkeystore -srckeystore /apps/kafka_3.4.1/config/certs/keystore.jks -destkeystore /apps/kafka_3.4.1/config/certs/keystore.jks -deststoretype pkcs12

- 查看KeyStore内容
keytool -list -v -keystore /apps/kafka_3.4.1/config/certs/keystore.jks -storepass rbt@123456

- 导出证书
keytool -export -alias zoo -keystore /apps/kafka_3.4.1/config/certs/keystore.jks -rfc -file /apps/kafka_3.4.1/config/certs/zoo.cer -storepass rbt@123456

- 导入证书到truststore文件中
keytool -import -alias zoo -file /apps/kafka_3.4.1/config/certs/zoo.cer -keystore /apps/kafka_3.4.1/config/certs/truststore.jks -storepass rbt@123456 -keypass rbt@123456 -noprompt

- 注:truststore的后缀名必须为.jks,不然客户端将无法识别文件类型。
- 查看TrustStore内容
keytool -list -v -keystore /apps/kafka_3.4.1/config/certs/truststore.jks -storepass rbt@123456

- 将证书复制到其他节点
scp /apps/kafka_3.4.1/config/certs/keystore.jks root@doris2:/apps/kafka_3.4.1/config/certs/
scp /apps/kafka_3.4.1/config/certs/truststore.jks root@doris2:/apps/kafka_3.4.1/config/certs/
scp /apps/kafka_3.4.1/config/certs/zoo.cer root@doris2:/apps/kafka_3.4.1/config/certs/

服务端添加SSL信息
- 有两种添加方式,任选其一即可;
- 若同时或已开通ZooKeeper的ACL控制,则SSL的配置内容,一定要在ACL配置内容的下面,不然ZooKeeper将无法启动。正确配置顺序如下:

-
方式一:添加到配置文件
kafka集成zookeeper版本修改配置文件
vim config/zookeeper.properties
添加如下内容:
serverCnxnFactory=org.apache.zookeeper.server.NettyServerCnxnFactory
ssl.keyStore.location=/apps/kafka_3.4.1/config/certs/keystore.jks
ssl.keyStore.password=rbt@123456
ssl.trustStore.location=/apps/kafka_3.4.1/config/certs/truststore.jks
ssl.trustStore.password=rbt@123456

zookeeper独立版修改配置文件
vim conf/zoo.cfg
添加如下内容:
serverCnxnFactory=org.apache.zookeeper.server.NettyServerCnxnFactory
ssl.keyStore.location=/apps/apache-zookeeper-3.8.1-bin/conf/certs/keystore.jks
ssl.keyStore.password=rbt@123456
ssl.trustStore.location=/apps/apache-zookeeper-3.8.1-bin/conf/certs/truststore.jks
ssl.trustStore.password=rbt@123456

方式二:以变量的形式添加
kafka集成zookeeper版本修改启动脚本
vim zookeeper-server-start.sh
在脚本开头位置,添加如下内容:
export KAFKA_OPTS="-Dzookeeper.serverCnxnFactory=org.apache.zookeeper.server.NettyServerCnxnFactory -Dzookeeper.ssl.keyStore.location=/apps/kafka_3.4.1/config/certs/keystore.jks -Dzookeeper.ssl.keyStore.password=rbt@123456 -Dzookeeper.ssl.trustStore.location=/apps/kafka_3.4.1/config/certs/truststore.jks -Dzookeeper.ssl.trustStore.password=rbt@123456"

zookeeper独立版修改启动脚本
vim zkServer.sh
在脚本开头位置,添加如下内容:
export SERVER_JVMFLAGS="-Dzookeeper.serverCnxnFactory=org.apache.zookeeper.server.NettyServerCnxnFactory -Dzookeeper.ssl.keyStore.location=/apps/apache-zookeeper-3.8.1-bin/conf/certs/keystore.jks -Dzookeeper.ssl.keyStore.password=rbt@123456 -Dzookeeper.ssl.trustStore.location=/apps/apache-zookeeper-3.8.1-bin/conf/certs/truststore.jks -Dzookeeper.ssl.trustStore.password=rbt@123456"

配置文件添加安全端口
添加安全端口
- kafka集成zookeeper版本,配置文件一般为zookeeper.properties;独立版配置文件一般为zoo.cfg。
#kafka集成zookeeper版本
vim config/zookeeper.properties
#zookeeper独立版本
vim conf/zoo.cfg
添加如下内容:
secureClientPort=2183
![]()
- 若不想开通普通端口,则将“ClientPort=2181”注释即可,如:
![]()
重启zookeeper及kafka
- 重启zookeeper
#kafka集成zookeeper版本
/apps/kafka_3.4.1/bin/zookeeper-server-stop.sh
/apps/kafka_3.4.1/bin/zookeeper-server-start.sh -daemon /apps/kafka_3.4.1/config/zookeeper.properties
#zookeeper独立版本
/apps/apache-zookeeper-3.8.1-bin/bin/zkServer.sh restart


配置ZooKeeper Client连接
修改客户端脚本变量
kafka集成zookeeper版本修改客户端脚本
vim bin/zookeeper-shell.sh
在脚本开头位置,添加如下内容:
export KAFKA_OPTS="-Dzookeeper.clientCnxnSocket=org.apache.zookeeper.ClientCnxnSocketNetty -Dzookeeper.client.secure=true -Dzookeeper.ssl.hostnameVerification=false -Dzookeeper.ssl.keyStore.location=/apps/kafka_3.4.1/config/certs/keystore.jks -Dzookeeper.ssl.keyStore.password=rbt@123456 -Dzookeeper.ssl.trustStore.location=/apps/kafka_3.4.1/config/certs/truststore.jks -Dzookeeper.ssl.trustStore.password=rbt@123456"

zookeeper独立版修改客户端脚本
vim bin/zkCli.sh
在脚本开头位置,添加如下内容:
export CLIENT_JVMFLAGS="-Dzookeeper.clientCnxnSocket=org.apache.zookeeper.ClientCnxnSocketNetty -Dzookeeper.client.secure=true -Dzookeeper.ssl.hostnameVerification=false -Dzookeeper.ssl.keyStore.location=/apps/apache-zookeeper-3.8.1-bin/conf/certs/keystore.jks -Dzookeeper.ssl.keyStore.password=rbt@123456 -Dzookeeper.ssl.trustStore.location=/apps/apache-zookeeper-3.8.1-bin/conf/certs/truststore.jks -Dzookeeper.ssl.trustStore.password=rbt@123456"

验证客户端连接
kafka集成zookeeper版本客户端访问
bin/zookeeper-shell.sh 10.8.15.35:2183
ls /

zookeeper独立版修改客户端客户端访问
bin/zkCli.sh -server 10.8.15.35:9183
ls /


配置Kafka连接ZooKeeper
- 仅密钥库路径不同,其他配置均相同
kafka集成zookeeper版本修改kafka配置文件
vim /apps/kafka_3.4.1/config/server.properties
添加如下内容:
zookeeper.connect=doris1:2183,doris2:2183,doris3:2183
zookeeper.clientCnxnSocket=org.apache.zookeeper.ClientCnxnSocketNetty
zookeeper.ssl.client.enable=true
zookeeper.ssl.hostnameVerification=false
zookeeper.ssl.keystore.location=/apps/kafka_3.4.1/config/certs/keystore.jks
zookeeper.ssl.keystore.password=rbt@123456
zookeeper.ssl.truststore.location=/apps/kafka_3.4.1/config/certs/truststore.jks
zookeeper.ssl.truststore.password=rbt@123456

zookeeper独立版修改kafka配置文件
vim /apps/kafka_3.4.1/config/server.properties
添加如下内容:
zookeeper.connect=doris1:9183,doris2:9183,doris3:9183
zookeeper.clientCnxnSocket=org.apache.zookeeper.ClientCnxnSocketNetty
zookeeper.ssl.client.enable=true
zookeeper.ssl.hostnameVerification=false
zookeeper.ssl.keystore.location=/apps/apache-zookeeper-3.8.1-bin/conf/certs/keystore.jks
zookeeper.ssl.keystore.password=rbt@123456
zookeeper.ssl.truststore.location=/apps/apache-zookeeper-3.8.1-bin/conf/certs/truststore.jks
zookeeper.ssl.truststore.password=rbt@123456

本文详述了如何为ZooKeeper部署TLS/SSL安全认证,包括创建SSL证书、配置服务端与客户端、设置安全端口以及调整Kafka连接ZooKeeper的配置。内容涵盖kafka集成版和zookeeper独立版的步骤,确保ZooKeeper的安全运行。
5650

被折叠的 条评论
为什么被折叠?



