You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Kerberos数据库找不到服务器:'DC=mydomain,DC=com'剩余名称含义咨询

问题描述

修改server.xml中的LDAP服务器地址时遇到以下错误:

GSS initiate failed [Caused by GSSException: No valid credentials provided (Mechanism level: Server not found in Kerberos database (7))]]; remaining name 'DC=mydomain,DC=com'

具体操作:将server.xml中的地址从xyz.mydomain.com改为ldap.mydomain.com,已在/etc/hosts中添加该域名对应的IP地址,ldap子域名指向xyz子域名(实际LDAP服务器地址为xyz.mydomain.com)。目前通过GUI可连接ldap.mydomain.com,但Apache服务器无法连接,部分错误仅显示“Kerberos数据库中找不到服务器”,无剩余名称信息。

疑问:错误信息中的**remaining name 'DC=mydomain,DC=com'**是什么含义?

附错误堆栈:

GSS initiate failed [Caused by GSSException: No valid credentials provided (Mechanism level: Server not found in Kerberos database (7))]]; remaining name 'DC=mydomain,DC=com'
Caused by: javax.security.sasl.SaslException: GSS initiate failed [Caused by GSSException: No valid credentials provided (Mechanism level: Fail to create credential. (63) - No service creds)]
at jdk.security.jgss/com.sun.security.sasl.gsskerb.GssKrb5Client.evaluateChallenge(GssKrb5Client.java:222)
at java.naming/com.sun.jndi.ldap.sasl.LdapSasl.saslBind(LdapSasl.java:172)
... 38 more
Caused by: GSSException: No valid credentials provided (Mechanism level: Fail to create credential. (63) - No service creds)
at java.security.jgss/sun.security.jgss.krb5.Krb5Context.initSecContext(Krb5Context.java:773)
at java.security.jgss/sun.security.jgss.GSSContextImpl.initSecContext(GSSContextImpl.java:266)
at java.security.jgss/sun.security.jgss.GSSContextImpl.initSecContext(GSSContextImpl.java:196)
at jdk.security.jgss/com.sun.security.sasl.gsskerb.GssKrb5Client.evaluateChallenge(GssKrb5Client.java:203)
... 39 more
Caused by: KrbException: Fail to create credential. (63) - No service creds
at java.security.jgss/sun.security.krb5.internal.CredentialsUtil.serviceCredsSingle(CredentialsUtil.java:458)
at java.security.jgss/sun.security.krb5.internal.CredentialsUtil.serviceCreds(CredentialsUtil.java:340)
at java.security.jgss/sun.security.krb5.internal.CredentialsUtil.serviceCreds(CredentialsUtil.java:314)
at java.security.jgss/sun.security.krb5.internal.CredentialsUtil.acquireServiceCreds(CredentialsUtil.java:169)
at java.security.jgss/sun.security.krb5.Credentials.acquireServiceCreds(Credentials.java:490)
at java.security.jgss/sun.security.jgss.krb5.Krb5Context.initSecContext(Krb5Context.java:697)

问题解答

1. remaining name 'DC=mydomain,DC=com'的含义

这个字段是Java LDAP客户端(JDNI)在Kerberos/GSSAPI认证失败时返回的未完成解析的LDAP命名上下文。简单来说,客户端尝试通过Kerberos认证绑定到LDAP服务器,但认证过程提前失败,此时客户端还没完成对完整LDAP命名空间的解析,就把当前已识别到的根域信息(DC=mydomain,DC=com)作为"剩余名称"返回出来。它本身不是错误原因,只是认证失败时附带的上下文信息。

2. 核心错误根源

你遇到的核心问题是Kerberos认证失败,日志里的"Server not found in Kerberos database"和"No service creds"是关键:

  • 当LDAP地址改为ldap.mydomain.com后,Java客户端会向Kerberos请求ldap/ldap.mydomain.com的服务票据,但你的Kerberos数据库里只有对应原地址xyz.mydomain.com的服务主体(ldap/xyz.mydomain.com),因此找不到匹配的服务器条目。
  • GUI能连接是因为GUI工具未使用Kerberos认证,或采用了简单绑定(simple bind),而Apache服务器配置的是Kerberos/GSSAPI绑定,所以出现认证失败。

3. 解决建议

  • 添加Kerberos服务主体别名:在Kerberos KDC服务器上,为原LDAP服务主体ldap/xyz.mydomain.com添加别名ldap/ldap.mydomain.com,更新服务票据后重新导出到Apache服务器的keytab文件中。
  • 修改Kerberos配置:若无法修改KDC,可在Apache服务器的krb5.conf中添加映射规则,将ldap/ldap.mydomain.com映射到ldap/xyz.mydomain.com。
  • 检查server.xml配置:确保server.xml中除LDAP地址外,Kerberos相关配置(如服务主体名称)同步更新,或明确指定服务主体为ldap/xyz.mydomain.com。

内容的提问来源于stack exchange,提问作者Suat Coskun

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 16:06:06