IIS有五种验证方式:允许匿名访问、集成验证、基本验证、windows域服务器的摘要身份验证、.net Passport身份验证。在公司里,我们采用了集成验证的方式,即,公司里的员工只要他登陆了域,那么他访问我们发布的任何站点,都不需要再输入用户名和密码,直接用登陆windows的域帐户和密码进行验证。可是,我一直没有注意到即使是采用的集成验证方式,在实际的验证过程中,iis还有不同的验证模式:
Kerberos 和 NTLM 身份验证
在集成的 Windows 身份验证用于验证客户端请求时,Internet 信息服务 (IIS) 将传递 Negotiate 标题。Negotiate 安全标题允许客户端在 Kerberos 和 NTLM 之间进行选择。Negotiate 将选择 Kerberos,除非与身份验证有关的系统之一无法使用它或调用应用程序无法提供使用 Kerberos 所需的足够信息。
我们在公司内部访问这些站点时感觉不出这样的验证方式有什么问题。当我们通过ISA2000将这些站点发布到internet上后,然后,在internet上访问这些站点(登录域),我们发现在windows2000下会弹出身份验证的对话框,要求您输入用户名和密码,而在XP下索性告诉你找不到这个网页。这到底是怎么回事呢?经过我们多方监测,问题就出在这个Negotiate上,我们如果不使用Negotiate标题,而直接选择NTLM验证模式,即使是在internet上,只要你登录域(在找不到域控制器的时候,是可以通过存储在本机的缓冲登陆的),照样不需要用户名和密码。
因此,我们可以将IIS设置成只允许NTLM身份验证。
1.单击“开始”,单击“运行”,键入 cmd,然后按 Enter 键。
2.找到包含 Adsutil.vbs 文件的目录。默认情况下,该目录是 C:\Inetpub\Adminscripts。
3.使用下面的命令检索“NTAuthenticationProviders”的当前值:
cscript adsutil.vbs get w3svc/NTAuthenticationProviders
4.禁用 Negotiate 以强制 IIS 仅发送 NTLM 标题。要禁用 Negotiate(从而阻止 Kerberos 身份验证),请使用下面的命令(注意“NTLM”必须大写,以避免出现任何不利的影响):
cscript adsutil.vbs set w3svc/NTAuthenticationProviders “NTLM”
(出处:http://www.sheup.com)