java active-directory kerberos gssapi

Autenticación Java contra Active Directory, ¿falta de coincidencia de autenticación?



active-directory kerberos (3)

Debe acceder a la cuenta del usuario y marcar la casilla de verificación ''use kerberos DES encryption types''.

Tendrá que iniciar sesión en su DS como administrador para hacer esto, por supuesto.

Así que tengo un código que estoy probando para asegurarme de que funciona bien para la autenticación. Funciona bien contra Kerberos recta, así que pensé que solo debería haber algunos contratiempos menores con AD. Desafortunadamente, no puedo evitar una KrbException: KDC no tiene soporte para el tipo de cifrado (14).

Sé que el error es una discrepancia en el tipo de encriptación. Pero puedo relacionarme bien, solo en el código me toco un problema. No estoy configurando nada, así que creo que debería heredar los mismos valores predeterminados que Kinit, pero obviamente ese no es el caso.

El código-

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();

y el jaas.conf

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

Y, el seguimiento de pila

>>>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


Entonces, lo tengo más allá de esta etapa. Solo puedo adivinar que el soporte de DES en el directorio activo para Windows Server 2012 está roto, ya que terminé retocando mi archivo krb5.conf y estableciendo los dos tipos de tickets predeterminados y tipos permitidos en solo aes256-cts-hmac-sha1-96 y funcionó para un usuario. Después de habilitar aes256 para otros usuarios en AD, continuó funcionando.


Mirando init() en KDCRep.java , la única parte que parece que podría arrojar tu error es:

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 }

Parece un poco extraño que el error se imprima como una KrbException , pero podría funcionar, ya que KrbApErrException es una subclase de KrbException . init() no puede lanzar ninguna otra subclase de KrbException , sin embargo.

Rasca eso. Una mejor posibilidad es que sea una de las Asn1Exception s allí, ya que el constructor en KrbAsRep.java detecta y vuelve a lanzar esos errores como KrbException s (con un initCause apropiado que coincidiría bastante bien con el seguimiento de la pila).

"Identifier doesn''t match expected value (906)" me lleva a creer que está lanzando una Asn1Exception(Krb5.ASN1_BAD_ID) , ya que Krb5.ASN1_BAD_ID tiene un valor de 906 . Eso no es demasiado útil, ya que parece ser el error predeterminado en init() .

Vea si puede generar el DerValue correspondiente a su configuración e inspeccionarlo manualmente, viendo donde init() lo rechazaría, luego retroceda desde allí, mirando qué parte de su configuración creó los bits erróneos.

Tras una inspección adicional, el mensaje "KDC has no support for encryption type" me lleva a creer que Krb5.KDC_ERR_ETYPE_NOSUPP debe haber sido utilizado. Pero, como eso solo se usa para la instancia predeterminada de Etype , eso podría no significar mucho.