Cómo generar un archivo de tabla de claves para la autenticación Kerberos en Active Directory

Gestionar archivos keytab de Kerberos en entornos Linux, o incluso en ciertas configuraciones de Windows, puede ser un verdadero engorro al intentar automatizar la autenticación de servicios. Básicamente, un keytab es como un protocolo de enlace secreto: contiene claves cifradas que permiten a los servicios autenticarse sin solicitar contraseña constantemente. Si alguna vez has intentado configurar un servicio (por ejemplo, nginx o apache) con Active Directory y no funciona, es probable que se deba a que el keytab no está configurado correctamente o a que el SPN (nombre principal del servicio) no está enlazado correctamente. Este proceso puede parecer bastante intimidante al principio, sobre todo porque Windows no ofrece herramientas sencillas para acceder a un keytab sin complicaciones. Aun así, con algunos comandos y una comprensión de su funcionamiento, se vuelve mucho menos frustrante.

Nuestro objetivo es generar un archivo keytab para una cuenta de servicio o un objeto de máquina, vincular el SPN correcto y garantizar que el servicio pueda autenticarse sin problemas con Kerberos. Un keytab funcional permite una autenticación más fluida y sin contraseña, lo cual resulta práctico para tareas cron, servidores web o cualquier dispositivo que necesite comunicarse de forma segura en segundo plano. Por lo tanto, si su servicio no funciona con Kerberos porque el keytab no está presente o está mal configurado, esta guía le ayudará a encontrar una solución.

Cómo crear y administrar archivos de claves Kerberos para servicios de AD

Creación de un usuario de AD para la autenticación Kerberos

Primero, necesita una cuenta de usuario dedicada en Active Directory que el servicio usará. Puede crearla mediante la consola ADUC (dsa.msc) o PowerShell. La clave es asignar una contraseña conocida y configurarla de forma que no caduque ni se pueda cambiar; de lo contrario, su keytab dejará de ser válida si la contraseña cambia posteriormente. A continuación, se muestra un ejemplo con PowerShell:

New-ADUser -Name "web" -GivenName "nginx web app" -SamAccountName "web" -UserPrincipalName "[email protected]" -Path "OU=Services, OU=Munich, OU=DE, DC=test, DC=com" -AccountPassword (ConvertTo-SecureString "Sup6r!Pa$s" -AsPlainText -Force) -Enabled $true

Ahora, bloquee las políticas de contraseña:

Get-ADUser web | Set-ADUser -PasswordNeverExpires:$true -CannotChangePassword:$true

Esto es bastante necesario para evitar que Kerberos se rompa debido a un cambio de contraseña.

Vinculación de SPN a la cuenta

Aquí es donde la cosa se pone un poco más técnica. Un SPN es como un identificador del servicio que se está autenticando. Normalmente, se asigna un SPN usando setspn. Por ejemplo, para vincular HTTP a la cuenta:

setspn -A HTTP/web.domain.com web

Compruebe si los SPN están vinculados correctamente:

setspn -L web

Si ve su SPN, todo está bien. Si no, agréguelo y ya debería estar vinculado. Este paso es fundamental para que Kerberos identifique la cuenta responsable del servicio.

Generando la tabla de claves con ktpass

Este es el paso principal que suele confundir a los usuarios. El comando utilizado es ktpass, que crea un archivo keytab para el SPN asignado. Este es un comando típico:

ktpass -princ HTTP/web.domain.com@DOMAIN. COM -mapuser web -crypto all -ptype KRB5_NT_PRINCIPAL -pass "Sup6r!Pa$s" -target yourdomaincontroller.example.com -out C:\share\web.keytab

¿Por qué usar -crypto all ? Porque en algunas configuraciones no todos los tipos de cifrado están habilitados, pero esto generalmente ayuda a generar una amplia compatibilidad. El resultado indicará que se asignó el SPN al usuario y se creó el keytab correctamente. Tenga en cuenta que el atributo msDS-KeyVersionNumber del objeto de Active Directory aumenta al cambiar las contraseñas, por lo que si se actualiza la contraseña de la cuenta, deberá volver a generar el keytab.

Verificación y uso de la tabla de claves

Windows no tiene herramientas nativas para inspeccionar tablas de teclas, pero si está instalado Java, puede usar klist.exe desde el directorio bin de Java:

cd "C:\Program Files\Java\jre1.8.0_181\bin" & klist.exe -K -e -t -k C:\share\web.keytab

Esto mostrará información como los SPN, los tipos de cifrado y las marcas de tiempo. Tenga en cuenta que, si su keytab no funciona, verifique los permisos del archivo; debe mantenerse seguro, ya que cualquiera con acceso de lectura podría suplantar la identidad del servicio.

Un detalle curioso: si cambia la contraseña de la cuenta en AD, el KVNO (Número de Versión de Clave) aumenta y todas las keytabs antiguas dejan de ser válidas. Por lo tanto, controle cuándo regenera la keytab para evitar interrupciones del servicio.

En resumen, crear una tabla de claves no es mágico, pero a veces lo parece. Es posible que haya que probar y fallar, especialmente con las vinculaciones de SPN y los tipos de cifrado, pero una vez configurada, la autenticación Kerberos es mucho más fluida, sobre todo para servicios Linux o integraciones multiplataforma.

Resumen

  • Cree un usuario de AD dedicado con una contraseña fija.
  • Configure las opciones de la cuenta de usuario para evitar la caducidad y los cambios de contraseña.
  • Vincular un SPN usando setspn.
  • Genere la tabla de claves con ktpass y guárdela de forma segura.
  • Verifique el contenido con klist.exe de Java.
  • Recuerde, cambiar la contraseña de AD significa regenerar el keytab.

Resumen

Todo este proceso puede ser un poco engorroso, sobre todo si eres nuevo en Kerberos y AD. Pero una vez que te familiarizas con la creación y verificación de keytabs, aplicarlos a tus servicios de Linux o Windows se vuelve mucho menos complicado. Aun así, es normal que tengas que hacer algunas modificaciones, como con los SPN y los tipos de cifrado, pero bueno, eso es parte de la aventura. Ojalá esto ayude a que tu configuración de Kerberos funcione mejor. Solo recuerda mantener esos keytabs seguros; nadie debería tenerlos en sus manos.