2012-03-02 10 views
5

estoy migrando desde Java 6 a Java 7 y estoy corriendo en un problema con la autenticación Kerberos. Me parece que el orden del tipo de cifrado subyacente está cambiado y, como resultado, se utiliza un tipo de cifrado diferente. En este caso, Aes128CtsHmacSha1EType se está utilizando para una parte de la transacción cuando se ejecuta Java 7. ArcFourHmacEType se usa cuando se ejecuta Java 6 y para la otra parte de la ejecución de Java 7.Java 7 Kerberos Edición - AES128 suma de comprobación corrupto

Otros detalles: se ejecuta en Linux (Fedora 16) contra un servidor de Active Directory de Windows.

Sé que puedo hacer que la autenticación funcione si configuro los parámetros default_tkt_enctypes, default_tgs_enctypes, permitted_enctypes en el archivo krb5.conf; sin embargo, me gustaría que funcione sin tener ningún archivo y, de ser posible, sin tener que forzar uno o dos enigmas.

Aquí está el mensaje de error que estoy recibiendo:

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 

¿Es posible utilizar AES128 con esta configuración?

Si no puedo conseguir AES128 a trabajar, ¿hay una manera de establecer las enctypes por defecto a través de un parámetro del sistema (en lugar de utilizar krb5.conf)?

+1

¿Tiene instalado el JAR seguridad ilimitada? –

+0

No creo que deba necesitar eso para AES de 128 bits, solo para AES de 256 bits, si no recuerdo mal. – rra

+0

Java lanza una excepción de tamaño de clave ilegal normalmente cuando necesita JCE pero no lo tiene instalado correctamente. –

Respuesta

0

Escuchar James Cabo, instale el archivo de seguridad ilimitada. Debido a la jurisdicción de EE. UU., El JRE no se puede enviar con ese JAR.

Cuestiones relacionadas