Saltar al contenido

Autenticación Kerberos en SQL Server

Esta guía describe cómo configurar una conexión de base de datos para autenticar con Microsoft SQL Server utilizando la autenticación de caché de tickets Kerberos (kinit).

Nota

Esta configuración es compatible solo con agentes privados de Jitterbit.

Nota

El comportamiento de la autenticación Kerberos y SQL Server puede variar dependiendo de la configuración de su Active Directory de Microsoft, la resolución DNS, el enrutamiento de red y otros factores específicos del entorno.

Requisitos previos

Antes de comenzar, asegúrese de que lo siguiente esté en su lugar:

  1. Un agente privado de Jitterbit.

  2. Acceso a la red a lo siguiente:

  3. Una cuenta de usuario válida de Active Directory.

  4. Un Nombre de Principal de Servicio (SPN) configurado en Active Directory para SQL Server en el siguiente formato:

     MSSQLSvc/<SQL_SERVER_HOST>:<PORT>
    

Paso 1: Asegurar la resolución DNS al KDC

Kerberos requiere una resolución DNS adecuada para localizar el KDC.

Linux

En algunos entornos, puede ser necesario ajustar el DNS. Reemplace los siguientes marcadores de posición con sus valores:

  • <AD_DNS_IP>: El servidor DNS que puede resolver el dominio de Active Directory.
  • <SECONDARY_DNS_IP>: Un servidor DNS de respaldo opcional.

Esta es una configuración temporal. Ejecute estos comandos nuevamente cada vez que se reinicie el contenedor:

cat > /etc/resolv.conf <<EOF
nameserver <AD_DNS_IP>
nameserver <SECONDARY_DNS_IP>
EOF

Windows

Si el dispositivo que ejecuta el agente privado de Windows ya está unido al mismo dominio que el KDC, no se necesita ninguna configuración adicional. De lo contrario, agregue las entradas requeridas a C:\Windows\System32\drivers\etc\hosts para que el dispositivo pueda resolver los nombres de host del KDC y de SQL Server.

Paso 2: Instalar utilidades del cliente Kerberos

Linux

El host del agente privado debe tener instaladas las herramientas de Kerberos. Estas herramientas son necesarias para crear la caché de tickets y para validar la comunicación con el KDC y la creación de tickets de servicio.

Ejecuta los siguientes comandos para instalar krb5-user:

apt-get update
apt-get install krb5-user

Esto instala lo siguiente:

  • kinit
  • klist
  • Bibliotecas de Kerberos

Windows

Las herramientas de Kerberos están disponibles de forma nativa en Windows. Si no están instaladas, descárgalas desde https://ist.mit.edu/mit-apps/kerberos-win.

Paso 3: Probar la resolución DNS

Verifica que el agente pueda resolver el nombre del host del KDC.

Linux

Ejecuta el siguiente comando para instalar utilidades DNS:

apt-get update
apt-get install dnsutils

Luego prueba la resolución DNS:

nslookup <DOMAIN_CONTROLLER_HOSTNAME>

Ejemplo

nslookup ad.dev.local

Windows

Ejecuta el siguiente comando para probar la resolución de nombres:

ping <DOMAIN_CONTROLLER_HOSTNAME>

Ejemplo

ping ad.dev.local

Si la resolución falla, la autenticación de Kerberos no funcionará.

Paso 4: Crear el archivo de configuración de Kerberos (krb5.conf)

Linux

Utiliza el siguiente comando para crear o editar el archivo de configuración en /etc/krb5.conf:

vi /etc/krb5.conf

Contenido de ejemplo

[libdefaults]
default_realm = DEV.LOCAL
rdns = false
dns_lookup_kdc = false
dns_lookup_realm = false
[realms]
DEV.LOCAL = {
kdc = ad.dev.local
admin_server = ad.dev.local
}
[domain_realm]
.dev.local = DEV.LOCAL
dev.local = DEV.LOCAL

Windows

Crea el archivo krb5.conf utilizando la misma estructura mostrada arriba. Elige una ubicación a la que el agente privado pueda acceder sin requerir privilegios elevados, como:

C:\Jitterbit\kerberos

Parámetros de configuración

[libdefaults]

  • default_realm: El nombre del dominio de Active Directory en mayúsculas.
  • rdns = false: Previene problemas de búsqueda inversa de DNS.
  • dns_lookup_kdc = false: Desactiva el descubrimiento automático del KDC a través de DNS.
  • dns_lookup_realm = false: Desactiva el descubrimiento automático del reino a través de DNS.

[realms]

  • kdc: El nombre del host del controlador de dominio.
  • admin_server: El controlador de dominio para operaciones administrativas.

[domain_realm]

Asocia dominios DNS con el reino de Kerberos.

Paso 5: Crear el archivo de configuración JAAS

La autenticación de Kerberos requiere un archivo de configuración del Servicio de Autenticación y Autorización de Java (JAAS).

Linux

Ejecuta el siguiente comando para crear el directorio:

mkdir -p /opt/jitterbit/kerberos

Ejecuta el siguiente comando para crear el archivo de configuración:

vi /opt/jitterbit/kerberos/jaas.conf

Contenido de ejemplo

com.sun.security.jgss.krb5.initiate {
com.sun.security.auth.module.Krb5LoginModule required
useTicketCache=true
useKeyTab=false
storeKey=false
isInitiator=true
doNotPrompt=true
renewTGT=false
debug=true
refreshKrb5Config=true;
};

SQLJDBCDriver {
com.sun.security.auth.module.Krb5LoginModule required
useTicketCache=true
useKeyTab=false
storeKey=false
isInitiator=true
doNotPrompt=true
renewTGT=false
debug=true
refreshKrb5Config=true;
};

Windows

Crea el archivo jaas.conf utilizando la misma estructura mostrada arriba. Elige una ubicación a la que el agente privado pueda acceder sin requerir privilegios elevados, como:

C:\Jitterbit\kerberos

Referencia de parámetros JAAS

  • useTicketCache=true: Utiliza el ticket de Kerberos obtenido a través de kinit.
  • useKeyTab=false: No utiliza un archivo keytab.
  • storeKey=false: No almacena una clave secreta.
  • isInitiator=true: Configura este cliente como el iniciador de la autenticación.
  • doNotPrompt=true: No solicita una contraseña.
  • renewTGT=false: No renueva automáticamente el Ticket Granting Ticket (TGT).
  • debug=true: Habilita los registros de depuración de Kerberos. (Opcional)
  • refreshKrb5Config=true: Recarga la configuración de Kerberos dinámicamente.

Establecer permisos de archivo (solo Linux)

La autenticación de Kerberos requiere permisos de archivo adecuados para funcionar correctamente. Si los archivos no son legibles, la autenticación fallará con el siguiente error:

Could not initialize class com.microsoft.sqlserver.jdbc.KerbAuthentication

Ejecuta los siguientes comandos para establecer los permisos requeridos:

chmod 644 /opt/jitterbit/kerberos/jaas.conf
chmod 644 /etc/krb5.conf
chmod 644 /tmp/krb5cc_agent

Paso 6: Configurar Tomcat (setenv.sh)

Linux

Utiliza el siguiente comando para abrir el script de inicio de Tomcat en /opt/jitterbit/tomcat/bin/setenv.sh:

vi /opt/jitterbit/tomcat/bin/setenv.sh

Contenido de ejemplo

#!/bin/sh
JAVA_OPTS="$JAVA_OPTS \
-Djava.security.krb5.conf=/etc/krb5.conf \
-Dsun.security.jgss.native=true \
-Djava.security.auth.login.config=/opt/jitterbit/kerberos/jaas.conf \
-Dsun.security.krb5.debug=true \
-Djavax.security.auth.useSubjectCredsOnly=false"

export KRB5CCNAME=/tmp/krb5cc_agent
export JAVA_OPTS

Windows

Para el agente privado de Windows, no es necesario crear un archivo setenv.sh. En su lugar, agrega los parámetros JAVA_OPTS mostrados arriba siguiendo las instrucciones en Configurar opciones de Java para agentes privados.

Al configurar KRB5CCNAME, toma nota de la ruta, ya que necesitarás especificarla nuevamente en Paso 8 al crear la caché de tickets.

Si la prueba de conexión devuelve un error que menciona jgss o gss, prueba lo siguiente:

  1. Elimina el parámetro -Dsun.security.jgss.native=true.
  2. Agrega udp_preference_limit = 1 a la sección [libdefaults] de krb5.conf.
  3. Reinicia el agente para que los cambios surtan efecto.

Referencia de parámetros

  • java.security.krb5.conf: La ruta al archivo de configuración de Kerberos.
  • sun.security.jgss.native=true: Habilita la implementación nativa de los Servicios de Seguridad Genéricos (GSS).
  • java.security.auth.login.config: La ruta al archivo de configuración de JAAS.
  • sun.security.krb5.debug=true: Habilita los registros de depuración de Kerberos (opcional).
  • javax.security.auth.useSubjectCredsOnly=false: Permite el uso de credenciales externas.

Paso 7: Reiniciar el agente privado

Después de cualquier cambio de configuración, reinicia el agente privado.

Linux

Ejecuta el siguiente comando para reiniciar el agente:

sudo jitterbit restart

Si usas un agente de Docker, reinicia el contenedor:

docker restart <CONTAINER_NAME>

Después de reiniciar, repite Paso 1.

Windows

Para reiniciar el agente privado de Windows, utiliza los accesos directos de detener y comenzar creados durante la instalación del agente:

Detener Servicios de Jitterbit
Iniciar Servicios de Jitterbit

Paso 8: Obtener un ticket de Kerberos

Esta configuración utiliza una caché de tickets de Kerberos, que es dependiente del usuario. Los siguientes comandos crean una caché de tickets a la que Tomcat accede en tiempo de ejecución. Es posible que se te pida que ingreses una contraseña.

Linux

Ejecuta el siguiente comando para crear la caché de tickets:

kinit -c /tmp/krb5cc_agent <USER>@<REALM>

Verifica que el ticket fue creado:

klist -c /tmp/krb5cc_agent

Windows

En Windows, utiliza la misma ruta especificada para KRB5CCNAME en Paso 6.

Ejecuta el siguiente comando para crear la caché de tickets:

kinit -c <TICKET_CACHE_PATH> <USER>@<REALM>

Verifica que el ticket haya sido creado:

klist -c <TICKET_CACHE_PATH>

Si no aparece ningún ticket, la autenticación fallará.

Nota

Los tickets de Kerberos expiran. Ejecuta kinit nuevamente para renovar el ticket según sea necesario.

Paso 9: Configurar la conexión a la base de datos

Configura la conexión a la base de datos con los siguientes ajustes:

  1. Tipo de controlador: Selecciona JDBC.
  2. Controlador: Selecciona SQL Server (Microsoft).
  3. Nombre del servidor: Ingresa el nombre, URL o dirección IP del SQL Server.
  4. Nombre de la base de datos: Ingresa el nombre de la base de datos de destino.
  5. Inicio de sesión y Contraseña: Deja estos campos en blanco.
  6. En Ajustes opcionales, selecciona la casilla Usar cadena de conexión e ingresa lo siguiente:

    jdbc:sqlserver://<SQL_SERVER_HOST>:<PORT>;databaseName=<DATABASE>;integratedSecurity=true;authenticationScheme=JavaKerberos;encrypt=false
    

Configura la cadena de conexión utilizando los siguientes valores:

  • <SQL_SERVER_HOST>: El nombre de dominio completamente calificado (FQDN) del SQL Server.
  • <PORT>: El número de puerto del SQL Server, típicamente 1433.
  • <DATABASE>: El nombre de la base de datos de destino.
  • encrypt: Establecer en true o false dependiendo de tu entorno.
  • trustServerCertificate=true: Requerido si se utiliza la Seguridad de Capa de Transporte (TLS) sin una autoridad de certificación (CA) confiable.