- - PR -
LoginContextを用いたkerberos認証について
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