理解IIS 6.0中的身份验证
原创
©著作权归作者所有:来自51CTO博客作者叶俊生的原创作品,请联系作者获取转载授权,否则将追究法律责任
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_这个用户的密码呢?
我现在来到一台计算机名称叫做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_这个用户的密码呢?
通过开始--程序--管理工具--选择Internet信息服务(IIS)管理器来打开它 展开WINDOWS2003(本地计算机)--应用程序池--对着DefaultAppPool右键--选择属性 在DefaultAppPool属性里面按标识选项--在预定义账户里面选择本地系统 按确定 此时会弹出一个提示 不用管它 按是就ok了 注意: 我们不推荐把预定义账户设置成本地系统 因为如果DefaultAppPool里面运行的客户端运用发生了问题 假如黑客攻破你的系统的时候它有可能会利用这个本地系统账户去做一些比较危险的事情 所以说一般不推荐使用本地系统 那么这也是为什么在IIS 6.0里面的子验证默认被禁用掉的原因
接下来我们需要去注册一下子验证的模块 打开命令提示符--在里面输入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
如果把IUSR_这个匿名访问用户的密码修改掉还能不能访问到网站呢? 展开网站--对着Microsoft这个网站右键--选择属性--按目录安全性 在身份验证和访问控制里面按编辑--我把IUSR_这个用户的密码修改成123--按确定 打开浏览器--在地址里面输入http://www.microsoft.com按回车键 看到了吧? 还是能够访问到Microsoft这个网站的内容 这是为什么呢? 原因就是当我们注册了子验证以后 子验证会自动去同步Metabase和本地SAM数据库里面匿名身份验证用户的密码
如果我把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
如何启用基本身份验证呢?
我来到IIS服务器这边 我已经把这台IIS服务器加入yejunsheng.com域中了 展开网站--对着Microsoft 这个网站右键--选择属性--按目录安全性 在身份验证和访问控制里面按编辑--把启用匿名访问的沟去掉--把基本身份验证(以明文形式发送密码)沟上 在默认域里面输入yejunsheng.com 领域可以随便输入一些其他的信息 因为领域只是一个显示的信息给用户的一些相应的提示 我就在领域里面输入User@yejunsheng吧 按确定
打开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
我现在来到IIS服务器这边 打开Internet信息服务(IIS)管理器--展开网站--对着Microsoft右键--选择属性--按目录安全性--在身份验证和访问控制里面按编辑--把Windows域服务器的摘要式身份验证沟上 按确定
注意: 为了能使用摘要身份验证 我们还需要在IIS服务器上设置一个Metabase的值 打开命令提示符--在里面输入cd \按回车键--输入cd \Inetpub按回车键--输入cd AdminScripts按回车键 输入adsutil.vbs set w3svc\UseDigestSSP false按回车键 默认情况下这个Metabase的值是true
我现在来到一台计算机名称叫做GC的计算机 它是森林中第一台DC(全局编录服务器) 打开命令提示符--在里面输入cd \WINDOWS\system32按回车键--输入rundll32 iissuba.dll, RegisterIISSUBA按回车键 注册完成之后 这样域控制器就也可以支持子验证了
通过开始--运行--输入dsa.msc按确定来打开Active Directory 用户和计算机 我已经提前新建一个叫做user1的用户了 展开yejunsheng.com这个域名--按User--对着user1这个用户右键--选择属性--按账户--把使用可逆的加密保存密码沟上--按确定 注意: 此时还需要对user1这个用户进行重新设置一次密码
我现在来到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
提问和评论都可以,用心的回复会被更多人看到
评论
发布评论
相关文章
-
hdfs 9870 开启身份验证 启用身份验证
启用RDO的高级配置CredSSP,使得RDO具有身份验证功能【完美解决】 ·完美解决"连接无法继续,因为未启用身份验证,并且远程计算机需要启用身份验证以进行连接" &
hdfs 9870 开启身份验证 身份验证 Windows 远程桌面