kdc-options 中的 Canonicalize 在 Windows 中自动设置为 true

问题描述 投票:0回答:3

我最近使用 JavaEE8 编写了一段代码,用于在 Active Directory 域中使用 Kerberos 对用户进行身份验证、从应用程序服务器请求服务。这包括一个使用 keytab 文件根据目标域的 kdc 对服务器进行身份验证的过程。
使用当前系统时一切正常,但现在我必须使用在 Windows 2008 Server 上运行的 kdc 来验证服务器。
我与

java.lang.RuntimeException: javax.security.auth.login.LoginException: Message stream modified (41)
斗争了一段时间,终于找到了问题所在:
Windows 2008 计算机上的 KDC 显然尚不支持 RFC 6806 - 第 11 节 FAST 方案(ENC-PA-REP 标志),因此客户端不得使用 kdc 选项
canonicalize=true

尽管 canonicalize 的默认值应该为 false(根据 MIT Kerberos Documentation),但事实上,当使用 Windows 计算机作为客户端时,它始终设置为 true。
这可以通过使用wireshark跟踪网络流量并查看req-body --> kdc-options --> canonicalize下的AS-REQ来看到。
有趣的是,这种情况“仅”发生在 Windows 中。当使用 Linux 作为客户端时,canonicalize 默认设置为 false,一切正常。 我尝试添加我能找到的所有对我的客户使用的
krb5.conf
规范化的引用的设置,但实际上没有任何改变 AS-REQ 中看到的规范化 kdc 选项。 因此,Windows 中似乎有一些专门覆盖规范化 kdc 选项的设置,使其始终为 true。
如果有人知道这可能是什么以及我如何改变这种行为,我将非常感激!



这是我的 krb5.conf libdefaults 部分当前的样子:

[libdefaults] default_realm = [our realm name] dns_lookup = false dns_lookup_kdc = false dns_lookup_realm = false default_tkt_enctypes = aes256-cts rc4-hmac default_tgs_enctypes = aes256-cts permitted_enctypes = aes256-cts canonicalize = false dns_canonicalize_hostname = false rdns = false


编辑:
我现在还尝试在 krb5.conf 文件中设置 kdc_default_options = 0x00000000 。这是在 Linux 上运行时默认设置的值,而在 Windows 上它始终设置为

00010000
。 (区别在于 kdc-options 中的 canonicalize 参数通过
00010000
设置为 true)。
遗憾的是这并没有改变什么。 Linux 版本中也没有添加带有 
00010000
的参数。这让我想知道 krb5.conf 中的这些参数是否真的被使用过。
我知道描述域、领域、kdc 和加密类型的内容实际上是从该文件中使用的,但其余部分似乎并没有真正产生任何影响。

有人有过这种行为的经历吗?

windows active-directory kerberos java-ee-8
3个回答
4
投票

经过多次调试,我通过设置系统属性解决了

sun.security.krb5.disableReferrals=true

这样,请求就没有被规范化。


0
投票

default_tkt_enctypes = aes128-cts rc4-hmac default_tgs_enctypes = aes128-cts permitted_enctypes = aes128-cts



0
投票
/conf/security/krb5.conf 中的 krb5.conf 有帮助 与身体

[libdefaults] canonicalize = true default_tkt_enctypes = rc4-hmac aes256-cts aes128-cts default_tgs_enctypes = rc4-hmac aes256-cts aes128-cts permitted_enctypes = rc4-hmac aes256-cts aes128-cts allow_weak_crypto = true

ps。 Windows 服务器 2017 + java17 + jcifs 2.17

© www.soinside.com 2019 - 2024. All rights reserved.