本文提供了在安装 KB 931125后发生的 SSL/TLS 通信问题的解决方案。
原始 KB 数: 2801679
现象
2012 年 12 月 11 日之后,依赖于基于 TLS 的身份验证的应用程序和操作可能会突然失败,尽管它们没有明显的配置更改。 某些可能失败的应用程序和操作包括但不限于以下内容:
- 使用基于证书的身份验证的无线网络访问
- 使用基于证书的身份验证的有线网络访问
- 与 Lync 或 Office Communications Server 的客户端连接
- 将 Exchange Server 与统一消息结合使用的语音邮件
- 已启用 SSL 的网站访问
- Outlook 登录
- OS 启动延迟 (慢启动)
- 用户登录延迟(登录速度缓慢)
记录在 Windows 或应用程序特定的事件日志中的事件,以及范围或明确标识本文中讨论的症状,包括但不限于下表中列出的事件。
| 事件日志 | 事件源 | 事件 ID | 事件文本 |
|---|---|---|---|
| 系统 | Schannel | 36885 | 当请求客户端身份验证时,此服务器会向客户端发送受信任的证书颁发机构列表。 客户端使用此列表来选择服务器信任的客户端证书。 目前,此服务器信任如此多的证书颁发机构,以至于该列表已长得太长。 因此,此列表已被截断。 此计算机的管理员应查看受信任的客户端身份验证的证书颁发机构,并删除真正不需要信任的证书颁发机构。 |
| 系统 | Schannel | 36887 | 收到以下致命警报:47 |
| 系统 | NapAgent | 39 | 网络访问保护代理无法确定从中请求运行状况证书的 HRA。 网络更改或配置 GP 时,配置更改将提示进一步尝试获取运行状况证书。 否则不会进行进一步尝试。 有关详细信息,请联系 HRA 管理员。 |
| 系统 | RemoteAccess | 20225 | 端口上的点到点协议模块中发生以下错误: VPN2-509,UserName: <username>。 由于 RAS/VPN 服务器上配置的某个策略,连接被阻止。 具体来说,服务器用于验证用户名和密码的身份验证方法可能与连接配置文件中配置的身份验证方法不一致。 请联系 RAS 服务器的管理员,并通知他们此错误。 |
| 系统 | RemoteAccess | 20271 | 从 IP 地址>连接的用户<用户名>,但由于以下原因而失败了身份验证尝试:由于 RAS/VPN 服务器上配置了策略,因此阻止了连接。< 具体来说,服务器用于验证用户名和密码的身份验证方法可能与连接配置文件中配置的身份验证方法不一致。 请联系 RAS 服务器的管理员,并通知他们此错误。 |
原因
如果使用 2012 年 12 月的 2012 KB 931125更新包更新第三方根证书颁发机构,则可能会出现这些问题。 2012 年 12 月 11 日发布的 KB 931125 包仅适用于客户端 SKU。 但是,在 Windows 更新 和 WSUS 上也为服务器 SKU 提供了短时间。
此包安装了 330 多个第三方根证书颁发机构。 目前,Schannel 安全包支持的受信任证书颁发机构列表的最大大小为 16 KB。 拥有大量第三方根证书颁发机构将超过 16k 限制,并且会遇到 TLS/SSL 通信问题。
解决方法
如果使用 WSUS,并且未安装 2012 年 12 月 KB 931125更新,则应同步 WSUS 服务器,然后批准过期,以便服务器不安装更新。
如果安装了 2012 年 12 月的 2012 KB 931125更新包,则应使用以下解决方案删除现在拥有大量第三方根证书颁发机构的所有服务器上的其他第三方根证书颁发机构。
注意
此解决方案将删除所有第三方根证书颁发机构。 如果服务器已连接到 Windows 更新,则它会根据需要自动添加第三方根证书颁发机构,如 KB 931125中所述。 如果受影响的服务器与 Internet 隔离或断开连接,则必须像过去那样手动添加必要的第三方根证书颁发机构。 (或者,可以使用组策略安装它们。
若要解决此问题,请删除以下注册表项:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\SystemCertificates\AuthRoot\Certificates
为此,请按照下列步骤进行操作:
- 启动注册表编辑器
- 找到以下注册表子项:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\SystemCertificates\AuthRoot - 右键单击,然后删除名为“证书”的密钥。
注意
在对系统进行任何更改之前,请确保先备份注册表和受影响的密钥。
详细信息
如果 TLS/SSL 服务器包含受信任的根认证列表中的许多条目,则可能会出现这些问题。 如果满足以下条件,服务器会向客户端发送受信任的证书颁发机构列表:
- 服务器使用传输层安全 (TLS)/SSL 协议对网络通信进行加密。
- 在身份验证握手过程中,要求用客户端证书进行身份验证。
此受信任的证书颁发机构列表表示服务器可从中接受客户端证书的颁发机构。 若要由服务器进行身份验证,客户端必须具有存在于从服务器的列表到根证书的证书链中的证书。 这是因为客户端证书始终是链末尾的结束实体证书。 客户端证书不是链的一部分。
目前,Schannel 安全包支持的受信任证书颁发机构列表的最大大小在 Windows Server 2008、Windows Server 2008 R2 和 Windows Server 2012 中为 16 KB。
Schannel 通过在本地计算机上搜索受信任的根证书颁发机构存储来创建受信任的证书颁发机构列表。 出于客户端身份验证目的信任的每个证书都会添加到列表中。 如果此列表的大小超过 16 KB,则 Schannel 会记录警告事件 ID 36855。 然后,Schannel 将截断受信任的根证书列表,并将此截断的列表发送至客户端计算机。
当客户端计算机收到受信任的根证书的截断列表时,客户端计算机可能没有受信任的证书颁发者链中的证书。 例如,客户端计算机可能有一个证书,该证书对应于从受信任的证书颁发机构列表中截断的受信任根证书。 因此,服务器无法对客户端进行身份验证。