java active-directory websphere kerberos spnego

java - Problema de autenticación SPNEGO con contraseña



active-directory websphere (1)

He configurado mi aplicación para utilizar la autenticación Kerberos a través de SPNEGO con Websphere.

Aquí están los detalles

krb5.conf

[libdefaults] default_realm = ABC.MYCOMPANY.COM default_keytab_name = FILE:C:/IBM/WebSphere/AppServer/kerberos/MyServer.keytab default_tkt_enctypes = rc4-hmac des-cbc-md5 default_tgs_enctypes = rc4-hmac des-cbc-md5 forwardable = true renewable = true noaddresses = true clockskew = 300 [realms] ABC.MYCOMPANY.COM = { kdc = TEST.abc.mycompany.com:88 default_domain = mycompany.com } [domain_realm] .mycompany.com = ABC.MYCOMPANY.COM

login.conf

spnego-client { com.sun.security.auth.module.Krb5LoginModule required; }; spnego-server { com.sun.security.auth.module.Krb5LoginModule required storeKey=true useKeyTab=true keyTab="MyServer.keytab"; };

propiedades spnego

Spnego properties: spnego.allow.basic=false spnego.allow.localhost=false spnego.allow.unsecure.basic=false spnego.login.client.module=spnego-client spnego.login.server.module=spnego-server spnego.prompt.ntlm=false spnego.allow.delegation=true spnego.logger.level=1

Cuando accedo a mi aplicación, aparece el siguiente error

Config missing param value for: spnego.preauth.password Stack Trace : java.lang.NullPointerException: Config missing param value for: spnego.preauth.password at net.sourceforge.spnego.SpnegoAuthenticator$1.getInitParameter(SpnegoAuthenticator.java:218) at net.sourceforge.spnego.SpnegoFilterConfig.<init>(SpnegoFilterConfig.java:145) at net.sourceforge.spnego.SpnegoFilterConfig.getInstance(SpnegoFilterConfig.java:316) at net.sourceforge.spnego.SpnegoAuthenticator.<init>(SpnegoAuthenticator.java:206)

Comando para crear archivo keytab

C:/IBM/WebSphere/AppServer/java>ktpass -out c:/temp/MyServer.keytab -princ HTTP/[email protected] -mapUser wasMyServer -mapOp set -pass mypassword -crypto RC4-HMAC-NT -pType KRB5_NT_PRINCIPAL

No estoy usando la contraseña de Spnego, quiero que use keytab, no entiendo por qué está lanzando un error diciendo que falta param.


Si bien no etiquetó su pregunta con Active-Directory, debe ejecutarla porque está tratando de usar RC4-HMAC-NT, que solía ser el algoritmo de cifrado dominante para Microsoft Active Directory. Digo que solía ser, porque a partir de Windows Server 2008 R2, AES26-SHA1 se convirtió en el algoritmo de cifrado predeterminado. Dicho esto, la cuenta de Active Directory wasMyServer debe configurarse para cumplir con el protocolo Kerberos. Debe ser una cuenta de usuario, no una cuenta de equipo, de acuerdo con las instrucciones de configuración de WebSphere, y para darle la flexibilidad de ejecutar el servicio de Kerberized correctamente en el servidor de aplicaciones. Dicho esto, en la pestaña "Cuenta" para la cuenta de usuario "wasMyServer":

  1. Asegúrese de que todas las opciones de cuenta (excepto que la contraseña nunca caduque) están desmarcadas.
  2. Asegúrese de que el SPN HTTP / TEST.abc.mycompany.com esté asignado a la cuenta.

Referencia: administración de SPNEGO dentro de WebSphere Application Server: sugerencias sobre el uso de los nombres principales del servicio Kerberos

EDICIONES:

KRB5.CONF

Parece que hay un problema dentro de su krb5.conf. Solo tiene estas dos líneas que muestran como compatibles RC4-HMAC:

default_tkt_enctypes = rc4-hmac des-cbc-md5 default_tgs_enctypes = rc4-hmac des-cbc-md5

Para habilitar completamente el tipo de cifrado RC4-HMAC, agregue la línea adicional debajo:

permitted_enctypes = rc4-hmac des-cbc-md5

(Como nota al margen, nadie usa el tipo de cifrado des-cbc-md5, pero lo dejé allí)

El nombre de dominio DNS debe ser coherente en todo este archivo. Para simplificar, el nombre de dominio DNS y el nombre de dominio Kerberos deben coincidir (aparte del nombre de dominio Kerberos que se especifica en el caso MAYÚSCULAS). No tienen que coincidir, pero dificulta la resolución de problemas de órdenes de magnitud cuando no coinciden.

Como ha aclarado que su nombre de dominio AD es abc.mycompany.com , le sugiero que use un archivo krb5.conf que se ve así:

[libdefaults] default_realm = ABC.MYCOMPANY.COM default_keytab_name = FILE:C:/IBM/WebSphere/AppServer/kerberos/MyServer.keytab default_tkt_enctypes = rc4-hmac des-cbc-md5 default_tgs_enctypes = rc4-hmac des-cbc-md5 permitted_enctypes = rc4-hmac des-cbc-md5 forwardable = true renewable = true noaddresses = true clockskew = 300 [realms] ABC.MYCOMPANY.COM = { kdc = TEST.abc.mycompany.com:88 default_domain = abc.mycompany.com } [domain_realm] .abc.mycompany.com = ABC.MYCOMPANY.COM abc.mycompany.com = ABC.MYCOMPANY.COM

Referencia: comunicaciones seguras utilizando algoritmos de encriptación más sólidos

SPNs

Todos los SPN deben ser únicos dentro de cualquier reino de Kerberos. En el caso de un SPN duplicado, ejecute el siguiente comando para buscar las cuentas AD a las que se registran los SPN duplicados y elimine el SPN de la cuenta en la que no se está utilizando el SPN. La sugerencia para eso es que el SPN de la cuenta de AD con la que se generó la tabla de claves es el único lugar donde debe registrarse el SPN. Por lo tanto, en este caso, solo la cuenta de AD wasMyServer debe tener el SPN HTTP / TEST.abc.mycompany.com . Para buscar todos los SPN duplicados en el Directorio, ejecute lo siguiente en un Shell de comandos de Windows en una computadora unida al dominio AD:

setspn -X

El resultado mostrará una lista de todas las cuentas de AD a las que se registran SPN duplicados, y usted puede tomar medidas correctivas de acuerdo con mi orientación. El comando:

setspn -D HTTP/TEST.abc.mycompany.com wasMyServer

... eliminará un SPN duplicado de un nombre de cuenta AD. O puede eliminarlo dentro de la GUI AD Users and Computers también. Ejecute el comando anterior para limpiar la cuenta de AD cada vez justo antes de volver a crear la tabla de claves.

Keytab

  1. Reinicie el servicio de aplicación WebSphere en cualquier momento que reemplace la tabla clave.
  2. Valide la tabla de claves en el servidor WAS ejecutando el siguiente comando. La validación extrae un ticket de Kerberos del KDC, por lo tanto, si tiene éxito, significa que no hay ningún problema con la tabla de claves.

kinit -k -t MyServer.keytab HTTP / TEST.abc.mycompany.com

Nota: kinit no viene con Windows, pero sí viene con Java JRE / JDK, por lo que necesita colocar una copia de la tabla de claves en el mismo directorio donde existe kinit o asegurarse de que <JAVA HOME> esté en el sistema PATH en para ejecutar el comando con éxito.

Navegador web

Asegúrese de que su navegador web esté configurado para enviar credenciales de Windows (esencialmente, un token SPNEGO que contenga un vale de servicio Kerberos) al servidor de aplicaciones automáticamente. Para hacer esto, siga las instrucciones a continuación.

Explorador de Internet:

  1. Abra el cuadro de diálogo Opciones de Internet seleccionando Opciones de Internet desde el Panel de control o desde el menú Herramientas en Internet Explorer.
  2. En el cuadro de diálogo Opciones de Internet, en la pestaña Seguridad, seleccione Intranet local y luego haga clic en Nivel personalizado.
  3. En el cuadro de diálogo Configuración de seguridad, en Inicio de sesión, seleccione "Inicio de sesión automático solo en la zona de Intranet" y luego haga clic en Aceptar.
  4. En el cuadro de diálogo Opciones de Internet en la pestaña Configuración de seguridad con la Intranet local aún seleccionada, haga clic en Sitios.
  5. En el cuadro de diálogo Intranet local, haga clic en Avanzado.
  6. En el siguiente cuadro de diálogo (también denominado Intranet local), escriba la URL de su sitio web (por ejemplo, http://test.abc.mycompany.com ) en el cuadro "Agregar este sitio web a la zona", y luego haga clic en Agregar.
  7. En el cuadro de diálogo Intranet local, haga clic en Aceptar.
  8. En el cuadro de diálogo Intranet local original, haga clic en Aceptar.
  9. En la pestaña Avanzado, asegúrese de que esté habilitada la opción "Habilitar la autenticación integrada de Windows" (este es el valor predeterminado).
  10. En el cuadro de diálogo Opciones de Internet, haga clic en Aceptar.

Referencia: configuración de Internet Explorer para inicio de sesión automático