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:
-
Un agente privado de Jitterbit.
-
Acceso a la red a lo siguiente:
-
Un Controlador de Dominio de Active Directory (Centro de Distribución de Claves, o KDC).
-
El host de SQL Server.
-
-
Una cuenta de usuario válida de Active Directory.
-
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:
kinitklist- 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 dekinit.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:
- Elimina el parámetro
-Dsun.security.jgss.native=true. - Agrega
udp_preference_limit = 1a la sección[libdefaults]dekrb5.conf. - 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:
- Tipo de controlador: Selecciona JDBC.
- Controlador: Selecciona SQL Server (Microsoft).
- Nombre del servidor: Ingresa el nombre, URL o dirección IP del SQL Server.
- Nombre de la base de datos: Ingresa el nombre de la base de datos de destino.
- Inicio de sesión y Contraseña: Deja estos campos en blanco.
-
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ípicamente1433.<DATABASE>: El nombre de la base de datos de destino.encrypt: Establecer entrueofalsedependiendo de tu entorno.trustServerCertificate=true: Requerido si se utiliza la Seguridad de Capa de Transporte (TLS) sin una autoridad de certificación (CA) confiable.