Windows NT挑战/响应是确定发送请求的人员的最安全的方式。挑战/响应的处理流程是所有使用IIS的人员必须掌握的。(我们实际是围绕着Windows NT委托(delegation)过程进行,但在挑战/响应后有委托的最好说明。)
现在说明一个完全不同的技术: "散列(Hash)"
Windows NT挑战/响应验证过程中并不通过网络发送密码,因为密码可能会被截获和破译。Windows NT使用的是一个类似于绞肉机的不可逆算法。输入内容后得到一个散列内容。Windows NT使用Internet标准MD4散列算法生成16字节(128位)的散列值。(理论上)不可能使用散列值和算法在数学上逆转加密过程而得到原密码。也就是说,密码作为了一个“私人密钥(private key)”。只有拥有该密钥的人才能产生一个特定的散列值。Windows NT域控制器有一个数据库存储了由用户密码产生的用户散列值,但并未存储用户密码。 (注意密码和散列值的分离不会使域控制器减少受到黑客攻击的可能,因为有时散列值也可以用作密码的等效物。)
IIS与挑战/响应验证过程
如果下面条件满足时,IIS将使用挑战/响应验证:
如果Internet服务管理器的WWW属性对话框的“允许匿名”选项没有被选中,IUSR帐户没有足够的许可权访问所请求的资源,或者执行代码禁止访问。
在Internet服务管理器的WWW属性对话框中选择Windows NT Challenge/Response
浏览器在挑战/响应验证方式下发送请求 (当前浏览器中只有Internet Explorer支持挑战/响应验证)
当我们说IIS尝试验证用户时,IIS所做的工作非常简单。它向浏览器发回一个"HTTP 401 Access Denied"消息,以及它接受的验证方法列表。与一个高级俱乐部的保镖非常相似, IIS这时会说:"You can't get what you want without identifying yourself. By the way, I accept the following methods of identification.(没有确认您的身份,您不能获得所需要的内容。另外,我支持下列验证方法)"。IIS接受的两种验证方法是挑战/响应验证和基本验证。具体使用哪种方法取决于在IIS的Internet服务管理器WWW属性对话框中的选择。如果两种验证方法都被启用,对于Internet Explorer将一定会使用挑战/响应验证,而对其它浏览器则会使用基本验证。