远程桌面报错出现身份验证错误,要求的函数不受支持的解决方法(CredSSP加密Oracle修正与注册表AllowEncryptionOracle)

用mstsc连一台Windows Server 2012 R2,账号密码输完点确定,弹窗直接甩一句「出现身份验证错误。要求的函数不受支持」,展开详细信息写着「这可能是由于CredSSP加密Oracle修正」。网络是通的,3389端口telnet也通,同一个账号在别的机器上登录正常,唯独这台连不上。

报错原文长这样:

出现身份验证错误。要求的函数不受支持。

这可能是由于 CredSSP 加密 Oracle 修正。有关详细信息,请访问
https://go.microsoft.com/fwlink/?linkid=866660

远程计算机:192.168.10.30

这句提示跟密码没关系。2018年5月8日那批补丁把CredSSP的默认策略从「易受攻击」改成了「缓解」,客户端不再回退到不安全的版本,打过补丁的机器去连没打补丁的服务器,握手阶段直接断掉。修的漏洞编号是CVE-2018-0886,补丁清单在KB 4093492里,对不上补丁级别的两台机器之间,RDP 8.1、8.0的客户端一律连不上。

动手之前先想清楚一件事:要改的是发起连接的那台机器,不是被连的服务器。

2018年3月13日的更新先引入了「加密Oracle修正」这个组策略项,取值三种:强制更新的客户端(0)、缓解(1)、易受攻击(2)。强制更新的客户端是客户端不回退、服务端也不接受未修补的客户端;缓解是客户端不回退、服务端还能接受旧客户端;易受攻击是两头都放行。2018年5月8日起默认值落到缓解,打过补丁的一方去连没打补丁的一方,必然撞上开头那个弹窗。改错机器白折腾半天,这个坑踩过。

动手前先看这台机器的策略当前是什么值:

reg query "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System\CredSSP\Parameters" /v AllowEncryptionOracle

提示找不到项,说明走系统默认,即缓解。有值就按数值判断:2是易受攻击、1是缓解、0是强制更新的客户端。Windows 8.1、Windows Server 2012 R2这类停服或半停服的系统上最容易撞见,2019年5月爆出BlueKeep(CVE-2019-0708)之后,不少单位把老机器直接隔离,补丁级别就此停在2018年那会儿。

能打补丁就别改策略

对端如果是自己维护的服务器,正路是装补丁再重启。按系统对号入座:Server 2016是KB 4284880,Server 2012 R2是KB 4284815,Server 2012和Windows 8.1是KB 4284855,Server 2008 R2是KB 4284826。这几代系统的内部版本大致是build 10.0.14393、10.0.17763、10.0.19045与10.0.26100,用winver或者systeminfo看一眼就知道落在哪一代。

装完必须重启。只装补丁不重启,连接照样失败,实测过好几回:装完兴冲冲去连还是同一个弹窗,重启之后一次过。

临时办法:客户端放宽策略

对端没法动(客户机房的设备、厂商封闭的系统、已经停服的Server 2008 R2),只能在发起连接这台机器上放宽。有gpedit就走组策略,路径是gpedit.msc→计算机配置→管理模板→系统→凭据分配→加密Oracle修正,设为已启用,保护级别选「易受攻击」。

改完执行一遍让它生效:

gpupdate /force

家庭版没有gpedit,直接写注册表,效果一样:

reg add "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System\CredSSP\Parameters" /v AllowEncryptionOracle /t REG_DWORD /d 2 /f

改完不用重启,关掉mstsc重新连一次就行。想撤销把值改回1,或者直接删掉Parameters这一项。

还有个更轻量的办法,只对单个连接生效:把连接另存成.rdp文件,用记事本打开,末尾加一行enablecredsspsupport:i:0。这样这台客户端连这台服务器时不再走CredSSP,其它连接不受影响。代价是登录到远程之后访问内网共享还得再输一次密码。

服务端也能放开,但不建议

被连的那台如果是Server,还能在「计算机配置→管理模板→Windows组件→远程桌面服务→远程桌面会话主机→安全」里改两条:要求对远程连接使用特定的安全层设为已启用并选RDP,要求使用网络级别身份验证设为已禁用。这两条一改,服务端退回不校验凭据委派的模式,等于把CVE-2018-0886的口子重新开开,内网临时顶一下可以,常年这么跑不合适。

排查时如果对端不是自己管的机器,看不到补丁状态,可以看客户端这边。事件查看器→应用程序和服务日志→Microsoft→Windows→RemoteDesktopServices-RdpCoreTS→Operational,失败的连接会留下记录。现场遇到过一次,翻遍防火墙规则以为是端口问题,日志里其实早写着凭据协商失败。

以上补丁号与默认值口径来自微软KB 4093492,数据截至2026年9月。老机器还是排个计划把补丁打完重启,比长期把AllowEncryptionOracle挂成2稳当。