IIS身份验证概述: 安全中的3A-->验证Authentication: Who are you?  授权Authorization: What can you do?                 审核Auditing: What have you do?
  IIS中可以设置验证的层次: Server  Site  Folder  File
  Web身份验证: 匿名身份验证 基本身份验证 摘要身份验证 集成身份验证 .Net Passport身份验证 基于客户端证书映射的身份验证 UNC Pass thought身份验证
  FTP身份验证: 匿名 基本身份验证  匿名身份验证: 不需要客户端提供认证信息,在HTTP头中不包括验证信息  IIS首选的默认验证方式RPC1945  IUSR_<MachineName>: 属于本地Guests组成员 IUSR_<MachineName>口令在SAM和IIS Metabase中要同步 NTFS权限阻止匿名访问时IIS会尝试启用其它验证方法 在每个不同的节点上可以设置不同的Anonymous对应的账户  子验证(subAuthentication): IIS将管理匿名账户的口令验证 在IIS 5.0中子验证默认是启用的 在IIS 6.0中子验证默认被禁用  在全新安装的IIS 6.0中启用子验证: 将AppPool的运行标示设置为Local System 注册子验证组件,iissuba.dll-->(rundll32 %windir%\system32\iissuba.dll,RegisterIISSUBA) 设置Metabase属性 AnonymousPasswordSync=true  从IIS 5.0升级到IIS 6.0后启用子验证: 将AppPool的运行标示设置为Local System 注册子验证组件,iissuba.dll 
  如何查看IUSR_这个用户的密码呢?
20031734
  我现在来到一台计算机名称叫做Windows2003的计算机  它是一台IIS 6.0服务器  我已经在这台计算机上安装IIS 6.0Resource Kit工具了  打开命令提示符--在里面输入cd \按回车键--输入cd C:\Inetpub按回车键--输入cd AdminScripts按回车键--输入adsutil.vbs get w3svc/AnonymousPasswordSync按回车键  可以看到它提示在这个节点里面没有设置  输入adsutil.vbs get w3svc/AnonymousUserName按回车键  可以看到当前的匿名用户是IUSR_  注意: WINDOWS2003是本地计算机的名称   输入adsutil.vbs get w3svc/AnonymousUserPass按回车键  可以看到现在查看的密码是被加密的  看不到的  怎么样去查看IUSR_这个用户的密码呢?  输入notepad adsutil.vbs按回车键  在脚本里面找到一条叫做Function IsSecureProperty(ObjectParaneter,MachineName)的函数  然后在下面添加IsSecureProperty = False   Exit Function  在记事本里面按文件--按保存  输入adsutil.vbs get w3svc/AnonymousUserPass按回车键  看到了吧?  可以看到IUSR_ 这个用户的密码是N1;Ce<2q|SE7Lc了  
  如何在IIS 6.0中启用子验证 然后能够让IIS自动去管理IUSR_这个用户的密码呢?
20031735
  通过开始--程序--管理工具--选择Internet信息服务(IIS)管理器来打开它  展开WINDOWS2003(本地计算机)--应用程序池--对着DefaultAppPool右键--选择属性  在DefaultAppPool属性里面按标识选项--在预定义账户里面选择本地系统  按确定  此时会弹出一个提示  不用管它 按是就ok了  注意: 我们不推荐把预定义账户设置成本地系统  因为如果DefaultAppPool里面运行的客户端运用发生了问题  假如***攻破你的系统的时候它有可能会利用这个本地系统账户去做一些比较危险的事情  所以说一般不推荐使用本地系统  那么这也是为什么在IIS 6.0里面的子验证默认被禁用掉的原因 
20031736
  接下来我们需要去注册一下子验证的模块  打开命令提示符--在里面输入cd \按回车键--输入cd Inetpub按回车键--输入cd AdminScripts按回车键--输入cd c:\WINDOWS\system32按回车键--输入rundll32 iissuba.dll, RegisterIISSUBA按回车键  注册完成之后是没有任何显示的  最后还需要输入c:\Inetpub\AdminScripts\adsutil.vbs set w3svc/AnonymousPasswordSync true按回车键  可以看到现在已经为IIS服务器启用子验证了  这样就能够帮你去管理IIS服务器里面的IUSR_这个用户的密码了 让它自动在Metabase和本地SAM数据库里面进行同步了  打开IE浏览器--在地址里面输入 http://www.microsoft.com 按回车键  看到了吧?  可以看到网站的内容了-->Microsoft 
20031737
  如果把IUSR_这个匿名访问用户的密码修改掉还能不能访问到网站呢?  展开网站--对着Microsoft这个网站右键--选择属性--按目录安全性  在身份验证和访问控制里面按编辑--我把IUSR_这个用户的密码修改成123--按确定  打开浏览器--在地址里面输入 http://www.microsoft.com 按回车键  看到了吧?  还是能够访问到Microsoft这个网站的内容  这是为什么呢? 原因就是当我们注册了子验证以后  子验证会自动去同步Metabase和本地SAM数据库里面匿名身份验证用户的密码 
20031738
  如果我把Metabase属性的值修改成false会发生什么结果呢?  打开命令提示符--在里面输入cd \按回车键--输入cd Inetpub按回车键--输入cd AdminScripts按回车键--输入cd c:\WINDOWS\system32按回车键--输入c:\Inetpub\AdminScripts\adsutil.vbs set w3svc/AnonymousPasswordSync false按回车键  打开IE浏览器--在地址里面输入 http://www.microsoft.com 按回车键  看到了吗?  现在不能够访问到Microsoft这个网站了  为什么不能访问呢?  因为我把子验证的功能关闭了  这样它就没有办法去同步IUSR_这个用户的密码  所以身份验证的过程就会失败了
  基本身份验证: 验证原理: Web服务器-->返回HTTP401与所支持的身份验证方式 客户端-->以Authorization头返回"明文"用户名和密码  绝大部分Web服务器/浏览器都支持HTTP 1.0协议的组成部分(RPC2617)  单独使用是一种不安全的验证方法: 用户名和口令使用Base64进行编码(RFC1521) 结合SSL保证传输的安全性  用户权限要求的变化: IIS 5.0-->用户需要Local Logon权利  IIS 6.0-->Network Logon  验证令牌缓存: 默认15分钟 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Inetlnfo\Parameters  
  如何启用基本身份验证呢?
20031739
  我来到IIS服务器这边  我已经把这台IIS服务器加入yejunsheng.com域中了  展开网站--对着Microsoft 这个网站右键--选择属性--按目录安全性  在身份验证和访问控制里面按编辑--把启用匿名访问的沟去掉--把基本身份验证(以明文形式发送密码)沟上  在默认域里面输入yejunsheng.com  领域可以随便输入一些其他的信息  因为领域只是一个显示的信息给用户的一些相应的提示  我就在领域里面输入 User@yejunsheng 吧  按确定
20031740
  打开IE浏览器--在地址里面输入 http://www.microsoft.com 按回车键  因为设置了基本身份验证 所以会弹出一个要求身份验证的窗口  为什么会可以看到 User@yejunsheng 呢  那就是因为我刚才设置领域的信息  它只是起到一个显示信息的作用  并没有其他作用  然后在用户名里面输入域名\用户(yejunsheng\administrator)  在密码里面输入administrator的密码  按确定  看到了吧?  可以看到网站的内容了-->Microsoft    
  摘要身份验证: 基于质询/响应的验证方法: 服务器-->返回HTTP401与所支持的身份验证方式,提供nonce、realm  客户端-->提供nonce和口令的hash摘要作为响应   默认使用口令和nonce生成MD5摘要   支持Proxy   中等的安全性   RFC2069/RFC2617   浏览器必须是IE 5.0以上   必须在Windows的域环境中使用-->IIS服务器和用户必须是信任域的成员 用户账户储存于AD中   DC、IIS必须是Windows 2000以上   摘要身份验证-->IIS 5.0、IIS 6.0支持  用户口令使用可还原加密  IIS 6.0需要使用子验证(Windows 2000 DC): 注册iissuba.dll  AppPool使用Local System标识  Metabase值UseDigestSSP=False   高级摘要身份验证-->只有IIS 6.0支持,默认的摘要验证  DC、IIS必须是Windows 2003  用户口令以多种MD5摘要形式存放于AD 
  如何启用摘要身份验证呢?  如果启用摘要身份验证的话必须要启用子验证和把DefaultAppPool属性里面的预定义账户设置成本地系统  因为这两步在上面已经做过了  这里就不需要再做了 20031742
  我现在来到IIS服务器这边  打开Internet信息服务(IIS)管理器--展开网站--对着Microsoft右键--选择属性--按目录安全性--在身份验证和访问控制里面按编辑--把Windows域服务器的摘要式身份验证沟上 按确定 
20031744
  注意: 为了能使用摘要身份验证 我们还需要在IIS服务器上设置一个Metabase的值  打开命令提示符--在里面输入cd \按回车键--输入cd \Inetpub按回车键--输入cd AdminScripts按回车键  输入adsutil.vbs set w3svc\UseDigestSSP false按回车键  默认情况下这个Metabase的值是true 
20031743
  我现在来到一台计算机名称叫做GC的计算机  它是森林中第一台DC(全局编录服务器)  打开命令提示符--在里面输入cd \WINDOWS\system32按回车键--输入rundll32 iissuba.dll, RegisterIISSUBA按回车键  注册完成之后  这样域控制器就也可以支持子验证了
20031745
  通过开始--运行--输入dsa.msc按确定来打开Active Directory 用户和计算机  我已经提前新建一个叫做user1的用户了  展开yejunsheng.com这个域名--按User--对着user1这个用户右键--选择属性--按账户--把使用可逆的加密保存密码沟上--按确定       注意: 此时还需要对user1这个用户进行重新设置一次密码 
20031741
  我现在来到IIS服务器这边测试一下  打开IE浏览器--在地址里面输入 http://www.microsoft.com 按回车键--在用户名里面输入域名+用户名(yejunsheng\user1)--在密码里面输入user1的密码  按确定  看到了吧?  已经可以访问到Microsoft这个网站的内容了  说明已经成功启用Windows域服务器的摘要式身份验证了  如果想启用高级摘要身份验证的话  就在IIS服务器的命令提示符里面输入adsutil.vbs set w3svc\UseDigestSSP true按回车键就ok了  这样就可以支持高级摘要身份验证了  高级摘要身份验证的好处就是不需要为用户设置使用可逆的加密保存密码了
  集成身份验证: 是基于SSPI(Security Support Provider)的身份验证方式  包含两种验证方式: NTLM(LM/NTLM/NTLMv2)-->NT4/Win2k/XP/Win2k3  kerberos-->Win2k/XP/Win2k3  IIS将会询问客户端协商验证协议  在IIS中强制验证协议: Metabase-->NTAuthenticationProviders: Negotiate  NTLM  Kerberos   适用于Intranet环境: NTLM无法使用Proxy  Kerberos不易通过防火墙   安全的身份验证方式-->和具体使用安全身份验证协议相关
  .Net Passport身份验证: 由微软提供的.Net Passport Service服务  不能与其它任何验证方式共存  使用加密Cookie  IIS上不存放任何验证用户的信息  .Net Passport SDK开发应用  安全的身份验证方法
  基于证书的身份验证: 使用客户端证书验证用户身份  双因子验证-->客户端证书+其他身份验证   客户端证书映射,IIS自动将用户与Windows账户关联-->目录服务映射  一对一映射  多对一映射,使用规则 
  UNC Passthrough身份验证: 确定获得远程计算机上UNC共享访问使用的凭据  IIS 6.0支持以当前登录用户的凭据访问UNC共享  如果凭据无效,返回HTTP 500错误
  FTP身份验证方法: 匿名身份验证  基本身份验证  如考虑安全不应该使用ftp协议,可以用WebDAV替代
  排错工具简介: AuthDiag  WFetch  SSLDiag  Network monitor  ADSIUtil.vbs  HTTP Look  ieHttpHeader