【问题标题】:ZooKeeper Digest Authentication - Secure Alternative?ZooKeeper 摘要身份验证 - 安全替代方案?
【发布时间】:2014-02-11 02:51:34
【问题描述】:
我想让服务使用一些凭据通过 ZooKeeper 进行身份验证,以便它们可以访问配置信息。
Digest authentication 对我的要求不够安全:“身份验证是通过以明文形式发送用户名:密码来完成的”。
是否已有简单且安全的替代方案可用?我可以使用 Curator,并且该项目是基于 Java 的。
如果不是,创建我自己的身份验证方法将涉及哪些步骤?实现AuthenticationProvider,在服务器上设置zookeeper.authProvider.1 以使用此提供程序,然后将任何身份验证令牌(可能是用户名/密码哈希)传递给CuratorFrameWorkFactory 构建器作为byte[] 参数?
【问题讨论】:
标签:
java
security
authentication
apache-zookeeper
apache-curator
【解决方案1】:
通过 HTTPS 使用摘要(甚至是基本身份验证)。让传输层加密处理您的安全问题。尝试推出自己的应用层加密既困难又很可能导致安全漏洞。
更新:
关于 zookeeper 和 SSL。根据动物园管理员网站:
3.4 中的新功能:Netty 是一个基于 NIO 的客户端/服务器通信框架,它简化了(通过直接使用 NIO)Java 应用程序的网络级通信的许多复杂性。此外,Netty 框架内置了对加密 (SSL) 和身份验证(证书)的支持。这些是可选功能,可以单独打开或关闭。
zookeeper 文档在配置上有点稀疏,我建议你看看 Netty 文档。
【解决方案2】:
ZooKeeper 文档说设置此属性以使用 Netty:
zookeeper.serverCnxnFactory=org.apache.zookeeper.server.NettyServerCnxnFactory
我查看了 NettyServerCnxnFactory 的源代码及其内部类“CnxnChannelHandler”,很明显 3.4.5 中现有的 Zookeeper 代码没有内置的“配置”以使用 SSL 的能力。
我在这里猜测...但是使用 SSL 的一种可能方法是对 Zookeeper 的 NettyServerCnxnFactory 进行子类化,并添加使用 Netty 的 SSL 功能所需的代码。然后将 zookeeper 属性设置为指向您的新连接工厂。