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