JavaはLinuxクライアントキャッシュからTGTを取得できません。

JavaはLinuxクライアントキャッシュからTGTを取得できません。

RHEL5.5でKerberosサーバーとOpenLDAPを設定しました。また、クライアントとしてRHEL6システムがあります。jaasLinuxクライアントでOpenLDAPサーバーを照会するためにJavaプログラムを実行しました。

クライアントのキータブをクライアントコンピュータにコピーし、次の設定オプションを使用してOpenLDAPサーバーに問い合わせることができます。

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

ユーザー/パスワードの入力を求められたら、OpenLDAPサーバーに問い合わせることもできます。これは私の環境が良いと信じています。

しかし、次の後にJavaプログラムを実行するとkinit

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

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**

この問題をどのように解決できますか?

ベストアンサー1

Javaはサポートされているすべての暗号化タイプを必ずしもサポートしているわけではありません(おそらくMIT kinitlibkrb5

ファイルlibkrb5で使用される暗号化の種類は、krb5.conf一般的にで構成できます/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)のドキュメントへのリンクです。

おすすめ記事