安全支持提供程序接口体系结构

适用范围:Windows Server 2022、Windows Server 2019、Windows Server 2016

IT 专业人员的此参考主题介绍了安全支持提供程序接口 (SSPI) 体系结构中使用的Windows 身份验证协议。

Microsoft 安全支持提供程序接口 (SSPI) 是Windows 身份验证的基础。 需要身份验证的应用程序和基础结构服务使用 SSPI 来提供它。

SSPI 是在 Windows 服务器操作系统中实现通用安全服务 API (GSSAPI) 。 有关 GSSAPI 的详细信息,请参阅 IETF RFC 数据库中的 RFC 2743 和 RFC 2744。

Windows中调用特定身份验证协议的默认安全支持提供程序 (SSP) 合并到 SSPI 中作为 DLL。 以下部分介绍了这些默认的 SSP。 如果其他 SSP 可与 SSPI 一起使用,则可以合并这些 SSP。

如下图所示,Windows中的 SSPI 提供了一种机制,用于在客户端计算机与服务器之间的现有通信通道上传递身份验证令牌。 需要对两台计算机或设备进行身份验证,以便它们能够安全地通信时,身份验证请求将路由到 SSPI,以完成身份验证过程,而不考虑当前正在使用的网络协议。 SSPI 返回透明二进制大型对象。 这些在应用程序之间传递,此时可以传递到 SSPI 层。 因此,SSPI 使应用程序能够使用计算机上或网络上可用的各种安全模型,而无需将接口更改为安全系统。

Diagram showing the Security Support Provider Interface Architecture

以下部分介绍与 SSPI 交互的默认 SSP。 SSP 在Windows操作系统中采用不同方式用于在不安全的网络环境中促进安全通信。

本主题中还包括:

安全支持提供程序选择

Kerberos 安全支持提供程序

此 SSP 仅使用 Microsoft 实现的 Kerberos 版本 5 协议。 此协议基于网络工作组的 RFC 4120 和修订草案。 它是用于交互式登录的密码或智能卡的行业标准协议。 这也是Windows中服务的首选身份验证方法。

由于 Kerberos 协议自 Windows 2000 年以来一直是默认身份验证协议,因此所有域服务都支持 Kerberos SSP。 这些服务包括:

  • 使用轻型目录访问协议的 Active Directory 查询 (LDAP)

  • 使用远程过程调用服务的远程服务器或工作站管理

  • 打印服务

  • 客户端-服务器身份验证

  • 使用服务器消息块的远程文件访问 (SMB) 协议 (也称为通用 Internet 文件系统或 CIFS)

  • 分布式文件系统管理和引荐

  • 用于Internet Information Services (IIS) 的 Intranet 身份验证

  • Internet 协议安全 (IPsec) 的安全机构身份验证

  • 针对域用户和计算机的 Active Directory 证书服务的证书请求

位置:%Windir%\System32\kerberos.dll

此提供程序默认包含在本主题开头的“应用于”列表中指定的版本中,以及 Windows Server 2003 和 Windows XP。

Kerberos 协议和 Kerberos SSP 的其他资源

NTLM 安全支持提供程序

NTLM 安全支持提供程序 (NTLM SSP) 是安全支持提供程序接口 (SSPI) 使用的二进制消息传送协议,用于允许 NTLM 质询响应身份验证和协商完整性和机密性选项。 无论使用 SSPI 身份验证(包括服务器消息块或 CIFS 身份验证)使用 NTLM,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。

选择的协议是客户端和服务器可支持的首选身份验证协议。 例如,如果服务器支持所有 Schannel 协议,并且客户端仅支持 SSL 3.0 和 SSL 2.0,则身份验证过程使用 SSL 3.0。

应用程序显式调用 DTLS 时使用。 有关 DTLS 以及 Schannel 提供程序使用的其他协议的详细信息,请参阅 Schannel 安全支持提供程序技术参考

位置: %Windir%\System32\Schannel.dll

此提供程序默认包含在本主题开头的“应用于”列表中指定的版本中,以及 Windows Server 2003 和 Windows XP。

注意

TLS 1.2 已在 Windows Server 2008 R2 和 Windows 7 中引入此提供程序。 DTLS 在Windows Server 2012和Windows 8中引入了此提供程序。

TLS 和 SSL 协议和 Schannel SSP 的其他资源

协商安全支持提供程序

简单受保护的 GSS-API 协商机制 (SPNEGO) 构成了协商 SSP 的基础,该机制可用于协商特定的身份验证协议。 当某个应用程序调入 SSPI 以登录到网络时,该应用程序可以指定一个 SSP 来处理请求。 如果应用程序指定 Negotiate SSP,它将分析请求,并根据客户配置的安全策略选取相应的提供程序来处理请求。

SPNEGO 在 RFC 2478 中指定。

在受支持的Windows操作系统版本中,协商安全支持提供程序在 Kerberos 协议和 NTLM 之间进行选择。 协商默认选择 Kerberos 协议,除非身份验证所涉及的系统之一无法使用该协议,否则调用应用程序没有提供足够的信息来使用 Kerberos 协议。

位置: %Windir%\System32\lsasrv.dll

此提供程序默认包含在本主题开头的“应用于”列表中指定的版本中,以及 Windows Server 2003 和 Windows XP。

协商 SSP 的其他资源

凭据安全支持提供程序

凭据安全服务提供程序 (CredSSP) 在启动新的终端服务和远程桌面服务会话时提供单一登录 (SSO) 用户体验。 CredSSP 使应用程序能够根据客户端的策略,使用客户端 SSP) 将用户的凭据从客户端计算机 (委托给目标服务器) (,具体取决于客户端的策略。 CredSSP 策略是使用 组策略 配置的,默认情况下会关闭凭据委派。

位置: %Windir%\System32\credssp.dll

此提供程序默认包含在本主题开头的 “应用于 ”列表中指定的版本中。

凭据 SSP 的其他资源

协商扩展安全支持提供程序

协商扩展 (NegoExts) 是一个身份验证包,用于协商使用 NTLM 或 Kerberos 协议以外的 SSP,适用于 Microsoft 和其他软件公司实现的应用程序和方案。

协商包的此扩展允许以下方案:

  • 联合系统中的丰富客户端可用性。 可以在SharePoint网站上访问文档,并且可以使用功能齐全的Microsoft Office应用程序对其进行编辑。

  • 对Microsoft Office服务的丰富客户端支持。 用户可以登录到Microsoft Office服务,并使用功能齐全的Microsoft Office应用程序。

  • 托管Microsoft Exchange Server和Outlook。 没有建立域信任,因为Exchange Server托管在 Web 上。 Outlook使用 Windows Live 服务对用户进行身份验证。

  • 客户端计算机和服务器之间的丰富客户端可用性。 使用操作系统的网络和身份验证组件。

Windows Negotiate 包以与 Kerberos 和 NTLM 相同的方式对待 NegoExts SSP。 启动时,NegoExts.dll加载到本地系统机构 (LSA) 。 收到身份验证请求时,根据请求的源,NegoExts 会在支持的 SSP 之间协商。 它会收集凭据和策略,对其进行加密,并将该信息发送到创建安全令牌的相应 SSP。

NegoExts 支持的 SSP 不是独立的 SSP,例如 Kerberos 和 NTLM。 因此,在 NegoExts SSP 中,当身份验证方法因任何原因而失败时,将显示或记录身份验证失败消息。 无法重新谈判或回退身份验证方法。

位置: %Windir%\System32\negoexts.dll

此提供程序默认包含在本主题开头的“适用范围”列表中指定的版本中,不包括 Windows Server 2008 和 Windows Vista。

PKU2U 安全支持提供程序

PKU2U 协议在 Windows 7 和 Windows Server 2008 R2 中作为 SSP 引入并实现。 此 SSP 支持对等身份验证,特别是通过名为 HomeGroup 的媒体和文件共享功能(Windows 7 中引入)。 此功能允许在非域成员的计算机之间共享。

位置: %Windir%\System32\pku2u.dll

此提供程序默认包含在本主题开头的“适用范围”列表中指定的版本中,不包括 Windows Server 2008 和 Windows Vista。

PKU2U 协议和 PKU2U SSP 的其他资源

安全支持提供程序选择

Windows SSPI 可以使用通过已安装的安全支持提供程序支持的任何协议。 但是,由于并非所有操作系统都支持与运行Windows服务器的任何给定计算机相同的 SSP 包,因此客户端和服务器必须协商使用它们都支持的协议。 Windows服务器希望客户端计算机和应用程序尽可能使用 Kerberos 协议(一种基于标准的强协议),但操作系统将继续允许不支持 Kerberos 协议的客户端计算机和客户端应用程序进行身份验证。

在进行身份验证之前,两台通信计算机必须就两台计算机可以支持的协议达成一致。 若要通过 SSPI 使用任何协议,每台计算机必须具有相应的 SSP。 例如,对于客户端计算机和服务器使用 Kerberos 身份验证协议,它们必须同时支持 Kerberos v5。 Windows服务器使用函数 EnumerateSecurityPackages 来确定计算机上支持哪些 SSP,以及这些 SSP 的功能是什么。

可通过以下两种方式之一处理身份验证协议的选择:

  1. 单一身份验证协议

  2. 协商选项

单一身份验证协议

在服务器上指定单个可接受的协议时,客户端计算机必须支持指定的协议或通信失败。 指定单个可接受的协议时,身份验证交换将如下所示:

  1. 客户端计算机请求访问服务。

  2. 服务器会回复请求,并指定要使用的协议。

  3. 客户端计算机检查回复的内容,并检查以确定它是否支持指定的协议。 如果客户端计算机确实支持指定的协议,身份验证将继续。 如果客户端计算机不支持协议,身份验证会失败,无论客户端计算机是否有权访问资源。

协商选项

协商选项可用于允许客户端和服务器尝试查找可接受的协议。 这是基于简单和受保护的 GSS-API 协商机制 (SPNEGO) 。 当身份验证以协商身份验证协议的选项开始时,SPNEGO 交换将如下所示:

  1. 客户端计算机请求访问服务。

  2. 服务器会根据其第一选择的协议,使用它可以支持的身份验证协议列表进行答复,以及身份验证质询或响应。 例如,服务器可能会列出 Kerberos 协议和 NTLM,并发送 Kerberos 身份验证响应。

  3. 客户端计算机检查回复的内容,并检查以确定它是否支持任何指定的协议。

    • 如果客户端计算机支持首选协议,身份验证会继续。

    • 如果客户端计算机不支持首选协议,但它确实支持服务器列出的其他协议之一,客户端计算机会让服务器知道它支持的身份验证协议,并且身份验证会继续进行。

    • 如果客户端计算机不支持列出的任何协议,身份验证交换将失败。

其他参考

Windows 身份验证体系结构