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了解不多
-
- 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
其他配置方式可以参考zookeeper的官方文档。