使用Kerberos和WAS7对应用程序用户进行身份验证

时间:2012-07-17 11:35:34

标签: java authentication kerberos jaas websphere-7

我挣扎了一段时间,把事情放在首位并解决了这个问题,但没有运气。 我正在尝试使用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

我已经定义了一个新的领域如下: •全局安全> 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)我做错了什么?

感谢您的时间。

1 个答案:

答案 0 :(得分:0)

在我回答你的问题之前,你必须再次清理你的配置:

  1. 忽略* _enctypes并让两者协商最佳的enctype。
  2. 不要在应用内设置属性。传递krb5.conf位置和env属性。这为您提供了完全的灵活性。
  3. 您应该使用票证缓存或密钥表。没有必要再次从客户端请求凭证。这会使Kerberos变得多余。您只需登录一次操作系统并使用票证缓存。
  4. 使用DES加密,它是不安全的,不推荐使用。
  5. 确保您拥有的TGT至少具有RC4(Arcfour)加密功能。
  6. 你的问题可能是这样的:

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

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