全部学科
Python全栈
python
NodeJS全栈
nodejs
小程序首页
📅 2026-05-24 12 分钟 ✍️ juanwangdev

ZooKeeper SASL与SSL安全配置

认证和加密是安全加固核心。

SASL认证配置

认证方式对比

方式说明适用场景
Kerberos强认证,单点登录企业级生产
DIGEST-MD5用户密码认证中等安全要求

Kerberos配置

JAAS配置文件

properties
// zk_server_jaas.conf
Server {
    com.sun.security.auth.module.Krb5LoginModule required
    useKeyTab=true
    keyTab="/path/to/zookeeper.keytab"
    storeKey=true
    useTicketCache=false
    principal="zookeeper/_HOST@REALM";
};

zoo.cfg配置

Bash
authProvider.1=org.apache.zookeeper.server.auth.SASLAuthenticationProvider
kerberos.removeHostFromPrincipal=true
kerberos.removeRealmFromPrincipal=true

启动参数

properties
export KAFKA_OPTS="-Djava.security.auth.login.config=/path/to/zk_server_jaas.conf"
zkServer.sh start

DIGEST-MD5配置

Java
# zoo.cfg
authProvider.1=org.apache.zookeeper.server.auth.SASLAuthenticationProvider

JAAS配置

Bash
// zk_server_jaas.conf
Server {
    org.apache.zookeeper.server.auth.DigestLoginModule required
    user_admin="admin_password"
    user_app="app_password";
};

客户端认证

properties
// Kerberos客户端
System.setProperty("java.security.auth.login.config", "/path/to/zk_client_jaas.conf");

// DIGEST客户端
System.setProperty("java.security.auth.login.config", "/path/to/zk_client_jaas.conf");
CuratorFramework client = CuratorFrameworkFactory.builder()
    .connectString("host:2181")
    .authorization("digest", "user:password".getBytes())
    .build();

注意:Kerberos需提前配置KDC服务和keytab文件。

SSL/TLS加密

证书生成

Java
# 生成服务端证书
keytool -genkeypair -alias zookeeper -keyalg RSA -keysize 2048
    -dname "CN=zookeeper" -validity 365
    -keystore zookeeper.keystore -storepass password

# 导出证书
keytool -exportcert -alias zookeeper -keystore zookeeper.keystore
    -file zookeeper.cer -storepass password

# 客户端导入信任证书
keytool -importcert -alias zookeeper -file zookeeper.cer
    -keystore client.truststore -storepass password

服务端配置

properties
# zoo.cfg
ssl.clientAuth=need
ssl.keyStore.location=/path/to/zookeeper.keystore
ssl.keyStore.password=password
ssl.trustStore.location=/path/to/zookeeper.truststore
ssl.trustStore.password=password

# 端口配置
clientPort=2181        # 普通端口(建议禁用)
secureClientPort=2281  # SSL端口

客户端配置

Bash
System.setProperty("zookeeper.clientCnxnSocket", "org.apache.zookeeper.ClientCnxnSocketNetty");
System.setProperty("zookeeper.ssl.keyStore.location", "/path/to/client.keystore");
System.setProperty("zookeeper.ssl.keyStore.password", "password");
System.setProperty("zookeeper.ssl.trustStore.location", "/path/to/client.truststore");

CuratorFramework client = CuratorFrameworkFactory.builder()
    .connectString("host:2281")
    .build();

双向认证配置

text
ssl.clientAuth=need  # 需要客户端证书
# 服务端验证客户端证书

SSL端口使用

text
# 使用SSL端口连接
zkCli.sh -server host:2281

# 客户端必须配置证书才能连接

安全端口建议

建议说明
禁用普通端口只开放SSL端口
双向认证验证客户端身份
定期更新证书设置合理有效期

提示:生产环境建议禁用普通端口,只开放SSL端口。

要点总结

  • Kerberos适合企业级安全场景
  • DIGEST-MD5适合中等安全要求
  • JAAS文件配置认证方式和用户
  • keytool生成SSL证书
  • secureClientPort配置SSL端口
  • ssl.clientAuth=need启用双向认证
  • 生产环境禁用普通端口,只用SSL

📝 发现内容有误?点击此处直接编辑

← 上一篇 ZooKeeper IP白名单与ACL最佳实践
下一篇 → ZooKeeper Observer与分层架构
想查看更多题目和详细解析?
小程序提供完整的题库、模拟考试和详细解析
马上就来

长按或扫描二维码,立即体验

扫码体验小程序
马上就来
使用微信扫描二维码
立即体验完整题库