Kerberos delegation – Capire e configurare correttamente
Sempre più spesso sono coinvolto nella risoluzione di problemi di configurazione di Kerberos in infrastrutture con più server dove le credenziali devono essere “delegate” dai front-end server ai back-end server.
Ho pensato di scrivere questo post dove riportare tutti i punti per configurare i parametri usati da kerberos per funzionare correttamente.
Come funziona
La configurazione su mi trovo a lavorare sempre più spesso prevede uno o più server IIS e un back-end server con un SQL server o un File server. Per comprendere meglio i passi di configurazione è utile spiegare come funziona il meccanismo che permette di arrivare al server di back-end con le credenziali del client.
- Il client passa le credenziali al Domain Controller/KDC che ritorna il TGT al client
- Il client usa il TGT per richiedere il Service Ticket per connettersi al server IIS
- Il client si connette al server IIS passandogli il TGT e il service Ticket
- Il Server IIS usa il TGT passato dal client per richiedere il service ticket per accedere al Server SQL
- Il Server IIS si connette a Server SQL usando le credenziali dell’utente loggato al client
Configurazione
Per permettere ad una sistema come quello rappresentato nell’immagine sopra di lavorare correttamente è necessario configurare diversi parametri nei diversi software utilizzati (IIS, IE, AD..)
Internet Explorer
- Configurare FQDN del sito che verrà utilizzato nel “Local Intranet Zone” di Internet Explorer. Nel nostro esempio useremo l’FQDN blogs.technet.com
- Abilitare l’opzione “Enable Windows Integrated Authentication” sotto “Internet Options->Advanced->Security-> Advanced”
- Abilitare l’opzione “Automatic logon with current username and password" o "Automatic Logon only in Intranet Zone" sotto “Internet Options->Advanced->Security-> Custom level”
IIS
- Eseguire il seguente comando per verificare la configurazione di IIS e assicurarsi che l’output mostri “Negotiate, NTLM”.
<system drive>\inetpub\adminscripts\cscript adsutil.vbs get w3svc/ WebSite /root/NTAuthenticationProviders
Bisogna sostituire WebSite con il numero del sito in IIS che sarà usato.
- Configurare IIS con la sola “Windows Integrated Authentication”
- Se si usano più IIS server è necessario configurare l’AppPool di entrambi i server IIS con un utente di dominio creato appositamente ( esempio: AppPoolUser). Nel caso di un solo server IIS si può lasciare l’utente Local System.
Active Directory
- L’account AppPoolUser deve essere configurato con l’opzione per permettere la “delega”.
Bisogna precisare la differenza tra “Kerberos Delegation” (immagine sopra a sx) e “Contrained Delegation” (immagine sopra a dx). La“Kerberos Delegation” permette al primo server (front-end) di richiedere a nome del client il ticker kerberos per accedere al secondo server (back-end). La “Constrained Delegation” a differenza della “Kerberos Delegation” non è supportata su tutti i sistemi e per funzionare richiede che il “domain functional level” sia impostato a 2003. Con la “Constrained Delegation” l’amministratore può configurare un utente per richiedere il ticker kerberos solo per specifici servizi. Nell’esempio sopra abbiamo specificato solo il server SQLServer con la porta 1433 e il service principal name MSSQLSvc.
- L’account AppPoolUser deve essere aggiunto al gruppo IIS_WPG group su ogni IIS server.
- Registrare l’SPN per l’FQDN blogs.techenet.com all’account AppPoolUser
Setspn –A http/<FQDN> <Domain user account>
Setspn –A http/<Netbios Name> <Domain user account>
- Verificare che SQL abbia registrato durante l’installazione l’SPN nell’oggetto computer del server SQLServer
Setspn –L <Domain user account>
- Configurare i seguenti diritti per l’account AppPoolUser su tutti i server IIS tramite le Local Policy o tramite una GPO
Troubleshooting
Se avete seguito i passi sopra il sistema dovrebbe usare Kerberos senza problemi. Nel caso ci fossero problemi vi suggerisco di scaricare questa applicazione ASP.NET dal sito:
Dopo aver scaricato l’applicazione create un nuovo sito usando i file scaricati. A questo punto puntando sul nuovo sito avrete un report completo con indicato gli errori e la procedura per risolverli. Vi riporto un esempio di report nel caso tutto sia configurato correttamente:
Se l’uso dell’applicazione Delegconfig non è sufficiente vi riporto una lista di azioni da fare per identificare la causa del problema:
- Pulire la cache kerberos con il tool Klist.exe o Kerbtray.exe sul client e su tutti i server. In questo modo tutti i ticket kerberos verranno richiesti al KDC utilizzando la nuova configurazione
- Aumentare il livello del log di Kerberos (KB262177). Con l’attivazione di questo log verranno generati degli eventi in caso di errori nel registro degli eventi di sistema.
- Collezionare una trace di rete sul client, il front-end e il back-end e analizzare il traffico kerberos sulla porta 88. Con l’analisi della trace di rete siete in grado di capire se ci sono problemi nella configurazione degli SPN. Gli errori kerberos tipici sono:
- KDC_ERR_S_PRINCIPAL_UNKNOWN= Non è stato registrato l’spn
- KDC_ERR_PRINCIPAL_NOT_UNIQUE= Ci sono più oggetti che hanno registrato lo stesso SPN. Per identificare gli oggetti si possono usare diversi tool. Avendo un server Windows 2008 si può sfruttare una nuova funzionalità del tool SetSpn:
Altrimenti bisogna utilizzare il tool LDIFDE con la seguente sintassi:Syntax:
ldifde -f <filename> -d "<dc=domain-netbiosname,dc=primary-domain>" -l serviceprincipalname -r "(serviceprincipalname=<serviceprincipalname-to-check-for-duplicates>)" -p subtree
For example, if the domain name is test.abcd.com and the site URL is http//test.abcd.com command should be as shown below:
ldifde –f C:\log.txt -d "dc=test, dc=abcd, dc=com"-l serviceprincipalname –r "(serviceprinicpalname=http/test.abcd.com)" -p subtree
Se non volete usare il tool LDIFDE potete usare lo script contenuto nell’articolo 929650
Articoli utili
- Kerberos on IIS, http://support.microsoft.com/kb/326985 , is a good resource that goes discusses using IIS for the front end server.
- Kerberos on 2000 server clusters, http://support.microsoft.com/kb/235529
- Kerberos in SQL Server, http://support.microsoft.com/kb/319723
- Kerberos with network load balancing, http://support.microsoft.com/kb/325608
- Kerberos with SMS 2003, http://support.microsoft.com/kb/326985
Documenti utili
- Kerberos RFC - http://www.ietf.org/rfc/rfc1510.txt
- Microsoft Kerberos Tech Ref - http://technet2.microsoft.com/windowsserver/en/library/b748fb3f-dbf0-4b01-9b22-be14a8b4ae101033.mspx?mfr=true
- Kerberos Double Hop webcast - http://support.microsoft.com/kb/887682
- Constrained Delegation -http://www.microsoft.com/technet/prodtechnol/windowsserver2003/technologies/security/constdel.mspx
- Protocol Transition - http://technet2.microsoft.com/windowsserver/en/library/4c8b5ac7-368b-45b9-91d7-1ae7c5e0da311033.mspx?mfr=true
- How the Kerberos Version 5 Authentication Protocol Works -http://technet2.microsoft.com/windowsserver/en/library/4a1daa3e-b45c-44ea-a0b6-fe8910f92f281033.mspx