编写该文档的目的在于引导软件开发人员、软件测试人员以及最终用户对Windows下的认证验证的原理及实现有更好的理解。
该文档的读者为用户代表、软件分析人员、开发管理人员、质量管理人员和测试人员。
身份认证是系统安全的一个基础方面,它用来确认尝试登录域或访问网络资源的任何用户的身份。Windows服务器系统身份认证针对所有网络资源启用“单点登录”(Single Sign-on,SSO)。采用单点登录后,用户可以使用一个密码或智能卡一次登录到域,然后向域中的任何计算机验证身份。身份认证的重要功能就是它对单点登录的支持。
单点登录是一种方便用户访问多个系统的技术,用户只需在登录时进行一次注册,就可以在一个网络中自由访问,不必重复输入用户名和密码来确定身份。单点登录的实质就是安全上下文(Security Context)或凭证(Credential)在多个应用系统之间的传递或共享。当用户登录系统时,客户端软件根据用户的凭证(例如用户名和密码)为用户建立一个安全上下文,安全上下文包含用于验证用户的安全信息,系统用这个安全上下文和安全策略来判断用户是否具有访问系统资源的权限。Kerberos V5身份认证协议提供一个在客户端跟服务器端之间,或者服务器与服务器之间的双向身份认证机制。
单点登录在安全性方面提供了两个主要优点。
对用户而言,单个密码或智能卡的使用减少了混乱,提高了工作效率。
对管理员而言,由于管理员只需要为每个用户管理一个账户,因此域用户所要求的管理支持减少了。
身份验证是一个验证客户端身份的过程,通常采用指定的第三方授权方式。客户端可能是最终用户、计算机、应用程序或服务。客户端的标识称为安全原则。为了使用服务器应用程序进行验证,客户端提供某种形式的凭据来允许服务器验证客户端的标识。确认了客户端的标识后,应用程序可以授予执行操作和访问资源的原则。
这种验证方式需要把用户的用户名和密码传送到服务端,服务端验证用户名和密码是否和服务器的此用户的密码一致。用户名用明码传送,但是密码经过处理后派生出一个8字节的key加密质询码后传送。
图:NTLM 质询/应答机制
用户请求访问。用户尝试通过提供用户凭据登录到客户端。登录前,客户端计算机缓存密码的哈希值并放弃密码。客户端向服务器发送一个请求,该请求包括用户名以及纯文本格式的请求。
服务器发送质询消息。服务器生成一个称为质询的 16 字节随机数(即 NONCE),并将它发送到客户端。
客户端发送应答消息。客户端使用由用户的密码生成的一个密码哈希值来加密服务器发送的质询。它以应答的形式将这个加密的质询发回到服务器。
服务器将质询和应答发送到域控制器。服务器将用户名、原始质询以及应答从客户端计算机发送到域控制器。
域控制器比较质询和应答以对用户进行身份验证。域控制器获取该用户的密码哈希值,然后使用该哈希值对原始质询进行加密。接下来,域控制器将加密的质询与客户端计算机的应答进行比较。如果匹配,域控制器则发送该用户已经过身份验证的服务器确认。
服务器向客户端发送应答。假定凭据有效,服务器授予对所请求的服务或资源的客户端访问权。
与 NTLM 身份验证相比,Kerberos 身份验证具有以下优势:
图:Kerberos 身份验证
服务器发送加密的时间戳以进行客户端验证。服务器解密服务票证并提取服务会话密钥。通过使用服务会话密钥,服务器解密验证者消息(时间戳)并计算它。如果验证者通过测试,则服务器使用服务会话密钥对验证者(时间戳)进行加密,然后将验证者传回到客户端。客户端解密时间戳,如果该时间戳与原始时间戳相同,则该服务是真正的,客户端继续连接。