Java无法从Linux客户端的缓存中获取TGT

我在RHEL5.5中设置了Kerberos服务器和OpenLDAP.我还有一台RHEL6机器作为客户端.我使用jaas运行我的Java程序,从Linux客户端查询OpenLDAP服务器.

如果我将客户端的密钥表复制到客户端计算机并使用以下配置选项,我可以查询OpenLDAP服务器:

principal=wpingli
useKeyTab=true
keyTab="/home/wpingli/ker/java/wpingli_new.keytab";

如果系统提示我输入用户名/密码,我也可以查询OpenLDAP服务器.这让我相信我的环境还可以.

但是,如果我在kinit之后运行我的Java程序,我将无法查询服务器:

klist
[wpingli@pli java]$klist
Ticket cache: FILE:/tmp/krb5cc_500
Default principal: wpingli@XX.COM
Valid starting Expires Service principal
10/20/11 16:18:06 10/21/11 16:18:02 krbtgt/XX.COM@XX.COM

jaas configuration
GssExampleSUN{
com.sun.security.auth.module.Krb5LoginModule required
client=true
debug=true
doNotPrompt=true
useTicketCache=true
ticketCache="/tmp/krb5cc_500";
};

Exception:
Debug is true storeKey false useTicketCache true useKeyTab false doNotPrompt true ticketCache is /tmp/krb5cc_500 isInitiator true KeyTab is null refreshKrb5Config is false principal is null tryFirstPass is false useFirstPass is false storePass is false clearPass is false
Acquire TGT from Cache
Principal is null
**null credentials from Ticket Cache
[Krb5LoginModule] authentication failed
Unable to obtain Princpal Name for authentication
Authentication attempt failedjavax.security.auth.login.LoginException: Unable to obtain Princpal Name for authentication**

我怎样才能解决这个问题?

解决方法:

Java不一定支持(大概是MIT)kinit(libkrb5)支持的所有加密类型.

可以在krb5.conf文件中配置libkrb5使用的加密类型(通常在/ etc中).例如(不一定是最安全的):

# default_tgs_enctypes = aes256-cts arcfour-hmac-md5 des3-hmac-sha1 des-cbc-crc des-cbc-md5
default_tgs_enctypes = des3-hmac-sha1 des-cbc-crc des-cbc-md5

# default_tkt_enctypes = aes256-cts arcfour-hmac-md5 des3-hmac-sha1 des-cbc-crc des-cbc-md5
default_tkt_enctypes = des3-hmac-sha1 des-cbc-crc des-cbc-md5

# permitted_enctypes = aes256-cts arcfour-hmac-md5 des3-hmac-sha1 des-cbc-crc des-cbc-md5
permitted_enctypes = des3-hmac-sha1 des-cbc-crc des-cbc-md5

支持哪种加密类型取决于JRE供应商/版本及其安全提供程序.

以下是Java 6(Oracle JRE)文档的链接:

> http://download.oracle.com/javase/6/docs/technotes/guides/security/jgss/jgss-features.html

上一篇:移植openLDAP、berkeleyDB到ARM环境


下一篇:python – Pyramid(Pylons / repoze.bfg)LDAP身份验证