2012-11-28 12 views
7

Quindi ho un codice che sto testando per assicurarmi che funzioni bene per l'autenticazione. Funziona benissimo contro i kerberos retti, quindi ho pensato che ci sarebbe stato solo un piccolo singhiozzo con AD. Sfortunatamente, non posso aggirare KrbException: KDC non supporta il tipo di crittografia (14).Autenticazione Java contro Active Directory, mancata corrispondenza di autenticazione?

So che l'errore è una mancata corrispondenza del tipo di crittografia. Ma posso fare il kinit bene, è solo nel codice che ho trovato un problema. Non sto impostando nulla, quindi penso che dovrebbe ereditare le stesse impostazioni predefinite di kinit, ma ovviamente non è così.

Il code-

System.setProperty("sun.security.krb5.debug", "true"); 
System.setProperty("java.security.krb5.realm", "TEST.SQRRL.COM"); 
System.setProperty("java.security.krb5.kdc", "172.16.101.128"); 
System.setProperty("java.security.auth.login.config", "./conf/jaas.conf"); 
System.setProperty("javax.security.auth.useSubjectCredsOnly", "true"); 

// "Client" references the JAAS configuration in the jaas.conf file. 
LoginContext loginCtx = null; 
loginCtx = new LoginContext("Server", new LoginCallbackHandler("test".toCharArray())); 
loginCtx.login(); 
subject = loginCtx.getSubject(); 

e la Jaas.conf

Server { 
com.sun.security.auth.module.Krb5LoginModule required 
useKeyTab=false 
storeKey=true 
useTicketCache=true 
principal="[email protected]"; 
}; 

E, lo stack di tracciabilità

>>>KRBError: 
    sTime is Tue Nov 27 18:16:36 EST 2012 1354058196000 
    suSec is 257213 
    error code is 14 
    error Message is KDC has no support for encryption type 
    realm is test.SQRRL.COM 
    sname is krbtgt/test.SQRRL.COM 
    msgType is 30 
javax.security.auth.login.LoginException: KDC has no support for encryption type (14) 
    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:597) 
    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 authenticators.KerberosAuthenticator.<init>(KerberosAuthenticator.java:37) 
    at main.ServerImpl.<init>(ServerImpl.java:91) 
    at main.PlugServer.run(PlugServer.java:22) 
    at main.PlugServer.main(PlugServer.java:42) 
Caused by: KrbException: KDC has no support for encryption type (14) 
    at sun.security.krb5.KrbAsRep.<init>(KrbAsRep.java:66) 
    at sun.security.krb5.KrbAsReq.getReply(KrbAsReq.java:446) 
    at sun.security.krb5.Credentials.sendASRequest(Credentials.java:401) 
    at sun.security.krb5.Credentials.acquireTGT(Credentials.java:373) 
    at com.sun.security.auth.module.Krb5LoginModule.attemptAuthentication(Krb5LoginModule.java:662) 
    ... 15 more 
Caused by: KrbException: Identifier doesn't match expected value (906) 
    at sun.security.krb5.internal.KDCRep.init(KDCRep.java:133) 
    at sun.security.krb5.internal.ASRep.init(ASRep.java:58) 
    at sun.security.krb5.internal.ASRep.<init>(ASRep.java:53) 
    at sun.security.krb5.KrbAsRep.<init>(KrbAsRep.java:50) 
    ... 19 more 
Exception in thread "main" java.lang.RuntimeException: javax.security.auth.login.LoginException: KDC has no support for encryption type (14) 
    at main.PlugServer.run(PlugServer.java:36) 
    at main.PlugServer.main(PlugServer.java:42) 
Caused by: javax.security.auth.login.LoginException: KDC has no support for encryption type (14) 
    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:597) 
    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 authenticators.KerberosAuthenticator.<init>(KerberosAuthenticator.java:37) 
    at main.ServerImpl.<init>(ServerImpl.java:91) 
    at main.PlugServer.run(PlugServer.java:22) 
    ... 1 more 
Caused by: KrbException: KDC has no support for encryption type (14) 
    at sun.security.krb5.KrbAsRep.<init>(KrbAsRep.java:66) 
    at sun.security.krb5.KrbAsReq.getReply(KrbAsReq.java:446) 
    at sun.security.krb5.Credentials.sendASRequest(Credentials.java:401) 
    at sun.security.krb5.Credentials.acquireTGT(Credentials.java:373) 
    at com.sun.security.auth.module.Krb5LoginModule.attemptAuthentication(Krb5LoginModule.java:662) 
    ... 15 more 
Caused by: KrbException: Identifier doesn't match expected value (906) 
    at sun.security.krb5.internal.KDCRep.init(KDCRep.java:133) 
    at sun.security.krb5.internal.ASRep.init(ASRep.java:58) 
    at sun.security.krb5.internal.ASRep.<init>(ASRep.java:53) 
    at sun.security.krb5.KrbAsRep.<init>(KrbAsRep.java:50) 
    ... 19 more 

risposta

5

Quindi, ho superato questa fase. Posso solo supporre che il supporto DES nella directory attiva per Windows Server 2012 sia interrotto, poiché ho finito con il tweaking del mio file krb5.conf e ho impostato i due tipi di ticket e permessi predefiniti solo aes256-cts-hmac-sha1-96 e ha funzionato per l'unico utente. Dopo aver abilitato aes256 per altri utenti in AD, ha continuato a funzionare.

+0

aes256-cts ha funzionato per me con 2008R2 – sura2k

0

Guardando init() in KDCRep.java, l'unica parte che sembra essa potrebbe essere il tuo errore di lancio:

 
    150   if ((subDer.getTag() & 0x1F) == 0x00) { 
    151    pvno = subDer.getData().getBigInteger().intValue(); 
    152    if (pvno != Krb5.PVNO) { 
    153     throw new KrbApErrException(Krb5.KRB_AP_ERR_BADVERSION); 
    154    } 
    155   } else { 
    156    throw new Asn1Exception(Krb5.ASN1_BAD_ID); 
    157   } 

Sembra un po 'strano che l'errore in fase di stampa come un KrbException, ma potrebbe funzionare in quanto KrbApErrException è una sottoclasse di KrbException. init(), tuttavia, non può lanciare altre sottoclassi di KrbException.

Gratta che. Una possibilità migliore è che è uno dei Asn1Exception s in là, dal momento che the constructor in KrbAsRep.java cattura e ripianifica quegli errori come KrbException s (con un appropriato initCause che si abbinerebbe abbastanza bene con la traccia dello stack).

"Identifier doesn't match expected value (906)" mi porta a credere che stia lanciando un Asn1Exception(Krb5.ASN1_BAD_ID), since Krb5.ASN1_BAD_ID has value 906. Ciò non è eccessivamente utile, poiché sembra essere l'errore predefinito in init().

vedere se è possibile generare il DerValue corrispondente alla propria configurazione e controllare manualmente, vedendo dove init() sarebbe rifiutarla, poi passo a ritroso da lì, guardare a ciò che parte della vostra configurazione creato i bit errati.


Ulteriori controlli in seguito, il messaggio "KDC has no support for encryption type" mi porta a credere Krb5.KDC_ERR_ETYPE_NOSUPP deve essere stato usato. Ma, dato che questo è only used for the default instance of Etype, potrebbe non significare molto.

+0

L''identificatore non corrisponde al valore previsto (906)' è un'eccezione standard nei livelli inferiori dell'implementazione GSSAPI Kerberos. Viene lanciata per un sacco di cose, ma c'è una corretta gestione degli errori negli strati sopra di esso. Sono abbastanza fiducioso che ci sia una sorta di mancata corrispondenza tra il server e il client java, dal messaggio proveniente dal KDC. Immagino di cosa sono bloccato su come impostare i tipi di crittografia in modo diverso nel client java. La configurazione del sistema va bene, dal momento che Kinin ha funzionato. È l'impostazione java che non funziona e non so come risolverlo. (Penso) – ohshazbot

1

È necessario accedere all'account dell'utente e selezionare la casella di controllo "Usa tipi di crittografia DES Kerberos".

Avrai bisogno di accedere al tuo DS come amministratore per farlo naturalmente.

+1

Ho controllato quelle caselle e resettato la password dell'utente senza successo. Questo è in Active Directory su Windows Server 2012. – ohshazbot