常见的 Kerberos 异常

编辑

症状

  • 由于 GSS 协商失败或服务登录失败(服务器或 Elasticsearch http 客户端),用户身份验证失败。下面列出了一些常见的异常以及一些帮助解决它们的提示。

解决方案

GSS-API 级别未指定的失败(机制级别:校验和失败)

如果在 HTTP 客户端侧看到此错误消息,则可能与密码不正确有关。

如果在 Elasticsearch 服务器日志中看到此错误消息,则可能与 Elasticsearch 服务密钥表有关。密钥表文件存在,但未能以用户身份登录。请检查密钥表是否过期。还要检查密钥表是否包含最新的凭据;如果不是,请替换它们。

可以使用 klistktab 等工具列出密钥表中的主体并验证它们。可以使用 kinit 查看是否可以使用密钥表获取初始票据。请检查 Kerberos 环境中的这些工具及其文档。

Kerberos 依赖于正确的主机名解析,因此请检查您的 DNS 基础设施。不正确的 DNS 设置、DNS SRV 记录或 krb5.conf 中 KDC 服务器的配置可能会导致主机名解析问题。

GSS-API 级别未指定的失败(机制级别:请求是重放 (34))
GSS-API 级别未指定的失败(机制级别:时钟偏差过大 (37))

为了防止重放攻击,Kerberos V5 设置了计算机时钟同步的最大容差,通常为 5 分钟。请检查域内机器上的时间是否同步。

gss_init_sec_context() 失败:请求了不受支持的机制
找不到凭据:1.2.840.113554.1.2.2 用法:接受

在使用 curl 测试 Elasticsearch Kerberos 设置时,通常会在客户端看到此错误消息。例如,当您在客户端使用旧版本的 curl 时,就会出现这些消息,因此缺少 Kerberos Spnego 支持。Elasticsearch 中的 Kerberos 领域仅支持 Spengo 机制 (Oid 1.3.6.1.5.5.2);它尚不支持 Kerberos 机制 (Oid 1.2.840.113554.1.2.2)。

请确保:

  • 您已安装 curl 7.49 或更高版本,因为旧版本的 curl 存在已知的 Kerberos 问题。
  • 当您调用命令 curl -V 时,安装在您机器上的 curl 包含 GSS-APIKerberosSPNEGO 功能。如果不是,则需要使用此支持编译 curl 版本。

要下载最新版本的 curl,请访问 https://curl.haxx.se/download.html

由于 Kerberos 日志通常性质隐晦,并且由于它依赖于 DNS 和 NTP 等外部服务,因此可能会出现许多问题。您可能需要启用其他调试日志以确定问题的根本原因。

Elasticsearch 使用 JAAS(Java 身份验证和授权服务)Kerberos 登录模块来提供 Kerberos 支持。要为登录模块启用 Elasticsearch 的调试日志,请使用以下 Kerberos 领域设置

xpack.security.authc.realms.kerberos.<realm-name>.krb.debug: true

有关详细信息,请参阅 Kerberos 领域设置

有时,您可能需要更深入地了解 SPNEGO GSS 上下文协商期间的问题,或者查看 Kerberos 消息交换。要在 JVM 上启用 Kerberos/SPNEGO 调试日志记录,请添加以下 JVM 系统属性

-Dsun.security.krb5.debug=true

-Dsun.security.spnego.debug=true

有关 JVM 系统属性的更多信息,请参阅 设置 JVM 选项