安全支持提供程序接口体系结构
本参考主题面向 IT 专业人员,介绍安全支持提供程序接口 (SSPI) 体系结构中使用的 Windows 身份验证协议。
Microsoft 安全支持提供程序接口 (SSPI) 是 Windows 身份验证的基础。 需要身份验证的应用程序和基础结构服务使用 SSPI 来提供身份验证。
SSPI 是 Windows Server 操作系统中通用安全服务 API (GSSAPI) 的实现。 有关 GSSAPI 的详细信息,请参阅 IETF RFC 数据库中的 RFC 2743 和 RFC 2744。
在 Windows 中调用特定身份验证协议的默认安全支持提供程序 (SSP) 作为 DLL 合并到 SSPI 中。 以下部分将介绍这些默认 SSP。 可以合并能够与 SSPI 一起运行的其他 SSP。
如下图所示,Windows 中的 SSPI 提供了一种在客户端计算机和服务器之间的现有信道上携带身份验证令牌的机制。 当两台计算机或设备需要进行身份验证以便可以安全通信时,进行身份验证的请求会路由到 SSPI,后者会完成身份验证过程(不考虑当前正在使用的网络协议)。 SSPI 返回透明二进制大对象。 这些对象在应用程序之间传递,随后可以传递到 SSPI 层。 因此,SSPI 允许应用程序使用计算机或网络中可用的各种安全模式,而无需更改与安全系统的接口。
以下部分介绍与 SSPI 交互的默认 SSP。 SSP 在 Windows 操作系统中以不同的方式使用,以促进非安全网络环境中的安全通信。
本主题还包括:
Kerberos 安全支持提供程序
此 SSP 仅使用 Microsoft 实现的 Kerberos 版本 5 协议。 此协议基于网络工作组的 RFC 4120 和草案修订版。 它是与用于交互式登录的密码或智能卡配合使用的行业标准协议。 它也是 Windows 中服务的首选身份验证方法。
由于自 Windows 2000 以来,Kerberos 协议一直是默认身份验证协议,因此所有域服务都支持 Kerberos SSP。 这些服务包括:
使用轻型目录访问协议 (LDAP) 的 Active Directory 查询
使用远程过程调用服务的远程服务器或工作站管理
打印服务
客户端-服务器身份验证
使用服务器消息块 (SMB) 协议的远程文件访问(也称为通用 Internet 文件系统 (CIFS))
分布式文件系统管理和引荐
对 Internet Information Services (IIS) 进行 Intranet 身份验证
Internet 协议安全性 (IPsec) 的安全机构身份验证
域用户和计算机对 Active Directory 证书服务的证书请求
位置:%Windir%\System32\kerberos.dll
默认情况下,此提供程序包含在本主题开头的“适用于”列表中指定的版本以及 Windows Server 2003 和 Windows XP 中。
有关 Kerberos 协议和 Kerberos SSP 的其他资源
适用于 Windows Vista 的 Kerberos 增强功能
Windows 7 中 Kerberos 身份验证的更改
NTLM 安全支持提供程序
NTLM 安全支持提供程序 (NTLM SSP) 是安全支持提供程序接口 (SSPI) 使用的二进制消息传送协议,用于实现 NTLM 质询-响应身份验证和协商完整性与机密性选项。 在使用 SSPI 身份验证的任何位置都会使用 NTLM,这包括使用服务器消息块或 CIFS 身份验证、HTTP 协商身份验证(例如 Internet Web 身份验证)和远程过程调用服务时。 NTLM SSP 包括 NTLM 和 NTLM 版本 2 (NTLMv2) 身份验证协议。
支持的 Windows 操作系统可将 NTLM SSP 用于以下目的:
客户端/服务器身份验证
打印服务
使用 CIFS (SMB) 进行文件访问
安全远程过程调用服务或 DCOM 服务
位置:%Windir%\System32\msv1_0.dll
默认情况下,此提供程序包含在本主题开头的“适用于”列表中指定的版本以及 Windows Server 2003 和 Windows XP 中。
有关 NTLM 协议和 NTLM SSP 的其他资源
摘要式安全支持提供程序
摘要式身份验证是用于轻型目录访问协议 (LDAP) 和 Web 身份验证的行业标准。 摘要式身份验证以 MD5 哈希或消息摘要的形式在网络中传输凭据。
摘要式 SSP (Wdigest.dll) 可用于以下目的:
Internet Explorer 和 Internet Information Services (IIS) 访问
LDAP 查询
位置:%Windir%\System32\Wdigest.dll
默认情况下,此提供程序包含在本主题开头的“适用于”列表中指定的版本以及 Windows Server 2003 和 Windows XP 中。
有关摘要式协议和摘要式 SSP 的其他资源
Schannel 安全支持提供程序
安全通道 (Schannel) 用于基于 Web 的服务器身份验证,例如当用户尝试访问安全 Web 服务器时。
TLS 协议、SSL 协议、专用通信技术 (PCT) 协议和数据报传输层 (DTLS) 协议基于公钥加密。 Schannel 提供所有这些协议。 所有 Schannel 协议均使用客户端/服务器模型。 Schannel SSP 使用公钥证书验证参与方。 对参与方进行身份验证时,Schannel SSP 按以下优先顺序选择协议:
传输层安全性 (TLS) 版本 1.0
传输层安全性 (TLS) 版本 1.1
传输层安全性 (TLS) 版本 1.2
安全套接字层 (SSL) 版本 2.0
安全套接字层 (SSL) 版本 3.0
专用通信技术 (PCT)
注意:默认已禁用 PCT。
所选的协议是客户端和服务器能够支持的首选身份验证协议。 例如,如果服务器支持所有 Schannel 协议,而客户端仅支持 SSL 3.0 和 SSL 2.0,则身份验证过程将使用 SSL 3.0。
如果应用程序显式调用 DTLS,则使用 DTLS。 有关 DTLS 以及 Schannel 提供程序使用的其他协议的详细信息,请参阅 Schannel 安全支持提供程序技术参考。
位置:%Windir%\System32\Schannel.dll
默认情况下,此提供程序包含在本主题开头的“适用于”列表中指定的版本以及 Windows Server 2003 和 Windows XP 中。
注意
Windows Server 2008 R2 和 Windows 7 中的此提供程序引入了 TLS 1.2。 Windows Server 2012 和 Windows 8 中的此提供程序引入了 DTLS。
有关 TLS 和 SSL 协议及 Schannel SSP 的其他资源
协商安全支持提供程序
简单受保护 GSS-API 协商机制 (SPNEGO) 构成了协商 SSP 的基础,可用于协商特定的身份验证协议。 当某个应用程序调入 SSPI 以登录到网络时,该应用程序可以指定一个 SSP 来处理请求。 如果应用程序指定协商 SSP,则它会分析请求,并根据客户配置的安全策略选择适当的提供程序来处理请求。
SPNEGO 已在 RFC 2478 中指定。
在支持的 Windows 操作系统版本中,协商安全支持提供程序将在 Kerberos 协议和 NTLM 之间进行选择。 协商 SSP 默认选择 Kerberos 协议,除非身份验证涉及的系统之一无法使用该协议,或者调用方应用程序未提供足够的信息来使用 Kerberos 协议。
位置:%Windir%\System32\lsasrv.dll
默认情况下,此提供程序包含在本主题开头的“适用于”列表中指定的版本以及 Windows Server 2003 和 Windows XP 中。
有关协商 SSP 的其他资源
凭据安全支持提供程序
凭据安全服务提供程序 (CredSSP) 在启动新的终端服务和远程桌面服务会话时提供单一登录 (SSO) 用户体验。 CredSSP 使应用程序能够根据客户端的策略,将用户的凭据从客户端计算机(使用客户端 SSP)委托给目标服务器(通过服务器端 SSP)。 CredSSP 策略是使用组策略配置的,默认已关闭凭据委托。
位置:%Windir%\System32\credssp.dll
默认情况下,此提供程序包含在本主题开头的“适用于”列表中指定的版本中。
有关凭据 SSP 的其他资源
协商扩展安全支持提供程序
协商扩展 (NegoExts) 是一个身份验证包,用于对 Microsoft 及其他软件公司实现的应用程序和方案协商 SSP 的使用(NTLM 或 Kerberos 协议除外)。
此协商包扩展可实现以下方案:
联合系统中的丰富客户端可用性。 可以在 SharePoint 网站上访问文档,并可以使用功能齐全的 Microsoft Office 应用程序对其进行编辑。
对 Microsoft Office 服务的丰富客户端支持。 用户可以登录到 Microsoft Office 服务并使用功能齐全的 Microsoft Office 应用程序。
托管的 Microsoft Exchange Server 和 Outlook。 由于 Exchange Server 托管在 Web 上,因此不会建立域信任。 Outlook 使用 Windows Live 服务对用户进行身份验证。
客户端计算机和服务器之间的丰富客户端可用性。 使用操作系统的网络和身份验证组件。
Windows 协商包像处理 Kerberos 和 NTLM 那样处理 NegoExts SSP。 在启动时,NegoExts.dll 会加载到本地系统机构 (LSA) 中。 收到身份验证请求时,NegoExts 将根据请求的源在支持的 SSP 之间协商。 它会收集凭据和策略,对其进行加密,并将该信息发送到创建安全令牌的相应 SSP。
NegoExts 支持的 SSP 并非 Kerberos 和 NTLM 等独立 SSP。 因此,在 NegoExts SSP 中,当身份验证方法出于任何原因失败时,将显示或记录身份验证失败消息。 不支持重新协商或回退身份验证方法。
位置:%Windir%\System32\negoexts.dll
默认情况下,此提供程序包含在本主题开头的“适用于”列表中指定的版本中,但不包括 Windows Server 2008 和 Windows Vista。
PKU2U 安全支持提供程序
PKU2U 协议在 Windows 7 和 Windows Server 2008 R2 中作为 SSP 引入并实现。 此 SSP 可实现对等身份验证,具体而言,它通过 Windows 7 中引入的称为“家庭组”的媒体和文件共享功能实现此身份验证方法。 该功能允许在非域成员的计算机之间共享。
位置:%Windir%\System32\pku2u.dll
默认情况下,此提供程序包含在本主题开头的“适用于”列表中指定的版本中,但不包括 Windows Server 2008 和 Windows Vista。
有关 PKU2U 协议和 PKU2U SSP 的其他资源
安全支持提供程序的选择
Windows SSPI 可以使用通过已安装的安全支持提供程序支持的任何协议。 但是,由于并非所有操作系统都支持与运行 Windows Server 的任意给定计算机相同的 SSP 包,因此客户端和服务器必须协商使用两者都支持的协议。 Windows Server 尽可能让客户端计算机和应用程序优先使用 Kerberos 协议(基于标准的强大协议),但操作系统仍然允许运行不支持使用 Kerberos 协议进行身份验证的客户端计算机和客户端应用程序。
在身份验证发生之前,两台相互通信的计算机必须就它们都能支持的协议达成一致。 对于任何可通过 SSPI 使用的协议,每台计算机必须有适当的 SSP。 例如,要使客户端计算机和服务器能够使用 Kerberos 身份验证协议,它们都必须支持 Kerberos v5。 Windows Server 使用 EnumerateSecurityPackages 函数来识别计算机支持的 SSP 以及这些 SSP 的功能。
可通过以下两种方式之一处理身份验证协议的选择:
单个身份验证协议
在服务器上指定单个可接受的协议时,客户端计算机必须支持指定的协议,否则通信会失败。 指定单个可接受的协议时,将按如下所述进行身份验证交换:
客户端计算机请求访问服务。
服务器回复请求,并指定要使用的协议。
客户端计算机检查回复内容,并确定它是否支持指定的协议。 如果客户端计算机支持指定的协议,则身份验证将继续。 如果客户端计算机不支持该协议,则无论是否已授权客户端计算机访问资源,身份验证都会失败。
协商选项
协商选项可用于允许客户端和服务器尝试查找可接受的协议。 此选项基于简单受保护 GSS-API 协商机制 (SPNEGO)。 使用协商身份验证协议的选项开始身份验证时,将按如下所述进行 SPNEGO 交换:
客户端计算机请求访问服务。
服务器根据它的首选协议做出回复,并在回复中提供它支持的身份验证协议列表以及身份验证质询或响应。 例如,服务器可能会列出 Kerberos 协议和 NTLM,并发送 Kerberos 身份验证响应。
客户端计算机检查回复内容,并确定它是否支持任一指定的协议。
如果客户端计算机支持首选协议,则身份验证将继续。
如果客户端计算机不支持首选协议,但支持服务器列出的其他协议之一,则客户端计算机将告知服务器它支持的身份验证协议,并且身份验证将继续。
如果客户端计算机不支持任何列出的协议,则身份验证交换将会失败。