【发布时间】:2018-10-05 20:37:18
【问题描述】:
我在试图弄清楚我的选择是什么时感到迷茫。 Apache 的程序员指南和管理员指南没有详细说明任何实质性内容。我的 O'Reilly Zookeeper 书几乎没有谈到安全……我错过了什么吗?我希望通过 google 找到有关验证客户端连接、授权操作以及加密动物园管理员和客户端之间发送的消息的教程。
【问题讨论】:
我在试图弄清楚我的选择是什么时感到迷茫。 Apache 的程序员指南和管理员指南没有详细说明任何实质性内容。我的 O'Reilly Zookeeper 书几乎没有谈到安全……我错过了什么吗?我希望通过 google 找到有关验证客户端连接、授权操作以及加密动物园管理员和客户端之间发送的消息的教程。
【问题讨论】:
我遇到了很多麻烦,但我想通了,底部的链接对我有很大帮助。
这段代码(使用 Curator)很难弄清楚:
List<ACL> myAclList = new ArrayList<ACL>();
aclList.add(new ACL(ZooDefs.Perms.ALL, ZooDefs.Ids.AUTH_IDS));
client.create(withACL(myAclList)).forPath(myPath);
如果我正确设置了 zookeeper 配置,那么它将强制只允许 AUTH_IDS 访问我的 ZNode。
Ofiicial documentation、My mailing list Q1、My mailing list Q2、JIRA that I found useful, but some items are out of date
【讨论】:
自 zookeeper 版本 3.5.4-beta 起,您可以启用使用客户端证书来保护与远程 zookeeper 服务器的通信:
客户
ZooKeeper 客户端可以通过设置 Java 系统属性来使用 Netty:
zookeeper.clientCnxnSocket="org.apache.zookeeper.ClientCnxnSocketNetty"
为了在客户端进行安全通信,请设置此 Java 系统属性:
zookeeper.client.secure=true
请注意,通过设置“secure”属性,客户端可以而且应该只连接到服务器的“secureClientPort”,稍后将对此进行描述。
然后通过设置以下 Java 系统属性来设置 keystore 和 truststore 环境:
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"
服务器
ZooKeeper 服务器可以通过设置这个 Java 系统属性来使用 Netty:
zookeeper.serverCnxnFactory="org.apache.zookeeper.server.NettyServerCnxnFactory"
ZooKeeper 服务器还需要提供一个监听端口来接受安全的客户端连接。该端口与已知的“clientPort”不同,并与之并行运行。应该在“zoo.cfg”中添加:
secureClientPort=2281
所有安全客户端(上面提到的)都应该连接到这个端口。
然后像客户端一样设置密钥库和信任库环境。
更多信息在这里: https://cwiki.apache.org/confluence/display/ZOOKEEPER/ZooKeeper+SSL+User+Guide
【讨论】: