常见的 Kerberos 异常编辑

症状

  • 由于 GSS 协商失败或服务登录失败(在服务器上或在 Elasticsearch HTTP 客户端中),用户身份验证失败。 下面列出了一些常见异常以及一些有助于解决这些异常的技巧。

解决方案

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

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

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

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

Kerberos 依赖于正确的主机名解析,因此请检查您的 DNS 基础架构。 krb5.conf 中不正确的 DNS 设置、DNS SRV 记录或 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 领域仅支持 Spnego 机制(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 选项