【发布时间】:2019-03-29 08:46:58
【问题描述】:
在带有 Java 8 的 RHEL 7.5 上运行。Kerberos 5 版本 1.15.1。
自 2.11.10 以来的所有版本中都出现了这种设置的奇怪行为。
请注意,我无法发布直接日志或配置,因为我的公司阻止了此操作。
复制步骤
1) 配置 gerrit 使用 kerberos
gerrit.config
[container]
javaHome = <path to JRE>
javaOptions = -Djava.security.auth.login.config=<path to jaas.conf>
[auth]
type = LDAP
[ldap]
authentication = GSSAPI
server = ldap://<AD Realm>
<.. other AD related stuff..>
jaas.conf
KerberosLogin {
com.sun.security.auth.module.Krb5LoginModule
required
useTicketCache=true
doNotPrompt=true
renewTGT=true;
};
直接来自文档。
2) 启动 keytab 以在缓存中创建票证。 3) 尝试登录。它失败并显示“在 Kerberos 数据库中找不到服务器 (7)”。
如果您更改 jaas.conf 以尝试直接使用 keytab,它也会失败。
您可以使用用户名/密码直接访问 LDAP,但由于公司限制,我们不能在设备上拥有未加密的静态密码,因此这不是一个可行的长期解决方案。
我们已经对到 AD 领域的流量进行了数据包捕获,无论我们使用 keytab 还是缓存,我们都会看到相同的行为。
1) 对于 kinit,我们看到一个对 AD 的请求,其中 SPN 字段设置为 keytab 中的 SPN。当然,这很好用。 2) 对于来自 Gerrit 的任何请求,我们看到两个对 AD 的请求,第一个具有来自缓存/keytab 的正确 SPN,第二个尝试发送 SPN 为“ldap/”,无论 SPN 设置什么值。第二个请求是导致错误的原因,因为 SPN 在 AD 中无法识别。请注意,我们已经尝试了具有各种 SPN(HTTP/设备、主机/设备、HTTP/设备@ 等)的密钥表。每次都会发生同样的事情。
这很可能是我们的配置中有一些非常简单的错误,但我们已经为此努力了好几个星期了。
【问题讨论】:
标签: java active-directory kerberos gerrit