zookeeper 开启ssl认证与客户端服务端通信方法 详细攻略
前言
前置需求
1 修改zoo.cfg
2 修改zkCli.sh
3 客户端操作
客户端连接zk时需要添加如下配置
前言
最近公司有需求,zk集群必须添加ssl认证,网上找了很多方法,都不是很详细,在经过多番折腾之后,有了这篇文章
前置需求
要预先生成好客户端与服务端的ssl证书,参考我的另一篇文章
链接: ssl证书生成 详细流程
1 修改zoo.cfg
将clientPort替换为
secureClientPort=2281
1
并添加如下配置
serverCnxnFactory=org.apache.zookeeper.server.NettyServerCnxnFactory
ssl.keyStore.location= path/to/your/KeyStore.jks
ssl.keyStore.password= testpwd
ssl.trustStore.location= path/to/your/TrustStore.jks
ssl.trustStore.password= testpwd
1
2
3
4
5
2 修改zkCli.sh
在该文件第70行左右添加如下配置
export CLIENT_JVMFLAGS="
-Dzookeeper.clientCnxnSocket=org.apache.zookeeper.ClientCnxnSocketNetty
-Dzookeeper.client.secure=true
-Dzookeeper.ssl.hostnameVerification=false
-Dzookeeper.ssl.keyStore.location=path/to/your/KeyStore.jks
-Dzookeeper.ssl.keyStore.password=testpwd
-Dzookeeper.ssl.trustStore.location=path/to/your/TrustStore.jks
-Dzookeeper.ssl.trustStore.password=testpwd
-Dzookeeper.ssl.hostnameVerification=false"
1
2
3
4
5
6
7
8
9
至此 服务端操作就全部完成了,可以重启zk节点,使用zkCli.sh脚本登录zk进行crud操作了
3 客户端操作
自己在客户端按照ssl证书生成 详细流程的方法生成keystore和cert
将cert提交给服务端,服务端使用如下命令导入
keytool -import -alias 客户端名字 -file 客户端证书.cer -keystore truststore路径
1
使用服务端提供的cert,同样用上面的指令将证书导入truststore
这一步是将客户端与服务端双方的cert证书导入到对方的truststore文件中去
客户端连接zk时需要添加如下配置
zookeeper.clientCnxnSocket=org.apache.zookeeper.ClientCnxnSocketNetty
zookeeper.client.secure=true
zookeeper.ssl.hostnameVerification=false
zookeeper.ssl.keyStore.location=path/to/your/KeyStore.jks
zookeeper.ssl.keyStore.password=testpwd
zookeeper.ssl.trustStore.location=path/to/your/TrustStore.jks
zookeeper.ssl.trustStore.password=testpwd
zookeeper.ssl.hostnameVerification=false"
1
2
3
4
5
6
7
8
使用原生javaApi 可以参考下面的配置方法来创建zk连接
ZKClientConfig config = new ZKClientConfig();
config.setProperty("zookeeper.clientCnxnSocket", "org.apache.zookeeper.ClientCnxnSocketNetty");
config.setProperty("zookeeper.client.secure", "true");
config.setProperty("zookeeper.ssl.keyStore.location", "/path/to/your/KeyStore.jks");
config.setProperty("zookeeper.ssl.keyStore.password", "pwd");
config.setProperty("zookeeper.ssl.trustStore.location", "/path/to/yourtruststore.jks");
config.setProperty("zookeeper.ssl.trustStore.password", "pwd");
config.setProperty("zookeeper.ssl.hostnameVerification", "false");
ZooKeeper connect = new ZooKeeper("loLcalhost:2181", 3000, this.wh,config);
1
2
3
4
5
6
7
8
9
10
11
如使用其它api,则只需要在zk连接之前使用
System.setProperty()
1
将上述配置添加即可
————————————————
版权声明:本文为CSDN博主「LastSong_」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/LastSong_/article/details/115182219