ZooKeeper系列-ZooKeeper SSL配置指南
ZooKeeper的默认网络通信没有加密,开源社区在ZOOKEEPER-2125中加入了netty以支持SSL。
值得一提的是,和其他一些开源组件一样,ZooKeeper的SASL认证配置和SSL配置都可以通过JVM变量配置。这样一来配置起来比较方便,但也带来一些问题。例如在一个JVM中启动多个ZooKeeper时,会有配置冲突。
客户端配置
JVM变量方式
通过设置以下JVM变量启用Netty:
zookeeper.clientCnxnSocket="org.apache.zookeeper.ClientCnxnSocketNetty"
通过设置以下JVM变量启用安全通信:
zookeeper.client.secure=true
设置“secure”后的客户端只能访问服务器的“secureClientPort“
设置keystore 和 truststorJVM环境变量:
zookeeper.ssl.keyStore.location="/path/to/your/keystore"
zookeeper.ssl.keyStore.password="keystore_password"
zookeeper.ssl.trustStore.location="/path/to/your/truststore"
zookeeper.ssl.trustStore.password="truststore_password"
ZKClientConfig方式
ZKClientConfig clientConfig = new ZKClientConfig();
conf.setProperty(ZKClientConfig.SECURE_CLIENT, "true");
conf.setProperty(ZKClientConfig.ZOOKEEPER_CLIENT_CNXN_SOCKET, "org.apache.zookeeper.ClientCnxnSocketNetty");
conf.setProperty(ZKClientConfig.SSL_KEYSTORE_LOCATION, "KeyStorePath");
conf.setProperty(ZKClientConfig.SSL_KEYSTORE_PASSWD, "KeyStorePasswd");
conf.setProperty(ZKClientConfig.SSL_TRUSTSTORE_LOCATION, "TrustStorePath");
conf.setProperty(ZKClientConfig.SSL_TRUSTSTORE_PASSWD, "TrustStorePasswd");
借助ZKClientConfig社区还实现了在同一个JVM中启动多个客户端分别连接开启Kerberos认证的不同的ZooKeeper集群,或分别连接开启认证与未开启认证的ZooKeeper集群,有机会单开一篇文章介绍。
Server端
JVM变量方式
Server可以直接在zkServer.sh中增加配置:
export SERVER_JVMFLAGS="
-Dzookeeper.serverCnxnFactory=org.apache.zookeeper.server.NettyServerCnxnFactory
-Dzookeeper.ssl.keyStore.location=testKeyStore.jks
-Dzookeeper.ssl.keyStore.password=testpass
-Dzookeeper.ssl.trustStore.location=testTrustStore.jks
-Dzookeeper.ssl.trustStore.password=testpass"
export CLIENT_JVMFLAGS="
-Dzookeeper.clientCnxnSocket=org.apache.zookeeper.ClientCnxnSocketNetty
-Dzookeeper.client.secure=true
-Dzookeeper.ssl.keyStore.location=testKeyStore.jks
-Dzookeeper.ssl.keyStore.password=testpass
-Dzookeeper.ssl.trustStore.location=testTrustStore.jks
-Dzookeeper.ssl.trustStore.password=testpass"
端口在zoo.cfg中添加:
secureClientPort=2281
所有SSL模式客户端都应该连接到这一端口
zoo.cfg方式
在zoo.cfg中添加:
secureClientPort=3183
serverCnxnFactory=org.apache.zookeeper.server.NettyServerCnxnFactory
ssl.keyStore.location=testKeyStore.jks
ssl.keyStore.password=testpass
ssl.trustStore.location=testTrustStore.jks
ssl.trustStore.password=testpass
- 点赞
- 收藏
- 关注作者
评论(0)