java spnego gssapi sspi negotiate

¿Cómo hace la gente para que el cliente Java SPNEGO funcione en Windows?



gssapi sspi (2)

Ahora hay una solución realmente buena para esto incluida en el Cliente HTTP de Apache, usando JNA para obtener el ticket de la API SSPI nativa. Vea esta respuesta:

https://stackoverflow.com/a/22865583/381161

Para realizar la autenticación HTTP SPNEGO del lado del cliente con Java en Windows, debe configurar la clave de registro de Windows allowtgtsessionkey . Esto está bien documentado. Lo que no entiendo es cómo la gente se las arregla para esto? La mayoría de los sitios corporativos nunca aceptarían cambiar esta clave de registro en Windows por una sola pieza de software. También piense en la molestia si esto necesita cambiarse en cada estación de trabajo de la organización. Pero eso es solo una teoría porque hasta ahora no he podido convencer a ninguno de nuestros clientes de cambiar esta clave de registro.

No los culpo. La mayoría de los administradores corporativos verían esto relajando la seguridad y, por lo tanto, se opondrán.

He leído esto: ¿Existe alguna forma en Java o en una línea de comandos para obtener un ticket de Kerberos para un servicio utilizando la API SSPI nativa?

pero ahora es bastante viejo.

Así que realmente no entiendo cómo las personas pueden hacer que Windows + Java client + Kerberos funcione en cualquier cosa que no sea en entornos universitarios, usuarios domésticos y similares.

La pregunta que recibo de los administradores corporativos es "¿por qué necesitamos configurar esta clave de registro cuando las aplicaciones como IE y Firefox no tienen problemas para hacer SPNEGO sin configurar esta clave?". Bueno, ya sé cuál es la respuesta. Es porque (lo más probable) las aplicaciones como IE y Firefox se basan en la API GSS (SSPI) nativa de Windows, mientras que Java de Sun utiliza su propia implementación.

Supongo que usar algo como WAFFLE resolvería el problema pero preferiría una solución Java pura. También asumo que no ayudará usar soluciones basadas en Java como Spring Security o Apache HttpClient, ya que todas ellas estarán sufriendo este problema.

Cualquier ayuda o sugerencias serán bienvenidos.

ACTUALIZACIÓN1 :

He encontrado que hay una RFE para esto en la base de datos de errores de Oracle. También hay un parche enviado al respecto por un empleado de Oracle y discusiones en la lista de correo de JDK sobre esta característica . No me hace mucho más sabio, aparte de lo que puedo entender, esto no está disponible en Java 7 actual, ni siquiera como experimental. ¿Derecha?

ACTUALIZACIÓN2 :

La pregunta está ahora viva nuevamente en la lista de correo de OpenJDK Security Dev.


Gracias por hacer referencia a mi hilo en la lista de correo de security-dev ;-) Mi objetivo a mediano plazo es hacer que este parche esté disponible para Java 6+ a través de la ruta de clase aprobada. Quizás te interese este boleto de WAFFLE que he creado recientemente: https://github.com/dblock/waffle/issues/50

También he evaluado WAFFLE, pero no es tan similar a Java-GSS que uno tiene que crear código duplicado, esto es algo que quiero evitar por todos los medios.

Todo este problema no es exactamente culpa de Oracle. Microsoft simplemente está bloqueando cualquier llamada al ticket de sesión a través de la función CallPackage LSA. El pretexto es la seguridad. Realmente me gustaría saber cómo SSPI puede crear un ticket de servicio cuando no puedo acceder al TGT de manera razonable. Por lo tanto, tal solución de código cerrado apesta.

Ahora mismo, en este momento, solo tienes tres opciones:

  1. Obtener el TGT de nuevo a través de medios Java
  2. Intenta WAFFLE
  3. Escribir código personalizado

He guardado la clave de registro de mierda porque de todos modos no funciona para el administrador local con cuentas de dominio. En mi caso, el desarrollador de Tomcat en Windows he recurrido para llamar kinit de Java mientras tanto.