远程连接Windows实例时出现身份验证错误的处理方法

远程连接Windows实例时出现身份验证错误的处理方法

免责声明:本文档可能包含第三方产品信息,该信息仅供参考。阿里云对第三方产品的性能、可靠性以及操作可能带来的潜在影响,不做任何暗示或其他形式的承诺。

 

问题描述

通过微软的RDP协议客户端,远程连接Windows实例时,系统提示“出现身份验证错误,要求的函数不受支持(The function requested is not supported)”错误。

 

问题原因

微软官方2018年5月,更新了凭据安全支持提供程序协议(CredSSP)相关补丁和身份验证请求方式。当遇到如下一种情景时,就会出现该连接错误。

  • 情景一:客户端未更新该补丁,服务器端已更新该补丁且加密Oracle修正的策略为强制更新的客户端。
  • 情景二:客户端已更新该补丁且加密Oracle修正的策略为强制更新的客户端,服务器端未更新该补丁。
  • 情景三:客户端已更新该补丁且加密Oracle修正的策略为缓解,服务器端未更新该补丁。
    注:
    • 未更新该补丁指没有更新自2018年5月起至今的任意版本补丁(包括最新版本补丁)。
    • 已更新该补丁指更新过自2018年5月起至今的任意版本补丁或者所有版本补丁(包括最新版本补丁)。
    • 加密Oracle修正的策略步骤为单击 计算机配置 > 管理模板 > 系统 > 凭据分配 > 加密Oracle修正。更多信息请参考相关文档步骤。

 

解决方法

方法一 :服务器端允许任意版本的远程桌面连接

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

 

Windows Server 2008 R2系统版本

  1. 通过远程连接登录Windows实例,打开 开始 ,右键单击 计算机,选择 属性

  2. 在系统控制面板中,单击 远程设置,在弹出的 远程桌面 选项中选择 允许运行任意版本远程桌面的计算机连接(较不安全) 并单击 确定

 

Windows Server 2012 R2系统版本

  1. 通过远程连接登录Windows实例,打开 开始 界面,右键单击 这台电脑,选择 属性

  2. 在系统控制面板中,单击 远程设置,在弹出的 远程桌面 选项中取消选择 仅允许运行使用网络级别身份验证的远程桌面的计算机连接(建议) 并单击 确定

 

Windows Server 2016系统版本

  1. 通过远程连接登录Windows实例,打开 开始 界面,单击 Windows系统右键单击 此电脑,选择 更多 > 属性

  2. 在系统控制面板中,单击 远程设置,在弹出的 远程桌面 选项中取消选择 仅允许运行使用网络级别身份验证的远程桌面的计算机连接(建议) 并单击 确定

 

方法二 :Windows安全更新

注:

  • 此处以Windows Server 2016系统版本为例,其他Windows系统版本操作类似。
  • 如果您的客户端是Windows系统,请同样执行如下操作。
  1. 通过远程连接登录Windows实例,搜索并打开 Windows 更新 页面,单击 检查更新 下载更新。

  2. 等待更新下载和安装。
    提示:如果需要手动安装CredSSP对应安全更新包,请参考微软官网地址进行选择对应版本的安全更新下载。
  3. 重启实例或重启本地计算机以完成安装更新。

 

方法三:修改注册表

 

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

当客户端或服务器端完成CredSSP相关补丁的更新后,请选择以下一种方式修改其注册表。

警告:

  • 如果修改注册表不当,可能会出现严重问题,您需要自行承担修改注册表风险。修改注册表之前,建议您先通过创建快照备份数据,以免数据丢失。
  • 本方法会降低您本地计算机或Windows实例的安全性,我们建议您使用方法二

 

手动修改

  1. 登录Windows实例或者本地计算机,单击 开始运行,输入regedit,单击 确定
  2. 单击 HKEY_LOCAL_MACHINE > SOFTWARE > Microsoft > Windows > CurrentVersion > Policies > System > CredSSP > Parameters
  3. 如果 CredSSP 项或者 Parameters 项不存在,请新建 CredSSP 项或者 Parameters 项,在 Parameters 下新建 REG_DWORD 类型的 AllowEncryptionOracle ,并设置数据为2

  4. 重启实例或重启本地计算机。

 

脚本修改

  1. 登录Windows实例或者本地计算机,以管理员身份运行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
  2. 重启实例或重启本地计算机。
    注:若您优先使用本方法修改了注册表,随后又更新了客户端和ECS实例安全补丁,我们建议您将AllowEncryptionOracle的值设为0或者1以获得更高的安全性。

 

相关文档

更多CredSSP相关问题,请参考如下文档。

 

适用于

  • 云服务器 ECS

 

如果您的问题仍未解决,您可以在阿里云社区免费咨询,或提交工单联系阿里云技术支持。