Diagnóstico del mensaje de error:

Diagnóstico del mensaje de error:

Login failed for user (null)
ó
Login failed for user 'NT AUTHORITY\ANONYMOUS LOGON'

Ó

Cannot generate SSPI Context

Por: Servando Canales

Estos errores son mas comunes en configuraciones de IIS (middle tier) conectandose a SQL Server y sólo ocurre cuando se utiliza TCP/IP y autenticación de kerberos (el problema no ocurre si se utiliza named pipes). Tambien entre SQL Servers cuando se utilizan linked servers.

Nomenclaturas:

AD – Active Directory o Directorio Activo.

SPN – Service Principal Name

FQDN – Fully Qualified Domain Name

ADUC – Active Directory Users and Computers

Herramientas:

Las herramientas que necesitamos para diagnosticar el problema son:

- Network Monitor (o cualquier otra herramienta para análisis de protocolos)

- SETSPN.exe

- Ldifde.exe

- kerbtray.exe

Datos Requeridos:

Cuenta del usuario (incluyendo dominio) que se esta conectando a IIS y/o SQL Server.

Nombre del servidor de IIS.

Credenciales utilizadas en el Application Pool de IIS.

Nombre del servidor de SQL Server.

Nombre de la instancia de SQL Server con problemas.

Cuenta de servicios (con dominio) que se esta utilizando para levantar el servicio de SQL Server.

Pre-requisitos:

1. DNS debe estar configurado correctamente (maquinas deben poder ser encontradas por FQDN)

2. El tiempo entre las maquinas debe estar sincronizado.

3. AD

4. Mismo dominio y/o relación de confianza entre dominios (si existen varios dominios involucrados)

Procedimiento:

1. Revisar en segmentos (comunicación y autenticación entre):

a. Cliente y el IIS (middle tier)

b. IIS y SQL Server

c. Cliente y el IIS y SQL Server (delegación)

2. Cuenta del cliente :

   Ver las propiedades de la cuenta del usuario en ADUC y verificar que la opción: ”Account is sensitive and cannot be delegated” NO este seleccionada.

3. SPNs:

En IIS (middle tier):

Esta es la configuración o acción que se debería tener dependiendo de la cuenta que se configure en el Application Pool de IIS que se este utilizando.

  

AppPool Identity

Acceso via

Acción Requerida

SPN

NetworkService or LocalSystem

AD FQDN or Netbios Name

No

Object server:

HOST/FQDN

HOST/Netbiosname

NetworkService or LocalSystem

DNS Alias

SETSPN -A HTTP/DNSAlias Netbiosname

Object server:

HOST/FQDN

HOST/Netbiosname

HTTP/DNSALias

Usuario del Dominio

AD FQDN or Netbios Name

SETSPN -A HTTP/FQDN Dominio\Usuario

SETSPN -A HTTP/Netbios Dominio\Usuario

Object server:

HOST/FQDN

HOST/Netbiosname

Object User:

HTTP/FQDN

HTTP/Netbiosname

Usuario del Dominio

DNS Alias

SETSPN -A HTTP/DNSAlias Domain\User

Object server:

HOST/FQDN

HOST/Netbiosname

Object User:

HTTP/DNSAlias

 

Nota:

Si un CNAME en DNS es creado el cual esta ‘mappeado’ al FQDN del server de IIS, entonces no se necesita crear un SPN adicional.

En SQL Server:

Revisar el SPN de la cuenta de servicios con la cual SQL Server levanta esté correctamente registrado en AD. ( Si utiliza LocalSystem el SPN no es necesario para la máquina, pero es mejor verificarlo porque algunas veces el(los) SPN(s) fue(ron) incorrectamente agregado(s) por algun administrador o aplicación que asi lo requiera.)

Para esto podemos utilizar

    SETSPN –L Dominio\CuentaDeServicio

    SETSPN –L NombreDelServer

Inclusive algunas veces el SPN se encuentra duplicado en AD, por lo cual es mejor utilizar ldifde.exe y obtener todos los SPNs del dominio,

 ldifde -f c:\SPNs.txt -t 3268 -d DC=forest,DC=root,DC=com -l serviceprincipalname -r (serviceprincipalname=*) -p subtree

buscar el duplicado en el archivo SPNs.txt y despues utilizar SETSPN –D para borrar el duplicado.

Esto tambien se puede ver en el log de eventos (event viewer):

Event Type:Error

Event Source:KDC
Event ID:11
Description: There are multiple accounts with name service/SERVERNAME.domain.com of type10

5. Delegación

  

AppPool Identity / Cuenta de Servicio

Acceso via

Acción Requerida

NetworkService, LocalSystem

AD FQDN or Netbios Name

En ADUC

Verificar que la maquina tenga marcado Trust Computer for Delegation” (Win2k)

O

Trust this computer for delegation to any service” (Win2k3)

6. Políticas de Seguridad

Domain/Local security policy deben tener:

- Act as part of the operating system

- Impersonate a client after authentication

(solo para la cuenta de servicios que estemos utilizando, Local System y/o Network Service ya esta aplicada la politica).

La clave aquí es entender e implementar la autenticación de doble salto correctamente (kerberos double-hop authentication). Enseguida estٕán algunas referencias con algunos otros escenarios con los cuales puede ocurrir el mismo problema.

Referencias:

887682 TechNet Support WebCast: How to understand, implement, and troubleshoot Kerberos double-hop authentication

842861 TechNet Support WebCast: Troubleshooting Kerberos authentication with secure Web applications and Microsoft SQL Server

319723 How to use Kerberos authentication in SQL Server

326985 HOW TO: Troubleshoot Kerberos-Related Issues in IIS

266080 Answers to frequently asked Kerberos questions

907272 Kerberos authentication and troubleshooting delegation issues

176380 How To Use ASP with a SQL Trusted Connection with Guest Account

810572 How to configure an ASP.NET application for a delegation scenario

Kerberos authentication for load balanced web sites white paper

811889 How to troubleshoot the "Cannot generate SSPI context" error message