SPNEGO
Come abbiamo accennato precedentemente, le GSSAPI foriniscono un set di API generiche che si astraggono dal meccanismo di autenticazione sottostante. Quando due applicazioni parlano tra loro attraverso le GSSAPI e sfruttano lo stesso meccanismo di autenticazione, si dice che hanno stabilito un contesto di sicurezza (security context). Il problema di questo meccanismo è che le due entità devono sapere a priori quale meccanismo di autenticazione hanno a disposizione e quindi quale possono usare: GSSAPI non prevede un meccanismo di “handshake” tra i due peer per sapere quale meccanismo di sicurezza hanno in comune e stabilire quindi un security context.
Il Simple and Protected GSS-API Negotiation Mechanism (SPNEGO) è stato creato appositamente per determinare, durante una connessione tra due peer, quali sono i meccanismi di autenticazione disponibili e selezionare il miglior meccanismo comune. SPNEGO viene usato in Windows 2000 per negoziare quali sono i meccanismi di autenticazione supportati (tipicamente Kerberos e NTLM) e scegliere il migliore: ad esempio, se un sistema Windows 98 deve colloquiare con un server Windows 2003, SPNEGO sceglierà il meccanismo NTLM perchè Windows 98 non supporta Kerberos. Al contrario, se un Windows XP colloquierà con un server Windows 2003 selezionerà Kerberos in quanto supportato da entrambi e reputato migliore di NTLM. Vediamo un po’ più da vicino il comportamento di SPNEGO. Chi avvia la connessione propone un meccanismo di autenticazione o una lista ordinata di sistemi di autenticazione; il destinatario sceglie: può accettare il meccanismo di sicurezza proposto, può sceglierne uno dalla lista proposta oppure può rigettare i valori proposti. Successivamente il destinatario della trasmissione informa chi ha dato inizio alla connessione sulla sua scelta. Questo meccanismo potrebbe essere lento su connessioni non particolarmente veloci (tipicamente le WAN o le intefacce radio) per cui SPNEGO tenta subito di proporre un meccanismo di autenticazione al setup della connessione, in modo da minimizzare i tempi nel caso in cui il meccanismo proposto vada bene al destinatario della connessione.
Il meccanismo della connessione è ben più complesso e include anche un modo per proteggere la negoziazione: qualora si fosse interessati ad approfondire tale meccanismo, è consigliabile leggere il relativo RFC (rif. Bibliografia). SPNEGO è alla base di tutti i meccanismi di autenticazione di Windows, inclusi la condivisione file e stampanti, LDAP, IPSec. Microsoft ha anche applicato SPNEGO alle connessioni Web (HTTP), estendendo il meccanismo dell’autenticazione: una descrizione di come questo sia stato realizzato è disponibile nell’Internet Draft di Brezak “HTTP Authentication: SPNEGO Access Authentication As implemented in Microsoft Windows 2000”. Sostanzialmente SPNEGO viene incapsulato nell’header di HTTP con la keyword WWW-Authenticate: Negotiate e un base64 encoding del risultato delle API. Tutti i successivi dialoghi tra il client e il server verranno veicolati attraverso questo meccanismo fino al completamento della sessione SPNEGO. I l meccanismo di SPNEGO su HTTP verrà utilizzato per realizzare il modello di Single Sign-On per quanto riguarda l’autenticazione Web.