我在一个旧笔记本电脑上安装了Windows Server 2016,在连接远程桌面的时候,提示身份验证错误:
出现身份验证错误。要求的函数不受支持。
访问提示的网页https://go.microsoft.com/fwlink/?linkid=866660 ,提示是由于Windows Server 2016修正了CredSSP的一个远程代码漏洞:
摘要
凭据安全支持提供程序协议 (CredSSP) 是处理其他应用程序的身份验证请求的身份验证提供程序。
CredSSP 的未修补版本中存在远程代码执行漏洞。 成功利用此漏洞的攻击者可以在目标系统上中继用户凭据以执行代码。 任何依赖 CredSSP 进行身份验证的应用程序都可能容易受到此类攻击。
此安全更新通过更正 CredSSP 在身份验证过程中验证请求的方式来修复此漏洞
根据该页面提示,修补的客户端无法与未修补的服务器进行通信,且修补CredSSP 的服务端将不接受未修补的客户端。
因此,我们需要在Win10家庭版上做的就是完成CredSSP加密数据库组策略设置。
这个设置涉及到以下注册表配置:
注册表路径 | HKLM\Software\Microsoft\Windows\CurrentVersion\Policies\System\CredSSP\Parameters |
---|---|
值 | AllowEncryptionOracle |
数据类型 | DWORD |
是否需要重启? | 是 |
AllowEncryptionOracle
键值可设置为0、1、2,分别对应以下策略。
策略设置 | 注册表值 | 客户端行为 | 服务器行为 |
---|---|---|---|
强制更新的客户端 | 0 | 使用 CredSSP 的客户端应用程序将无法回退到不安全的版本。 | 使用 CredSSP 的服务将不接受未修补的客户端。 注意 在所有 Windows 和第三方 CredSSP 客户端支持最新的 CredSSP 版本之前,不应部署此设置。 |
缓解 | 1 | 使用 CredSSP 的客户端应用程序将无法回退到不安全的版本。 | 使用 CredSSP 的服务将接受未修补的客户端。 |
易受攻击 | 2 | 使用 CredSSP 的客户端应用程序将通过支持回退到不安全的版本使远程服务器遭受攻击。 | 使用 CredSSP 的服务将接受未修补的客户端。 |
通过上表可见,如果将客户端的键值设置为2 易受攻击
,则服务端将接受为首修补的客户端。
所以我们要做的就是:
- 按WIN+R键打开运行对话框,键入regedit.exe打开注册表编辑器;
- 定位到项
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System\CredSSP\Parameters
,如果不存在的话自己新建。 - 在项Parameters下新建DWORD(32位)值,并重命名为
AllowEncryptionOracle
; - 修改
AllowEncryptionOracle
的值为2
。
保存并重启客户端,然后Win10家庭版就可以顺利连接Windows Server 2016的远程桌面了。