- PR -

LoginContextを用いたkerberos認証について

1
投稿者投稿内容
keru
会議室デビュー日: 2008/03/14
投稿数: 1
投稿日時: 2008-03-14 20:30
はじめまして。現在Javaでケルベロス認証を行うコンポーネントを作成中しています(クライアント側)

やりたい処理としては
ユーザー名とパスワードを入力し、
認証を成功させたいのですが

以下のエラーが発生してしまいます。
プリンシパルの作成に失敗しているようなのですが、これは、サーバー側がクライアント側を認識していないということなんでしょうか?

設定が足りていないのでしょうか?
【ソース】
-----------------------------------------------------------------------------
import getDesktop.GetDesktop;
import getDesktop.listeners.Listener;

import java.io.FileInputStream;
import java.net.InetAddress;
import java.net.UnknownHostException;
import java.rmi.Naming;
import java.rmi.RMISecurityManager;
import java.rmi.RemoteException;
import java.rmi.server.UnicastRemoteObject;
import java.security.PrivilegedAction;
import java.util.List;
import java.util.Properties;

import javax.security.auth.Subject;
import javax.security.auth.login.LoginContext;
import javax.security.auth.login.LoginException;

import com.sun.security.auth.callback.TextCallbackHandler;



public class Sample{


/**
* @param args
*/
public static void main(String[] args) {
// TODO 自動生成されたメソッド・スタブ

login();
}

public static void login(){
// TGT取得に使用する細かい設定
System.setProperty("host.global.ip", "xxx.xx.xxx.xxx"); //クライアントのIP
System.setProperty("java.security.krb5.realm" ,"NIRS.IHE");
System.setProperty("java.security.krb5.kdc" ,"xx.xx.xxx.xxx"); //ケルベロスサーバのIP
System.setProperty("java.security.auth.login.config" ,"jaas.conf");
System.setProperty("sun.security.krb5.debug" ,"true");
System.setProperty("default_tkt_enctypes", "des-cbc-md5" );
System.setProperty("default_tgs_enctypes", "des-cbc-md5" );
System.setProperty("permitted_enctypes", "des-cbc-md5" );
System.setProperty("isInitiator", "false" );
/*System.out.println("2");
//KDCサーバの選択、レルムの選択、暗号化の種類等認証サーバーに依存する
//細かい設定を記述したファイル。記述方はkrb5.confで検索したら出てくる
LoginContext lc = null;
try {
lc = new LoginContext("Sample",
new TextCallbackHandler());

lc.login();

} catch (LoginException e) {

System.out.println(e.getMessage());
e.printStackTrace();
}
}

}


-----------------------------------------------------------------------------
【エラー内容】
----------------------------------------------------------------------------
Debug is true storeKey false useTicketCache true useKeyTab false doNotPrompt false ticketCache is null 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
>>>KinitOptions cache name is C:\\Documents and Settings\\eua-psa\\krb5cc_eua-psa
>> Acquire default native Credentials
>>> Found no TGT's in LSA
Principal is null
null credentials from Ticket Cache
Kerberos ユーザ名 [eua-psa]: name
name の Kerberos パスワード: pass
[Krb5LoginModule] user entered username: name

Using builtin default etypes for default_tkt_enctypes
default etypes for default_tkt_enctypes: 3 1 23 16 17.
Acquire TGT using AS Exchange
Using builtin default etypes for default_tkt_enctypes
default etypes for default_tkt_enctypes: 3 1 23 16 17.
>>> KrbAsReq calling createMessage
>>> KrbAsReq in createMessage
>>> KrbKdcReq send: kdc=xxx.xx.xx.xx UDP:xx, timeout=30000, number of retries =3, #bytes=138
>>> KDCCommunication: kdc= xxx.xx.xx.xx UDP:xx, timeout=30000,Attempt =1, #bytes=138
>>> KrbKdcReq send: #bytes read=502
>>> KrbKdcReq send: #bytes read=502
>>> EType: sun.security.krb5.internal.crypto.DesCbcMd5EType
[Krb5LoginModule] authentication failed
Integrity check on decrypted field failed (31)
Integrity check on decrypted field failed (31)
javax.security.auth.login.LoginException: Integrity check on decrypted field failed (31)
at com.sun.security.auth.module.Krb5LoginModule.attemptAuthentication(Krb5LoginModule.java:696)
at com.sun.security.auth.module.Krb5LoginModule.login(Krb5LoginModule.java:542)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:585)
at javax.security.auth.login.LoginContext.invoke(LoginContext.java:769)
at javax.security.auth.login.LoginContext.access$000(LoginContext.java:186)
at javax.security.auth.login.LoginContext$4.run(LoginContext.java:683)
at java.security.AccessController.doPrivileged(Native Method)
at javax.security.auth.login.LoginContext.invokePriv(LoginContext.java:680)
at javax.security.auth.login.LoginContext.login(LoginContext.java:579)
at main.ClientAuthenticationAgent.login(ClientAuthenticationAgent.java:137)
at main.ClientAuthenticationAgent.main(ClientAuthenticationAgent.java:77)
Caused by: KrbException: Integrity check on decrypted field failed (31)
at sun.security.krb5.internal.crypto.DesCbcEType.decrypt(DesCbcEType.java:154)
at sun.security.krb5.internal.crypto.DesCbcEType.decrypt(DesCbcEType.java:125)
at sun.security.krb5.EncryptedData.decrypt(EncryptedData.java:167)
at sun.security.krb5.KrbAsRep.<init>(KrbAsRep.java:87)
at sun.security.krb5.KrbAsReq.getReply(KrbAsReq.java:486)
at sun.security.krb5.Credentials.sendASRequest(Credentials.java:405)
at sun.security.krb5.Credentials.acquireTGT(Credentials.java:355)
at Krb5LoginModule.attemptAuthentication(Krb5LoginModule.java:662)
... 13 more
認証成功
Error calling function Protocol status: 1312
----------------------------------------------------------------------------

【jaas.conf】
----------------------------------------------------------------------------
Sample {
  Krb5LoginModule required
debug=true
useTicketCache=true;
};



----------------------------------------------------------------------------
ケルベロスサーバーは存在しています

長文失礼致しました。
よろしくお願い致します。
環境----------------------------------------
JDK1.5.0_14
開発環境はeclipse3.3

ケルベロスサーバー
OS:FreeBSD5.4
KDC:KTH:KTH-Heimdal(Kerberos5)
プロトコル:LDAP
----------------------------------------------
1

スキルアップ/キャリアアップ(JOB@IT)