Estoy usando spnego ( http://spnego.sourceforge.net ) para la autenticación kerberos en JBoss.

Necesito descifrar ticket de kerberos para acceder a la autorización de datos que va a contener PAC de datos. El PAC de datos se necesitan para decidir qué funciones deben ser otorgados al usuario.

Cómo acceder y descifrar el ticket de kerberos? He buscado en red para los ejemplos, pero sin esfuerzo.

¿Que quiere decir esto, «en realidad, soy de pruebas de la solución para comprobar, si es que no se adaptan a un solo formato específico de token solo.» Lo que es único formato específico?
Así, el código de JaasLounge, y otras muestras de internet aún no ha’ trabajado. No reconoce la estructura de la entrada. Cuando se utiliza JaasLounge, tengo mensajes tales como «DERSequence no se espera que de aquí».
Lo que estamos viendo aquí? Esto es una indicación de una solución a su propia pregunta? O es más preguntas cuando tratando de resolver?
Me he respondido a mi propia pregunta en la pregunta. Este fue mi comienzo de mi aventura con LO mismo, ahora puedo corregir este antipattern – he publicado mi solución como de respuestas separada.

OriginalEl autor Danubian Sailor | 2010-12-22

5 Comentarios

  1. 8

    Estos chicos tienen una completa PAC decodificación de aplicación:

    http://jaaslounge.sourceforge.net/

    Puede utilizar el token analizador como este:

    HttpServletRequest request = (HttpServletRequest) req;
    String header = request.getHeader("Authorization");
    byte[] base64Token = header.substring(10).getBytes("UTF-8");
    byte[] spnegoHeader = Base64.decode(base64Token);
    
    SpnegoInitToken spnegoToken = new SpnegoInitToken(spnegoHeader);

    Vas a tener que saltar aunque algunos aros si desea descifrar el subyacente ticket de Kerberos. No está seguro si necesita que.

    Subvención

    He descargado este jaaslounge con fuentes, pero no he encontrado ninguna manera de extraer el ticket de kerberos de este SpnegoInitToken.
    «Vas a tener que saltar aunque algunos aros si desea descifrar el subyacente ticket de Kerberos. No está seguro si necesita eso». — Esta es la razón por la que me dijo eso. Se requiere código adicional para obtener el ticket de Kerberos. Voy a ofrecer un seguimiento de la respuesta.
    Bueno, sí que fueron rigth, tienen pleno PAC decodificación de la aplicación. Sin embargo, su código para el análisis de todo el token de kerberos no funciono y tuve que escribir yo mismo. Después de que lo tengo encriptado parte y descifrado, me he pasado a KerberosEncData, lo que hace el resto del trabajo.

    OriginalEl autor Grant Cermak

  2. 8

    He utilizado con éxito el servlet filtro de http://spnego.sourceforge.net en combinación con el PAC analizador de http://jaaslounge.sourceforge.net/ sin la necesidad de hacer algo de forma explícita con DER/ASN.1 analizadores :

    También he escrito un nuevo HttpFilter (bifurcada de spnego.sf.net): spnego-pac, que revela la LogonInfo a través de la getUserPrincipal().

    Un proyecto de ejemplo que demuestra el código de arriba en completa se puede encontrar aquí:

    https://github.com/EleotleCram/jetty-spnego-demo

    Spnego-pac filtro (utilizado en el ejemplo anterior) se puede encontrar aquí:

    https://github.com/EleotleCram/spnego.sf.net-fork

    Espero que esto sea útil a alguien.

    __

    Marcel

    OriginalEl autor eleotlecram

  3. 5

    Si usted consigue el mecanismo de token de la spnegoToken como este:

    El mecanismo de token es generalmente un KerberosApRequest. Hay un KerberosToken constructor que toma un KerberosApRequest. Basta con pasar el mechanismToken matriz de bytes junto con la clave para descifrar el contenido.

    Te refieres a la clase de sol.de seguridad.jgss.spnego.SpNegoToken? Por desgracia, esta clase no se utiliza en el proyecto en el que estoy trabajando, se basa en la org.ietf.jgss.GSSCredential de la interfaz. No lo estoy usando de forma manual, pero utilizando la utilidad neta.sourceforge.spnego.SpnegoAuthenticator.
    No, estoy hablando de la SpnegoInitToken spnegoToken = new SpnegoInitToken(spnegoHeader); en el código que puse en la respuesta anterior. Este – org.jaaslounge.la decodificación.spnego.SpnegoInitToken y org.jaaslounge.la decodificación.kerberos.KerberosApRequest
    Lo he probado y no funciona. La construcción de KerberosAsRequest falla, porque es expection DERSequence, y el contenido de mechanismToken es DERApplicationSpecific.
    ¿Qué versión de bouncycastle estás usando? Creo que hay un error en algunas versiones de la misma. Usted necesidad de utilizar las últimas (1.45): repo2.maven.org/maven2/org/bouncycastle <groupId>org.bouncycastle</groupId> <artifactId>bcprov-jdk16</artifactId> <versión>1.45</versión / >

    OriginalEl autor Grant Cermak

  4. 5

    Puedo ofrecer mi propia solución para el problema:

    He basado mi solución en BouncyCastle de la biblioteca (para el análisis de las partes de token) y JaasLounge (descifrado y cifrado parte de token). Por desgracia, el código para la decodificación de todo el token spnego de JaasLounge fallado para mis necesidades. Tuve que escribir yo mismo.

    He decodificado billete parte por parte, en primer lugar, la construcción de DERObjects de byte[] matriz:

    La untag() es mi función auxiliar, para quitar DERTaggedObject envolver

    Para la extracción de la secuencia de DERObject de DERObject he escrito otra función auxiliar:

    Al final, cuando tengo DEROctetStream, que contenía cifrado parte, yo he usado KerberosEncData:

    La secuencia de bytes que recibimos desde el navegador del cliente se analiza en una sola DERApplicationSpecific
    que es un billete raíz de nivel 0.

    La raíz contiene:

    • DERObjectIdentifier – SPNEGO OID
    • DERSequence – nivel 1

    Nivel 1 contiene:

    • SECUENCIA de DERObjectIdentifier – mech tipos
    • DEROctetString – envuelto DERApplicationSepecific – nivel 2

    Nivel 2 contiene:

    • DERObjectIndentifier – Kerberos OID
    • KRB5_AP_REQ etiqueta 0x01 0x00, se analiza como boolean (false)
    • DERApplicationSpecific – contenedor de DERSequence – nivel 3

    Nivel 3 contiene:

    • número de versión – debe ser de 5
    • tipo de mensaje – 14 (AP_REQ)
    • AP opciones (DERBITString)
    • DERApplicationSpecific – envuelto DERSequence con billete parte
    • DERSeqeuence con boleto adicional de la parte – no procesados

    Billete parte – nivel 4 contiene:

    • Billete de versión debe ser de 5
    • Billete reino – el nombre de la esfera en la que el usuario es autenticado
    • DERSequence de servidor de nombres. Cada nombre de servidor es DERSequence de 2 cadenas:
      nombre del servidor y el nombre de la instancia
    • DERSequence con cifrado parte

    Cifrado parte de la secuencia (nivel 5) contiene:

    • Algoritmo usado número de
      • 1, 3 – DES
      • 16 – des3-cbc-sha1-kd
      • 17 – ETYPE-AES128-CTS-HMAC-SHA1-96
      • 18 – ETYPE-AES256-CTS-HMAC-SHA1-96
      • 23 – RC4-HMAC
      • 24 – RC4-HMAC-EXP
    • Número de versión de clave
    • Cifrado parte (DEROctetStream)

    El problema era con DERBoolean constructor, que tirar ArrayIndexOutOfBoundException, cuando la secuencia de 0x01 0x00 fue encontrado. He tenido que cambiar a ese constructor:

    KerberosEncData (al menos la versión que yo sepa) parece lanzar un GeneralSecurityException("Unsupported encryption type.") cuando el algoritmo de número no es 3 o 23. ¿Cómo manejar los otros algoritmos? O aun no se ejecuta en este tema?
    Yo estaba luchando mucho con este código, el uso de ingeniería inversa con WireShark, hasta que se ha trabajado para el dominio específico de que estaba utilizando. No he corrido en este tipo de problemas, y el código fue escrito hace tiempo. Pero originalmente he puesto la respuesta a la pregunta, lo que estaba mal y me estoy corrigiendo ahora. La respuesta es, por tanto, no es nuevo.

    OriginalEl autor Danubian Sailor

  5. 2

    Wow sido un tiempo desde que he usado spnego (casi un año) … Usted está haciendo una muy buena pregunta.

    Me hice un poco de investigación y se va a tratar y ejecutar algún código que he tenido desde hace un tiempo que estaba trabajando con MS-AD, pero no se sienten hoy en día :-/

    De todos modos, he encontrado este enlace a través de google:
    http://www.google.com/url?sa=t&source=web&cd=1&sqi=2&ved=0CBMQFjAA&url=http%3A%2F%2Fbofriis.dk%2Ffiles%2Fms_kerberos_pac.pdf&rct=j&q=java%20kerberos%20privilege%20attribute%20certificate&ei=2FASTbaLGcP38Abk07iQDg&usg=AFQjCNHcIfQRUTxkQUvLRcgOaQksCALTha&sig2=g8yn7ie1PbzSkE2Mfv41Bw&cad=rja

    Espero que eso puede dar una idea.

    Además, trate esto como una búsqueda de google: GSSContext «PAC»
    El enlace no funciona.

    OriginalEl autor Dave G

Dejar respuesta

Please enter your comment!
Please enter your name here