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)
- Ldifde.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:
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
Comments
Anonymous
December 08, 2007
Cool.Anonymous
December 09, 2007
Nice!Anonymous
December 09, 2007
Interesting...