常见的 Kerberos 异常

编辑

症状

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

解决方法

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

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

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

你可以使用 klistktab 等工具列出 keytab 中的主体并验证它们。你可以使用 kinit 来查看是否可以使用 keytab 获取初始票证。请在你的 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 用法:Accept

当你使用 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 选项