CLI接口的Kerberos认证
openLooKeng命令行接口可以连接到启用了Kerberos认证的openLooKeng协调节点。
环境配置
Kerberos服务
客户端通过网络访问的节点上需要运行Kerberos KDC(密钥分发中心)。KDC负责对主体进行身份验证,并为启用Kerberos的服务发布会话密钥。KDC通常在端口88上运行,该端口是IANA为Kerberos分配的端口。
MIT Kerberos配置
需要在客户端进行Kerberos配置。至少需要在/etc/krb5.conf
文件中的[realms]
小节中有一个kdc
条目。还需要增加一个admin_server
条目,并确保客户端能够通过端口749访问Kerberos管理服务器。
[realms]
OPENLOOKENG.EXAMPLE.COM = {
kdc = kdc.example.com
admin_server = kdc.example.com
}
[domain_realm]
.openlookeng.example.com = OPENLOOKENG.EXAMPLE.COM
openlookeng.example.com = OPENLOOKENG.EXAMPLE.COM
krb5.conf
的完整文档由麻省理工学院Kerberos项目托管。如果您使用Kerberos协议的不同实现方式,则需要根据您的环境修改配置。
Kerberos主体和Keytab文件
连接到openLooKeng协调节点的每个用户都需要一个Kerberos主体。您需要使用kadmin在Kerberos中创建这些用户。
另外,每个用户需要一个keytab文件。创建主体后,可使用 kadmin创建keytab文件。
kadmin
> addprinc -randkey someuser@EXAMPLE.COM
> ktadd -k /home/someuser/someuser.keytab someuser@EXAMPLE.COM
注意
运行ktadd命令将会使主体的密钥随机化。如果您刚刚创建了主体,这无关紧要。如果主体已经存在,并且现有的用户或服务依赖于使用密码或keytab进行验证,则在运行ktadd时需要增加-norandkey
选项。
Java加密扩展策略文件
JRE自带策略文件以限制可使用的加密密钥的强度。但默认情况下,Kerberos使用的密钥比策略文件支持的密钥要大。有两种可能的解决方案:
- 更新JCE策略文件。
- 配置Kerberos,使用强度降低的密钥。
推荐采用更新JCE策略文件的方案。JCE策略文件可以从Oracle下载。请注意,JCE策略文件因Java主版本而异。例如,Java6的策略文件不能在Java 8中使用。
Java 8策略文件可以从这里获取。ZIP归档文件的README
文件中有安装策略文件的说明。如果要在系统JRE中安装策略文件,则需要管理级别的访问权限。
TLS使用的Java 密钥库文件
使用Kerberos身份验证时,必须通过https访问openLooKeng协调节点。openLooKeng协调节点使用Java密钥库文件进行TLS配置。该文件可以复制到客户端,并用于其配置。
openLooKeng命令行执行
如果调用使能了Kerberos的CLI,除了连接到不需要Kerberos身份验证的openLooKeng协调节点时所需的选项之外,还需要一些额外的命令行选项。调用CLI的最简单方法是使用包装脚本。
#!/bin/bash
./openlk-cli \
--server https://openlookeng-coordinator.example.com:7778 \
--krb5-config-path /etc/krb5.conf \
--krb5-principal someuser@EXAMPLE.COM \
--krb5-keytab-path /home/someuser/someuser.keytab \
--krb5-remote-service-name openLooKeng \
--keystore-path /tmp/openLooKeng.jks \
--keystore-password password \
--catalog <catalog> \
--schema <schema>
选项 | 说明 |
---|---|
—server | openLooKeng协调节点的地址和端口。 端口必须设置为openLooKeng协调节点侦听HTTPS连接的端口。 |
—krb5-config-path | kerberos配置文件。 |
—krb5-principal | 对协调节点进行身份验证时使用的主体。 |
—krb5-keytab-path | 用于验证—krb5-principal 指定的主体的keytab的位置。 |
—krb5-remote-service-name | openLooKeng协调节点kerberos服务的名称。 |
—keystore-path | 用于TLS的Java密钥库文件的位置。 |
—keystore-password | 密钥库的密码。必须与创建密钥库时指定的密码一致。 |
异常处理
许多对openLooKeng协调节点进行故障诊断的步骤也同样适用于命令行的故障诊断。
Kerberos附加调试信息
在启动CLI进程时,可以通过将-Dsun.security.krb5.debug=true
作为JVM参数传递,为openLooKeng CLI进程启用额外的Kerberos调试信息。这样做要求通过java
调用CLI JAR,而不是直接运行自执行的JAR。自执行jar文件不能将选项传递给JVM。
#!/bin/bash
java \
-Dsun.security.krb5.debug=true \
-jar hetu-cli-*-executable.jar \
--server https://openlookeng-coordinator.example.com:7778 \
--krb5-config-path /etc/krb5.conf \
--krb5-principal someuser@EXAMPLE.COM \
--krb5-keytab-path /home/someuser/someuser.keytab \
--krb5-remote-service-name openLooKeng \
--keystore-path /tmp/openLooKeng.jks \
--keystore-password password \
--catalog <catalog> \
--schema <schema>
在文档中列出的为openLooKeng协调节点设置Kerberos认证的附加资源对解释Kerberos调试消息可能有帮助。