2012-03-02 11 views
5

Sto migrando da Java 6 a Java 7 e sto correndo in un problema con l'autenticazione Kerberos. Mi sembra che l'ordine del tipo di crittografia sottostante sia cambiato e di conseguenza viene utilizzato un tipo di crittografia differente. In questo caso, Aes128CtsHmacSha1EType viene utilizzato per parte della transazione quando viene eseguito Java 7. ArcFourHmacEType viene utilizzato quando viene eseguito Java 6 e per l'altra parte dell'esecuzione di Java 7.Java 7 Problema Kerberos - AES128 Somma di controllo corrotta

Altri dettagli: esecuzione su Linux (Fedora 16) contro un server Windows Active Directory.

So che posso far funzionare l'autenticazione se imposto i parametri default_tkt_enctypes, default_tgs_enctypes, allowed_enctypes nel file krb5.conf; tuttavia, mi piacerebbe farlo funzionare senza avere un file e idealmente senza forzare uno o due enctype.

Ecco il messaggio di errore sto ottenendo:

java.security.PrivilegedActionException: javax.naming.AuthenticationException: GSSAPI [Root exception is javax.security.sasl.SaslException: Final handshake failed [Caused by GSSException: Token had invalid integrity check (Mechanism level: Corrupt checksum in Wrap token)]] 
at java.security.AccessController.doPrivileged(Native Method) 
at javax.security.auth.Subject.doAs(Subject.java:415) 
at *internal.code*.LDAPAuthenticator.authenticate(LDAPAuthenticator.java:46) 
at *internal.code*.LDAPAuthenticatorTest.testUpdateUser(LDAPAuthenticatorTest.java:30) 
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
at java.lang.reflect.Method.invoke(Method.java:601) 
at junit.framework.TestCase.runTest(TestCase.java:154) 
at junit.framework.TestCase.runBare(TestCase.java:127) 
at junit.framework.TestResult$1.protect(TestResult.java:106) 
at junit.framework.TestResult.runProtected(TestResult.java:124) 
at junit.framework.TestResult.run(TestResult.java:109) 
at junit.framework.TestCase.run(TestCase.java:118) 
at junit.framework.TestSuite.runTest(TestSuite.java:208) 
at junit.framework.TestSuite.run(TestSuite.java:203) 
at junit.textui.TestRunner.doRun(TestRunner.java:116) 
at com.intellij.junit3.JUnit3IdeaTestRunner.doRun(JUnit3IdeaTestRunner.java:139) 
at junit.textui.TestRunner.doRun(TestRunner.java:109) 
at com.intellij.junit3.JUnit3IdeaTestRunner.startRunnerWithArgs(JUnit3IdeaTestRunner.java:52) 
at com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:182) 
at com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:62) 
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
at java.lang.reflect.Method.invoke(Method.java:601) 
at com.intellij.rt.execution.application.AppMain.main(AppMain.java:120) 
Caused by: javax.naming.AuthenticationException: GSSAPI [Root exception is javax.security.sasl.SaslException: Final handshake failed [Caused by GSSException: Token had invalid integrity check (Mechanism level: Corrupt checksum in Wrap token)]] 
at com.sun.jndi.ldap.sasl.LdapSasl.saslBind(LdapSasl.java:168) 
at com.sun.jndi.ldap.LdapClient.authenticate(LdapClient.java:232) 
at com.sun.jndi.ldap.LdapCtx.connect(LdapCtx.java:2740) 
at com.sun.jndi.ldap.LdapCtx.<init>(LdapCtx.java:316) 
at com.sun.jndi.ldap.LdapCtxFactory.getUsingURL(LdapCtxFactory.java:193) 
at com.sun.jndi.ldap.LdapCtxFactory.getUsingURLs(LdapCtxFactory.java:211) 
at com.sun.jndi.ldap.LdapCtxFactory.getLdapCtxInstance(LdapCtxFactory.java:154) 
at com.sun.jndi.ldap.LdapCtxFactory.getInitialContext(LdapCtxFactory.java:84) 
at javax.naming.spi.NamingManager.getInitialContext(NamingManager.java:684) 
at javax.naming.InitialContext.getDefaultInitCtx(InitialContext.java:307) 
at javax.naming.InitialContext.init(InitialContext.java:242) 
at javax.naming.InitialContext.<init>(InitialContext.java:216) 
at javax.naming.directory.InitialDirContext.<init>(InitialDirContext.java:101) 
at *internal.code*.LDAPAuthenticator.getAttributeFor(LDAPAuthenticator.java:156) 
at *internal.code*.user.LDAPAuthenticator.access$000(LDAPAuthenticator.java:27) 
at *internal.code*.user.LDAPAuthenticator$1.run(LDAPAuthenticator.java:49) 
... 27 more 
Caused by: javax.security.sasl.SaslException: Final handshake failed [Caused by GSSException: Token had invalid integrity check (Mechanism level: Corrupt checksum in Wrap token)] 
at com.sun.security.sasl.gsskerb.GssKrb5Client.doFinalHandshake(GssKrb5Client.java:328) 
at com.sun.security.sasl.gsskerb.GssKrb5Client.evaluateChallenge(GssKrb5Client.java:187) 
at com.sun.jndi.ldap.sasl.LdapSasl.saslBind(LdapSasl.java:132) 
... 42 more 
Caused by: GSSException: Token had invalid integrity check (Mechanism level: Corrupt checksum in Wrap token) 
at sun.security.jgss.krb5.WrapToken_v2.getData(WrapToken_v2.java:151) 
at sun.security.jgss.krb5.WrapToken_v2.getData(WrapToken_v2.java:105) 
at sun.security.jgss.krb5.Krb5Context.unwrap(Krb5Context.java:983) 
at sun.security.jgss.GSSContextImpl.unwrap(GSSContextImpl.java:403) 
at com.sun.security.sasl.gsskerb.GssKrb5Client.doFinalHandshake(GssKrb5Client.java:234) 
... 44 more 

E 'possibile utilizzare AES128 con questa configurazione?

Se non riesco a far funzionare AES128, c'è un modo per impostare gli enctype predefiniti tramite un parametro di sistema (invece di usare krb5.conf)?

+1

Avete installato il JAR di sicurezza illimitato? –

+0

Non penso che sia necessario per AES a 128 bit, solo per AES a 256 bit, se non ricordo male. – rra

+0

Java genera un'eccezione di keysize non valida in genere quando è necessario JCE ma non è stato installato correttamente. –

risposta

0

Ascolta a James Cape, installa il file di sicurezza illimitato. A causa della giurisdizione degli Stati Uniti, il JRE non può essere spedito con quel JAR.

Problemi correlati