通过远程桌面连接Windows实例时出现“出现身份验证错误,要求的函数不受支持”如何解决?

重要

本文中含有需要您注意的重要提示信息,忽略该信息可能对您的业务造成影响,请务必仔细阅读。

本文介绍通过远程桌面连接Windows实例时出现“出现身份验证错误,要求的函数不受支持”错误提示的解决方案。

问题现象

通过远程桌面连接Windows实例时,出现错误提示“出现身份验证错误,要求的函数不受支持”。

1232132

问题原因

微软官方于2018年5月,更新了凭据安全支持提供程序协议(CredSSP)相关补丁和身份验证请求方式。默认情况下,安装此更新后,修补的本地电脑无法与未修补的ECS实例进行通信。

说明

加密Oracle修正是操作系统内的一种策略设置,此策略设置可应用于使用 CredSSP 组件(例如,远程桌面连接)的应用程序。

当遇到如下任一情况时,会出现该连接错误:

说明
  • 未更新该补丁,指没有更新自2018年5月起至今的任意版本补丁,包括最新版本补丁。

  • 已更新该补丁,指更新过自2018年5月起至今的任意版本补丁或者所有版本补丁,包括最新版本补丁。

  • 更多加密Oracle修正的策略信息,请参见CVE-2018-0886的CredSSP更新

解决方案

根据实际情况,参考以下三种解决方案:

方案一:ECS实例允许远程桌面连接

说明

由于Windows Server系统版本较多,且各版本之间操作略有差异,此处分别以Windows Server 2008 R2、Windows Server 2012 R2和Windows Server 2016版本为例,步骤如下。

Windows Server 2008 R2系统版本

  1. 通过VNC连接Windows实例。

    具体操作,请参见通过密码认证登录Windows实例

  2. 单击开始,右键单击计算机,然后单击属性win2008开始菜单

  3. 控制面板主页区域,单击远程设置win2008远程设置

  4. 系统属性对话框中,勾选允许运行任意版本远程桌面的计算机连接(较不安全),然后单击确定win2008允许

Windows Server 2012 R2系统版本

  1. 通过VNC连接Windows实例。

    具体操作,请参见通过密码认证登录Windows实例

  2. 单击win2012开始图标图标,右键单击这台电脑,然后单击属性win2012开始

  3. 控制面板主页上,单击远程设置win2012远程设置

  4. 远程页签下,取消勾选仅允许运行使用网络级别身份验证的远程桌面的计算机连接(建议) ,然后单击确定win2012取消勾选

Windows Server 2016系统版本

  1. 通过VNC连接Windows实例。

    具体操作,请参见通过密码认证登录Windows实例

  2. 单击Dingtalk_20210510142550.jpg图标,然后单击Windows系统

  3. 右键单击此电脑,然后选择更多 > 属性win2016属性

  4. 控制面板主页上,单击远程设置win2016远程设置

  5. 远程页签下,取消勾选仅允许运行使用网络级别身份验证的远程桌面的计算机连接(建议) ,然后单击确定win2016取消勾选

方案二 :安装对应补丁

此处以Windows Server 2016系统版本为例,其他Windows系统版本操作类似。

  1. 通过VNC连接Windows实例。

    具体操作,请参见通过密码认证登录Windows实例

  2. 单击Dingtalk_20210510142550.jpg图标,单击设置win2016开始

  3. Windows 设置页面,单击更新安全win2016更新与安全

  4. 更新状态页面,单击检查更新,等待更新下载和安装。

    说明

    如果需要手动安装CredSSP对应安全更新包,请访问微软官网,然后下载对应版本的安全更新包。

    win2016检查更新
  5. 重启Windows实例以完成安装更新。

    • 方式一:在ECS控制台上重启Windows实例,具体操作,请参见重启实例

    • 方式二:以Windows Server 2016版本为例,在远程连接的Windows实例上,选择Dingtalk_20210510142550.jpg > 电源管理 > 重启win2016重启服务器

方案三:修改注册表

此处以Windows Server 2016系统版本为例,其他Windows系统版本操作类似。当本地电脑或ECS实例完成CredSSP相关补丁的更新后,请选择以下一种方式修改注册表。

警告

如果修改注册表不当,Windows操作系统可能会出现严重问题,您需要自行承担修改注册表的风险。修改注册表之前,建议您先创建快照备份数据,以免数据丢失。创建快照的具体操作,请参见创建一个云盘快照

(推荐)使用脚本修改注册表

  1. 通过VNC连接Windows实例。

    具体操作,请参见通过密码认证登录Windows实例

  2. 打开CMD命令提示行。

    1. 右键单击Dingtalk_20210510142550.jpg图标,然后单击运行win2016运行

    2. 运行对话框中输入cmdwin2016

    3. 单击确定

      进入CMD命令提示行。win2016cmd命令提示行

  3. 执行以下命令,进入PowerShell模式。

    powershell
  4. 执行如下命令,以管理员身份运行Windows PowerShell脚本。

    New-Item -Path HKLM:\Software\Microsoft\Windows\CurrentVersion\Policies\System -Name CredSSP -Force
    New-Item -Path HKLM:\Software\Microsoft\Windows\CurrentVersion\Policies\System\CredSSP -Name Parameters -Force
    Get-Item -Path HKLM:\Software\Microsoft\Windows\CurrentVersion\Policies\System\CredSSP\Parameters | New-ItemProperty -Name AllowEncryptionOracle -Value 2 -PropertyType DWORD -Force
  5. 重启Windows实例以完成安装更新。

    • 方式一:在ECS控制台上重启Windows实例,具体操作,请参见重启实例

    • 方式二:以Windows Server 2016版本为例,在远程连接的Windows实例上,选择Dingtalk_20210510142550.jpg > 电源管理 > 重启win2016重启服务器

    说明

    若您先使用本方法修改了注册表,随后又更新了本地电脑和Windows实例的安全补丁,建议您将AllowEncryptionOracle数值数据设为0或者1以获得更高的安全性。AllowEncryptionOracle数值数据信息,请参见CVE-2018-0886的CredSSP更新

手动修改注册表

  1. 通过VNC连接Windows实例。

    具体操作,请参见通过密码认证登录Windows实例

  2. 打开注册表编辑器。

    1. 右键单击Dingtalk_20210510142550.jpg图标,然后单击运行win2016运行

    2. 运行对话框中输入regeditwin2016运行窗口

    3. 单击确定

      进入注册表编辑器。 win2016注册表编辑器

  3. 注册表编辑器页面的HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System\CredSSP\Parameters路径下,将注册表项AllowEncryptionOracle数值数据设置为2

    说明

    注册表项AllowEncryptionOracle数值数据信息,请参见CVE-2018-0886的CredSSP更新

    如果CredSSP项或Parameters项不存在,请新建对应注册表项,然后在该注册表项下新建REG_DWORD类型的注册表项AllowEncryptionOracle。以CredSSP项和Parameters均不存在为例,操作如下:

    1. HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System路径下新建CredSSP项。

      1. 右键单击注册表项空表区域,然后选择新建(N) > 项(K)win2016新建项

      2. 输入CredSSP,按Enter键。

        新建项
    2. HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System\CredSSP路径下新建Parameters项。Parameters项

    3. HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System\CredSSP\Parameters路径下新建AllowEncryptionOracle项。新建字符串

    4. 修改注册表项AllowEncryptionOracle数值数据

      1. 右键单击注册表项AllowEncryptionOracle,然后单击修改(M)修改注册表项

      2. 在对话框中,将数值数据设置为2,然后单击确定修改数据数值

  4. 重启Windows实例以更新配置。

    • 方式一:在ECS控制台上重启Windows实例,具体操作,请参见重启实例

    • 方式二:以Windows Server 2016版本为例,在远程连接的Windows实例上,选择Dingtalk_20210510142550.jpg > 电源管理 > 重启win2016重启服务器

相关文档

CVE-2018-0886 | CredSSP 远程执行代码漏洞