|
ZooKeeper的默认网络通信没有加密,开源社区在ZOOKEEPER-2125中加入了netty以支持SSL。 值得一提的是,和其他一些开源组件一样,ZooKeeper的SASL认证配置和SSL配置都可以通过JVM变量配置。这样一来配置起来比较方便,但也带来一些问题。例如在一个JVM中启动多个ZooKeeper时,会有配置冲突。 客户端配置JVM变量方式 9 w$ f$ ^0 n) y1 B' z
通过设置以下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 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变量方式
; h" P+ a% T, n4 v, Q
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方式
. s* f6 Q" }) d y
在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 6 y6 y9 {! S4 I w# X" N
|