全部产品
阿里云办公

如何解决 Windows 实例出现身份验证错误及更正 CredSSP

更新时间:2018-11-28 15:58:11

问题描述

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

问题原因

微软官方 2018 年 5 月更新了凭据安全支持提供程序协议(CredSSP)相关补丁和身份验证请求方式。当出现以下任一情景时会出现该连接错误:
  • 情景一:客户端未更新该补丁,服务器端已更新该补丁且加密 Oracle 修正的策略为强制更新的客户端。
  • 情景二:客户端已更新该补丁且加密 Oracle 修正的策略为强制更新的客户端,服务器端未更新该补丁。
  • 情景三:客户端已更新该补丁且加密 Oracle 修正的策略为缓解,服务器端未更新该补丁。
    注:
    • 未更新该补丁指没有更新自2018年5月起至今的任意版本补丁(包括最新版本补丁)。
    • 已更新该补丁指更新过自2018年5月起至今的任意版本补丁或者所有版本补丁(包括最新版本补丁)。
    • 加密 Oracle 修正的策略路径为计算机配置->管理模板->系统->凭据分配->加密 Oracle 修正。更多信息请参考相关文档

解决方法

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

Windows Server 2008 R2

  1. 通过 远程连接功能 登录 Windows 实例。
  2. 打开 开始 ,右键单击 计算机,选择 属性
  3. 在系统控制面板中,单击 远程设置,在弹出的 远程桌面 选项中选择 允许运行任意版本远程桌面的计算机连接(较不安全) 并单击 确定
    警告:此操作将允许较低安全级别的远程桌面连接。为了保证您的信息安全,建议采用方法二

Windows Server 2012 R2

  1. 通过 远程连接功能 登录 Windows 实例。
  2. 在开始界面,右键单击 这台电脑,选择 属性
  3. 在系统控制面板中,单击 远程设置,在弹出的 远程桌面 选项中取消选择 仅允许运行使用网络级别身份验证的远程桌面的计算机连接(建议) 并单击 确定
    警告:此操作将允许较低安全级别的远程桌面连接。为了保证您的信息安全,建议采用方法二

Windows Server 2016

  1. 通过 远程连接功能 登录 Windows 实例。
  2. 打开 开始 -> Windows系统 -> 此电脑,右键单击 此电脑,选择 更多 -> 属性
  3. 在系统控制面板中,单击 远程设置,在弹出的 远程桌面 选项中取消选择 仅允许运行使用网络级别身份验证的远程桌面的计算机连接(建议) 并单击 确定
    警告:此操作将允许较低安全级别的远程桌面连接。为了保证您的信息安全,建议采用方法二

方法二 :Windows安全更新

  1. 通过 远程连接功能 登录 Windows 实例。
    注:如果您的客户端是 Windows 系统,请同样执行如下操作。
  2. 搜索并打开 Windows 更新
  3. 单击 检查更新 下载积累的更新。
  4. 等待更新下载和安装。
  5. 重启实例以完成安装更新。
您也可以根据自己的操作系统,在 Windows 实例和客户端上安装 CredSSP 对应的安全更新安装包:

方法三:修改注册表

针对已经更新 CredSSP 相关补丁的客户端或者服务器端,您可以手动修改注册表,也可以运行我们为您准备的 PowerShell 脚本。
警告
  • 使用注册表编辑器或其他方法修改注册表不当,可能会出现严重问题,您需要自行承担修改注册表风险。修改注册表之前,建议您先通过 创建快照 备份数据,以免数据丢失。
  • 本方法会降低您本地计算机或实例的安全性,我们建议您使用 方法二

手动修改

  1. 登录实例或者本地计算机。
  2. 单击 开始 -> 运行,输入 regedit,单击 确定
  3. 定位到 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System\CredSSP\Parameters 键,如果 CredSSP 或者 Parameters 键不存在,请新建 CredSSP 或者 Parameters 键。
  4. 在 Parameters 键下新建 DWORD 值 AllowEncryptionOracle,并设置数据为 2
  5. 重启实例或者本地计算机。

脚本修改

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

相关文档