zk单机开启sasl认证

1.需求

dubbo连接zk,默认是没开鉴权的,本次的需求是dubbo与zk开启鉴权,所以研究了一些官方文档,给出一些配置项的配置规则。下方给出2个官方链接,本次要做的是client-server配置。
zk官方文档: client-server
https://cwiki.apache.org/confluence/display/ZOOKEEPER/Client-Server+mutual+authentication
zk官方文档: server-server
https://cwiki.apache.org/confluence/display/ZOOKEEPER/Server-Server+mutual+authentication

2.配置

2.1 Server配置

Server端需要配置三个文件:

  • conf/zoo.cfg
  • conf/java.env
  • JAAS conf file
    zk开启鉴权,先来看一下官网的介绍:


    image

2.1.1 配置zoo.cfg

conf/zoo.cfg

authProvider.1=org.apache.zookeeper.server.auth.SASLAuthenticationProvider
requireClientAuthScheme=sasl

2.1.2 配置java.env

conf/java.env
/path/to/server/jaas/file.conf是jaas conf file的路径

SERVER_JVMFLAGS="-Djava.security.auth.login.config=/path/to/server/jaas/file.conf"

2.1.3 配置jaas conf file

这一步配置2.1.2中的file.conf
有2种认证方式,推荐采用第2种,更简便一点,对kerberos了解不多

    1. JAAS configuration file, Kerberos mechanism
Server {
       com.sun.security.auth.module.Krb5LoginModule required
       useKeyTab=true
       keyTab="/path/to/server/keytab"
       storeKey=true
       useTicketCache=false
       principal="zookeeper/yourzkhostname";
};
  • 2.JAAS configuration file: DIGEST-MD5 authentication
    user_super="adminsecret"表示用户名是super,密码是adminsecret,这样就配好了鉴权需要用的用户名和密码
Server {
       org.apache.zookeeper.server.auth.DigestLoginModule required
       user_super="adminsecret"
       user_bob="bobsecret";
};

2.2 Client配置

2.2.1 dubbo配置文件配置

这里的client是dubbo应用
需要在配置文件中指定鉴权需要用的信息,xml,dubbo.properties,注解,这几种方式都可以,这里提供配置文件的方式

dubbo.registry.username=super
dubbo.registry.password=super
dubbo.registry.tokenfile=${user.home}/dubbo
dubbo.registry.section=dubbo

属性说明如下:

配置项 属性 说明
dubbo.registry.username ZooKeeper的用户名 此种模式下必需
dubbo.registry.password ZooKeeper的密码 此种模式下必需
dubbo.registry.tokenfile SASL的认证存储路径 推荐配置,如果不配置,默认会在temp目录生成类似dubbo279828353149507830.sasl.11652.dir和dubbo279828353149507830.sasl.11652的临时文件和目录
dubbo.registry.section JAAS的配置节名称 非必需,默认配置节名称为Client

2.2.2引入外部文件

还有一种引入外部文件的配置,及把认证信息写入一个.conf文件中,然后去调用

Client {
       org.apache.zookeeper.server.auth.DigestLoginModule required
       username="super"
       password="adminsecret";
};

多注册中心只能通过外部文件配置,
需要在启动参数中显式设置外部文件的引用
-Djava.security.auth.login.config=/root/dev/java/sasl.conf
对于多注册中心的鉴权:

ClientA {
       org.apache.zookeeper.server.auth.DigestLoginModule required
       username="super"
       password="adminsecret";
};
ClientB {
       org.apache.zookeeper.server.auth.DigestLoginModule required
       username="super"
       password="adminsecret";
};

3 注意事项

官方提供的java.env的配置,仅针对zkServer.sh脚本启动,对于windows下zkServer.cmd启动方式无效,windows下需要在zkServer.cmd中指定jaas conf file,以notepad++打开zkServer.cmd


image

其他配置方式可以参考zookeeper的官方文档。

你可能感兴趣的:(zk单机开启sasl认证)