2012-07-17 121 views
0

我正在努力争取一段时间把事情头对头,并解决这个问题,但没有运气。 我想通过AD使用Kerberos来验证我的Java应用程序用户。 我创建了KDC如下:使用Kerberos和WAS7对应用程序用户进行身份验证

[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 - 应用程序登录 •创建一个新的登录名为“客户端”和分配的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)我在做什么错了?

谢谢你的时间。

回答

0

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

  1. 省略* _enctypes,让双方协商最好的加密类型。
  2. 不要在应用程序内设置属性。通过krb5.conf位置和env属性。这给你充分的灵活性。
  3. 您应该使用票证缓存或密钥表。从客户端再次请求凭证是毫无意义的。这会让Kerberos变得多余。您只需登录一次操作系统并使用票据缓存。
  4. 不是使用DES加密,它是不安全的,并已被弃用。
  5. 确保您所拥有的TGT至少有RC4(Arcfour)加密。

你的问题很可能是这样的:

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

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

+0

我前段时间解决了这个问题。在我冷静下来之后,我做了很多你所建议的事情。我已将kbr5.conf设置为env属性,并仅使用rc4-hmac,des-cbc-md5进行加密。对于后期更新抱歉。 – user1531547 2012-09-03 14:07:41

相关问题