常见的 Kerberos 异常
编辑常见的 Kerberos 异常
编辑症状
- 由于 GSS 协商失败或服务登录失败(在服务器上或在 Elasticsearch http 客户端中),用户身份验证失败。下面列出了一些常见异常以及一些帮助解决这些问题的技巧。
解决方法
-
GSS-API 级别未指定失败(机制级别:校验和失败)
-
当你在 HTTP 客户端端看到此错误消息时,它可能与密码不正确有关。
当你在 Elasticsearch 服务器日志中看到此错误消息时,它可能与 Elasticsearch 服务 keytab 有关。keytab 文件存在,但未能以该用户身份登录。请检查 keytab 的过期时间。还要检查 keytab 是否包含最新的凭据;如果不是,请更换它们。
你可以使用
klist
或ktab
等工具列出 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-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 选项。