¿Cómo evitar aumentos frecuentes de KVNO cuando se usa Apache HTTPD con mod_auth_kerb hablando con AD?

¿Cómo evitar aumentos frecuentes de KVNO cuando se usa Apache HTTPD con mod_auth_kerb hablando con AD?

Configuré Apache HTTPD 2.4 con mod_auth_kerb, creé una cuenta de servicio en Active Directory, agregué un SPN para mi nombre de host http, creé un archivo de tabla de claves en la máquina Linux y el SSO comenzó a funcionar bien para los usuarios que iniciaron sesión en el dominio AD desde IE. . ¡Todo estuvo bien!

Sin embargo, aproximadamente cada semana, los usuarios, en lugar de iniciar sesión en el sitio web, reciben un mensaje de autenticación básica http, que no acepta sus credenciales. Al buscar en los registros del servidor httpd, vemos entradas como:

[auth_kerb:error] [pid 8040] [client 192.168.100.100:54460] gss_accept_sec_context() failed: Unspecified GSS failure.  Minor code may provide more information (, Key version number for principal in key table is incorrect)

Lo que parece haber sucedido es que el KVNO (Número de versión de clave Kerberos) en AD se ha incrementado, por lo que la tabla de claves no es válida. Podemos ver eso haciendo algo como:

$ kinit '[email protected]'
Password for [email protected]

$ kvno HTTP/sso.example.com
HTTP/[email protected]: kvno = 12

$ klist -k krb5-keytab 
Keytab name: FILE:krb5-keytab
KVNO Principal
---- ---------------------------------------------
11   HTTP/[email protected]

El KVNO que se informa AD se ha incrementado de alguna manera y es uno mayor que el de la tabla de claves que utiliza Apache, lo que está provocando que el SSO de Kerberos falle.

Si volvemos a crear la tabla de claves, con algo como:

$ kinit '[email protected]'
Password for [email protected]

$ KEYTAB=krb5-keytab
$ SN="HTTP/[email protected]"
$ KVNO=`kvno $SN | awk -F'kvno = ' '{print $2}'`
$ echo "KVNO for $SN is $KVNO"
KVNO for HTTP/[email protected] is 12

$ rm $KEYTAB
$ ktutil
addent -password -p HTTP/[email protected] -k 12 -e arcfour-hmac
wkt krb5-keytab
$ chown apache.apache $KEYTAB
$ chmod 440 $KEYTAB
$ chcon -u system_u -t httpd_config_t $KEYTAB
$ service httpd restart

Entonces Kerberos SSO comenzará a funcionar nuevamente y ¡todo estará bien! Durante aproximadamente una semana, cuando de repente volverá a fallar, ya que el KVNO silenciosa y misteriosamente ha subido un valor más en AD...

Entonces, ¿qué debo hacer, ya sea en AD o en cómo creo el archivo de tabla de claves de Kerberos en Linux, para que el KVNO no siga aumentando aleatoriamente cada 1 o 2 semanas, rompiendo así la capacidad de todos nuestros usuarios para acceder al sitio? ?

Respuesta1

Active Directory incrementa KVNO de acuerdo con RFC 4120. Microsoft documentó su implementación en el documento MS-KILE sección 3.1.5.8.

Active Directory esencialmente ignora KVNO. (Excepto en los DC de solo lectura: si un RODC está comprometido, las claves que contiene no se pueden reutilizar contra otro DC). Entonces, mi punto es que a AD generalmente no le importa cuál es su KVNO, aunque todavía mantiene KVNO. solo le importa si su boleto es válido y no está vencido. (Sin embargo, no sé si su cliente Linux realiza una verificación estricta de los KVNO. Aparentemente lo hace).

Active Directory intentará descifrar/validar con la clave más reciente que tiene para esa entidad principal y, si eso no funciona, intentará con la anterior (siempre que la clave anterior aún esté dentro de su vida útil). ) y si eso no funciona, fallará la solicitud. Independientemente del KVNO que envíe el cliente. Pero recuerde que no todos los controladores de dominio tendrán su KVNO-1 (es decir, el KVNO anterior), solo el controlador de dominio que emitió su boleto por última vez.

KVNO se incrementa cuando la computadora cliente cambia su contraseña o renueva su boleto o su boleto caduca. De forma predeterminada, Active Directory utiliza 7 días como tiempo máximo en el que se puede renovar un ticket, que coincide con su descripción de"Funciona durante aproximadamente una semana".

No existe ningún mecanismo para evitar que Active Directory incremente KVNO cuando recibe un cambio de contraseña válido o una rotación de tickets de una computadora miembro del dominio. Entonces mi punto es que Active Directory no actualiza "misteriosamente" KVNO - lo hace por razones específicas.

Me parece que su máquina Linux todavía está intentando utilizar su ticket (ahora caducado) después de su vida útil máxima de 7 días. (O Active Directory se ha configurado para algo más corto).

Mire en su /etc/krb5.confy verifique que la duración máxima del ticket esté dentro de la duración máxima del ticket especificada en Active Directory (la Política Kerberos en la Política de grupo de dominio predeterminada). Debe renovar su ticket (y su KVNO debe aumentar) dentro de ese intervalo. especificado por AD.

Respuesta2

Probablemente estés encontrando este error https://bugzilla.samba.org/show_bug.cgi?id=6750

Hay un par de cambios en la configuración de samba que lo solucionarán. lo puse

kerberos method = secrets and keytab

información relacionada