0

我正在努力解决这个问题,但没有运气。我正在尝试使用 Kerberos 通过 AD 对我的 java 应用程序用户进行身份验证。我创建了如下 KDC:

[libdefaults]
default_realm = X.LOCAL
default_tkt_enctypes = des-cbc-md5 des-cbc-crc des3-cbc-sha1 rc4-hmac arcfour-hmac arcfour-hmac-md5 aes128-cts-hmac-sha1-96 
default_tgs_enctypes = des-cbc-md5 des-cbc-crc des3-cbc-sha1 rc4-hmac arcfour-hmac arcfour-hmac-md5 aes128-cts-hmac-sha1-96 
permitted_enctypes = des-cbc-md5 des-cbc-crc des3-cbc-sha1 rc4-hmac arcfour-hmac arcfour-hmac-md5 aes128-cts-hmac-sha1-96 

[realms]
X.LOCAL = {
kdc = machine_name.X.LOCAL 
default_domain = X.LOCAL 
}

[domain_realm]
.X.LOCAL = X.LOCAL

我定义了一个新领域,如下所示: • Global security>JAAS – 应用程序登录 • 创建了一个名为“client”的新登录并分配了 com.ibm.ws.security.auth.kerberos.Krb5LoginModuleWrapperClient 资源。

在代码级别,我正在设置 KDC 的路径:System.setProperty(java.security.krb5.conf, “KDC” path);

尝试登录:

loginContext = new LoginContext(moduleName, getUsernamePasswordHandler(userName, secret));
loginContext.login();

我正进入(状态:

登录错误:com.ibm.security.krb5.KrbException,状态码:14 消息:KDC 不支持加密类型

你会说不支持加密类型:) 我知道。

问:1)我错过了什么?(卡在这里超过 1 周)2)我做错了什么?

感谢您的时间。

4

1 回答 1

0

在我回答您的问题之前,您必须清理配置并重试:

  1. 省略 *_enctypes 并让两者协商最佳 enctype。
  2. 不要从应用程序内部设置属性。传递krb5.conf位置和环境属性。这为您提供了充分的灵活性。
  3. 您应该使用票证缓存或密钥表。没有必要从客户端再次请求凭据。这将使 Kerberos 变得多余。您只需登录一次操作系统并使用票证缓存。
  4. 不要使用DES 加密,它不安全并且已被弃用。
  5. 确保您拥有的 TGT 至少具有 RC4 (Arcfour) 加密。

你的问题大概是这样的:

AD 是禁用 DES 但您允许使用 DES 的 Windows Server 2008。这行不通。DES 在 2008 年被禁用是有充分理由的,或者您的客户端在顶部的 enctypes 列表中发送带有 AES 的初始请求。Windows Server 2003 无法处理这个问题。最常见的分母是 RC4-HMAC。

使用 Wireshark 检查流量。这将极大地帮助您理解问题和 Kerberos。编写一个独立的测试程序,它将帮助您作为概念证明。

于 2012-07-21T20:53:11.190 回答