Kerberos:交叉 Domain/Realm 问题

Kerberos: Cross Domain/Realm Issue

我 运行 在帮助客户为我们的软件配置 SSO(使用 Kerberos)时遇到了一个问题。

但首先,让我们给你一些背景信息:

正如您在附件中看到的 krb5.ini 我们想要跨 Domain/Realm Kerberos,我们有四个不同的(Active Directory;都有 2008 R2 forest/domain 功能级别)域.

1) test.local 2) 子域。test.local(显然是 test.local 的子域)3) example.local 4) dummy.local

在 test.local 和 example.local 之间以及 test.local 和 example.local 之间(手动)设置了双向 t运行 主动信任。

test.local 和子域之间(当然)存在默认信任。test.local。

[libdefaults]
default_realm = TEST.LOCAL
default_tkt_enctypes = rc4-hmac aes128-cts aes256-cts des-cbc-crc des-cbc-md5 
default_tgs_enctypes = rc4-hmac aes128-cts aes256-cts des-cbc-crc des-cbc-md5 
permitted_enctypes = rc4-hmac aes128-cts aes256-cts des-cbc-crc des-cbc-md5 
[realms] 
TEST.LOCAL = {
  kdc = dc001.TEST.local
  kdc = dc002.TEST.local
}
EXAMPLE.LOCAL = {
  kdc = dc001.example.local
  kdc = dc002.example.local
}
SUBDOMAIN.TEST.LOCAL = {
  kdc = dc001.SUBDOMAIN.TEST.local
  kdc = dc002.SUBDOMAIN.TEST.local
}
DUMMY.LOCAL = {
  kdc = dc001.dummy.local
  kdc = dc002.dummy.local
}
[domain_realm]
test.local=TEST.LOCAL
.test.local=TEST.LOCAL
example.local=EXAMPLE.LOCAL
.example.local=EXAMPLE.LOCAL
dummy.local=DUMMY.LOCAL
.dummy.local=DUMMY.LOCAL
subdomain.test.local=SUBDOMAIN.TEST.LOCAL
.subdomain.test.local=SUBDOMAIN.TEST.LOCAL

跨域名解析工作正常。

Web 服务器是一个 linux 框(如果我没记错的话,它是 RedHat 或 CentOS 安装)。 fqdn 是 web001.test.local.

客户端(独立于它们所属的域)将 fqdn web001.test.local 视为本地 int运行et 区域的成员。

我们成功地为网络服务器创建了一个服务用户和相应的密钥表文件。

如果我们查询 test.local 并搜索 spn,我们会得到正确的响应:

<service user)>
HTTP/web001.test.local@TEST.LOCAL
HTTP/web001.test.local
HTTP/web001

之后我们开始测试并且 Kerberos 工作正常(如果用户是 test.local 或子域的成员。test.local)直到我们尝试使用来自 [=61= 的测试用户登录] 和 example.local.

每次用户尝试从这些特定域登录时,我们都会得到以下堆栈跟踪:

09:44:25.447 WARN  REQUEST[10.50.50.45]
o.s.s.k.w.a.SpnegoAuthenticationProcessingFilter - Negotiate Header was
invalid: Negotiate YIIJ...
org.springframework.security.authentication.BadCredentialsException:
Kerberos validation not successful

Caused by: java.security.PrivilegedActionException: null

Caused by: sun.security.krb5.KrbCryptoException: Checksum failed

Caused by: java.security.GeneralSecurityException: Checksum failed

正如我之前所说:Kerberos 在 test.local 和子域中与 clients/users 一起工作。test.local realm/domain.

但我不明白为什么它不能与另一个一起使用 domains/realms。

有人可以启发我或者至少给我一个提示吗?

提前致谢。

P.S。关于 debugging/responding:我无法直接访问客户域(活动目录)和网络服务器。因此调试和回复您的答案可能需要几天时间。

好的,问题出在信任配置上!如前所述,这是一种双向传递信任。遗憾的是,它既不是(子域除外)子域也不是森林信托。这是一种外部信任。这样,就没有 kerberos active 的名称路由约定。

我找到了这篇文章 (https://jorgequestforknowledge.wordpress.com/2011/09/14/kerberos-authentication-over-an-external-trust-is-it-possible-part-6/),我们通过 GPO 手动配置了名称路由。这成功了。

感谢伯恩哈德用他的问题为我指出了正确的方向。