协调节点Kerberos认证

可以配置openLooKeng协调节点,为客户端(例如openLooKeng命令行或JDBC和ODBC驱动程序)启用基于HTTPS的Kerberos身份验证。

为了启用Kerberos身份验证,需要修改在openLooKeng协调节点上的配置。不需要修改在工作节点上的配置。工作节点将继续通过未经身份验证的HTTP连接到协调节点。但是,如果需要确保openLooKeng节点之间使用SSL/TLS通信,则需要配置“内部通信安全”。

环境配置

Kerberos服务

openLooKeng协调节点通过网络访问的节点上需要运行Kerberos KDC(密钥分发中心)。KDC负责对主体进行身份验证,并为启用Kerberos的服务发布会话密钥。KDC通常在端口88上运行,该端口是IANA为Kerberos分配的端口。

MIT Kerberos配置介绍

Kerberos需要在openLooKeng协调节点上配置。至少需要在/etc/krb5.conf文件中的[realms]小节中有一个kdc条目。还可以增加一个admin_server条目,确保openLooKeng协调节点能够访问端口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主体,需要连接到openLooKeng协调节点的用户也需要一个Kerberos主体。可以使用kadmin在Kerberos中创建这些用户。

另外,openLooKeng协调节点需要一个 keytab文件。创建主体后,可以使用kadmin创建keytab文件。

kadmin
> addprinc -randkey openlookeng@EXAMPLE.COM
> addprinc -randkey openlookeng/openlookeng-coordinator.example.com@EXAMPLE.COM
> ktadd -k /etc/openlookeng/openlookeng.keytab openlookeng@EXAMPLE.COM
> ktadd -k /etc/openlookeng/openlookeng.keytab openlookeng/openlookeng-coordinator.example.com@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协调节点。您可以通过在协调节点上创建用于TLS连接的Java密钥库文件来实现。

系统访问控制插件

启用Kerberos的openLooKeng协调节点可能需要一个系统访问控制插件来达到所需的安全级别。

openLooKeng协调节点配置

在配置openLooKeng协调节点使用Kerberos身份验证和HTTPS之前,必须对环境进行上述修改。在完成以下环境修改后,您可以修改openLooKeng配置文件。

  • Kerberos服务
  • MIT Kerberos配置
  • Kerberos主体和Keytab文件
  • 用于TLS的Java密钥库文件
  • 系统访问控制插件

config.properties

在协调节点的config.properties文件中对Kerberos认证进行配置。需要添加的表项如下:

http-server.authentication.type=KERBEROS

http.server.authentication.krb5.service-name=openlookeng
http.server.authentication.krb5.principal-hostname=openlookeng.example.com
http.server.authentication.krb5.keytab=/etc/openlookeng/openlookeng.keytab
http.authentication.krb5.config=/etc/krb5.conf

http-server.https.enabled=true
http-server.https.port=7778

http-server.https.keystore.path=/etc/openlookeng_keystore.jks
http-server.https.keystore.key=keystore_password
属性描述
http-server.authentication.typeopenLooKeng协调节点的认证类型。必须设置为KERBEROS
http.server.authentication.krb5.service-nameopenLooKeng协调节点的Kerberos服务名。服务名必须与Kerberos主体匹配。
http.server.authentication.krb5.principal-hostnameopenLooKeng协调节点的的Kerberos主机名。主机名必须与Kerberos主体匹配。该参数为可选参数。如果设置,openLooKeng将在Kerberos主体的主机部分使用这个值,而不是使用机器的主机名。
http.server.authentication.krb5.keytab用来对Kerberos主体进行身份验证的keytab文件的位置。
http.authentication.krb5.configkerberos配置文件所在的位置。
http-server.https.enabled为openLooKeng协调节点开启HTTPS访问功能。取值设置为true
http-server.https.portHTTPS服务器的端口号。
http-server.https.keystore.path用于TLS安全连接的Java密钥库文件的位置。
http-server.https.keystore.key密钥库的密码。必须与创建密钥库时设置的密码一致。
http-server.authentication.krb5.user-mapping.pattern用于认证用户匹配的正则表达式。如果匹配,认证用户映射到正则表达式中的第一个匹配组;如果不匹配,则拒绝认证。默认值是(.*)
http-server.authentication.krb5.user-mapping.file包含用户映射规则的JSON文件。详见 认证用户映射

注意

http-server.authentication.krb5.user-mapping.patternhttp-server.authentication.krb5.user-mapping.file属性不能同时设置。

开启HTTPS后,监控openLooKeng协调节点的CPU使用率。如果您允许Java从大的列表中选择,那么它更喜欢CPU密集型的加密套件。启用HTTPS后,如果CPU占用率过高,可以通过设置http-server.https.included-cipher属性只允许廉价的密码,使Java使用指定的加密套件。非前向保密密码默认关闭。因此,如果您想选择非前向保密密码,您需要将http-server.https.excluded-cipher属性设置为空列表,以覆盖默认的排除。

http-server.https.included-cipher=TLS_RSA_WITH_AES_128_CBC_SHA,TLS_RSA_WITH_AES_128_CBC_SHA256
http-server.https.excluded-cipher=

Java资料中列出了支持的加密套件

access-control.properties

access-control.properties文件必须至少包含access-control.name属性。 其他配置则因配置的实现而异。有关详细信息,请参阅系统访问控制。

异常处理

实现Kerberos身份验证具有挑战性。您可以独立地验证openLooKeng之外的一些配置,以便在尝试解决问题时缩小您的关注范围。

Kerberos验证

请确保openLooKeng协调节点能够通过telnet连接到KDC。

$ telnet kdc.example.com 88

验证使用keytab文件通过kinitklist成功获取票证功能。

$ kinit -kt /etc/openlookeng/openlookeng.keytab openlookeng@EXAMPLE.COM
$ klist

Java密钥库文件验证

使用Java密钥库文件验证中的方法验证密钥库文件的密码并查看其内容。

Kerberos附加调试信息

通过在openLooKeng jvm.config文件中添加以下行,可以为openLooKeng协调节点进程启用额外的Kerberos调试信息:

-Dsun.security.krb5.debug=true
-Dlog.enable-console=true

-Dsun.security.krb5.debug=true启用来自JRE Kerberos库的Kerberos调试输出。调试输出进入stdout,再被openLooKeng重定向到日志记录系统。-Dlog.enable-console=true使输出到stdout的输出呈现在日志中。

Kerberos调试输出发送到日志的信息量和有用性因身份验证失败的位置而异。异常消息和堆栈跟踪也可以提供有关问题本质的有用线索。

更多资源

常见的Kerberos错误信息(A-M)

常见的Kerberos错误信息(N-Z)

MIT Kerberos文档:故障处理

有奖捉虫

“有虫”文档片段

0/500

存在的问题

文档存在风险与错误

● 拼写,格式,无效链接等错误;

● 技术原理、功能、规格等描述和软件不一致,存在错误;

● 原理图、架构图等存在错误;

● 版本号不匹配:文档版本或内容描述和实际软件不一致;

● 对重要数据或系统存在风险的操作,缺少安全提示;

● 排版不美观,影响阅读;

内容描述不清晰

● 描述存在歧义;

● 图形、表格、文字等晦涩难懂;

● 逻辑不清晰,该分类、分项、分步骤的没有给出;

内容获取有困难

● 很难通过搜索引擎,openLooKeng官网,相关博客找到所需内容;

示例代码错误

● 命令、命令参数等错误;

● 命令无法执行或无法完成对应功能;

内容有缺失

● 关键步骤错误或缺失,无法指导用户完成任务,比如安装、配置、部署等;

● 逻辑不清晰,该分类、分项、分步骤的没有给出

● 图形、表格、文字等晦涩难懂

● 缺少必要的前提条件、注意事项等;

● 描述存在歧义

0/500

您对文档的总体满意度

非常不满意
非常满意

请问是什么原因让您参与到这个问题中

您的邮箱

创Issue赢奖品
根据您的反馈,会自动生成issue模板。您只需点击按钮,创建issue即可。
有奖捉虫