Přišla mi právě otázka mailem a je docela zajímavá, a už jsem na to odpovídal vícekrát, tak to rovnou zdokumentujeme.
Otázka: Je vůbec možné a případně jak přinutit IIS 6.0 (ta verze na Windows Server 2003), aby ověřovalo uživatele pouze pomocí Kerberos? A tím zakázat ověřování přes NTLM, které je pomalejší a méně bezpečně?
Odpověď: Ne, to nelze
Trošku lepší vysvětlení :-)
IIS 6.0 ověřuje uživatele pomocí jakýchsi ověřovacích knihoven zvaných Security Support Provider (SSP). Ve Windows jsou od jakživa (no dobrá od Windows 2000) dvě takové knihovny. V dalším budu hodně zjednodušovat a flákat terminologii, aby to bylo jednoduše pochopitelné:
- NTLM SSP - knihovna, která umí NTLM, jak je docela vidět z jejího názvu :-)
- Negotiate - knihovna, která umí Kerberos. Jenže tato knihovna funguje tak, že zkouší nejprve Kerberos a pokud to z nějakého důvodu nejde, umí ještě NTLM jako fall-back. Ve Windows 2003 je to takto natvrdo, Kerberos a když ne, tak NTLM. Windows 2008 už umí to záložní NTLM v této knihovně vypnout.
IIS má ve výchozím nastavení (pokud zapnete Windows Integrated Authentication). Zapnuty obě tyto knihovny. Když se tedy připojíte, pošle vám HTTP status 401 Unauthorized a v něm jsou tyto dvě hlavičky:
WWW-Authenticate: Negotiate
WWW-Authenticate: NTLM
Znamená to tedy, že vám vlastně nabízí buď Kerberos, nebo NTLM, nebo NTLM :-) Proč to dělá takto? Protože Negotiate je jenom Windows záležitost, zatímco NTLM knihovnu umí i některé další systémy. Když někdo neumí knihovnu Negotiate, použije rovnou knihovnu NTLM.
Když někdo naopak umí knihovnu Negotiate, knihovna zkusí nejprve Kerberos a když to nejde, tak NTLM. Pokud Negotiate neuspěje se svými Kerberos ani NTLM, takový klient by ještě jednou zkusil použít knihovnu NTLM. Pokud nejelo předchozí NTLM z knihovny Negotiate, tak tohle mu nejspíš už taky nepomůže.
Ve Windows 2003 lze vypnout jen celou knihovnu - můžete tedy vypnout Negotiate knihovnu jako celek, nebo knihovnu NTLM. Když si vypnete knihovnu NTLM, je to skoro na nic, protože tam pořád zůstane NTLM jako součást knihovny Negotiate.
Můžete samozřejmě vypnout celou knihovnu Negotiate a zbude vám tam jen knihovna NTLM. Jenž tím se zbavíte komple i Kerberosu. Až Windows 2008 umí vypnout jednotlivé kousky Negotiate balíku a nechat tak povolený jen Kerberos.
Návod na vypnutí a zapnutí Negotiate pro IIS ve Windows 2003 najdete na stránkách Microsoftu. Ve Windows 2008 R2 už máte dokonce k dispozici i pěkné grafické rozhraní na povolení pouze Kerberos podbalíčku:

Proč byste vlastně vůbec tedy vypínali Negotiate?
Ono to má jeden důvod i ve starších systémech. Zbude vám tam jenom NTLM balíček. A ten funguje i z venku sítě. Chování klienta je totiž trošku zvláštní.
Jestliže máte Internet Explorer, ten umí Negotiate a bude ho chtít použít jako první. Problém budete mít z internetu. Pokud nemáte přímé připojení na svoje řadiče domény (domain controller - DC), Negotiate nebude chtít nic dělat. Nebude tedy pracovat ani jeho Kerberos, ani jeho NTLM, překvapivě. To by člověk řekl, že IE tedy použije balík NTLM, že? A ono ne. Protože Negotiate vrací takovou návratovou hodnotu, že z toho IE pochopí, že ověření bylo explicitně odmítnuto, a nikoliv že jen selhalo.
Znamená to pak, že musíte to Negotiate úplně vypnout, když chcete, aby se lidi mohli ověřovat pomocí knihovny NTLM z internetu. Udělá se to tím předchozím postupem podle MS návodu na IIS serveru. Nebo to dokonce můžete vypnout přímo na klientech.
IE na to má takovou divně nazvanou hodnotu v nastavení, jmenuje se to Enable Integrated Windows Authentication, která je ve výchozím stavu tak, jak vidíte na obrázku:

Takže ještě jednou - co to vlastně znamená?
Když máte zapnutu volbu Enable Integrated Windows Authentication ve vlastnostech IE, máte zapnut Negotiate knihovnu i NTLM knihovnu. IE potom vždycky začně s Negotiate (tedy Kerberos a NTLM) a pokud tohle za určitých okolností selže, může pokračovat ještě NTLM knihovnou.
Jenže někdy Negotiate selže tak, že už se s knihovnou NTLM vůbec nepokračuje. Jestli chcete tedy například přístup na SharePoint a přitom na něm používáte Windows Integrated Authentication (tedy balíčky Negotiate a NTLM), musíte knihovnu Negotiate vypnout buď na serveru, aby ji nenabízel, nebo na klientovi, aby ji vůbec nepoužival.
Uf :-)