常见的 Kerberos 异常
编辑常见的 Kerberos 异常
编辑症状
- 由于 GSS 协商失败或服务登录失败(服务器或 Elasticsearch http 客户端),用户身份验证失败。下面列出了一些常见的异常以及一些帮助解决它们的提示。
解决方案
-
GSS-API 级别未指定的失败(机制级别:校验和失败)
-
如果在 HTTP 客户端侧看到此错误消息,则可能与密码不正确有关。
如果在 Elasticsearch 服务器日志中看到此错误消息,则可能与 Elasticsearch 服务密钥表有关。密钥表文件存在,但未能以用户身份登录。请检查密钥表是否过期。还要检查密钥表是否包含最新的凭据;如果不是,请替换它们。
可以使用
klist
或ktab
等工具列出密钥表中的主体并验证它们。可以使用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-API
、Kerberos
和SPNEGO
功能。如果不是,则需要使用此支持编译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 选项。